SQL

Generalităţi, documentaţie

Ce este: SQL
Documentaţie SQL: Microsoft
Documentaţie SQL: Oracle

Programe, unelte, servicii

Microsoft SQL Server Management Studio
Microsoft SQL Operations Studio
Modelarea bazelor de date: ERM.
Optimizarea interogărilor: Plan Explorer, Paste The Plan.
Amazon RDS: SQL Server.

Materiale on-line

Cursuri de SQL (free):
MVA

Varii tutoriale/articole:
DBDebunk Fabian Pascal.
ORM Terry Halpin.
SQLServer Pro.
SQLAuthority Pinal Dave.
SimpleTalk SQL.
FunctionX SQL Server 2012.
SQL Coffee.
T-SQL Tuesdays.
SQL ServerCentral.com.

Teorii

Normalizarea bazelor de date:
A relational model of data for large shared data banks: Edgar F. Codd (pdf).
A simple guide to five normal forms in relational database theory: William Kent.
Primele trei forme normale: Microsoft.

The third manifesto:
C.J. Date, Hugh Darwen: TTM.
RelDB: Dave Voorhis.

Script-uri de administrare

Manevre cu serviciile SQL, folosind PowerShell:

Descărcaţi codulPentru vizualizare, folosiţi scrollbar-ul din josul blocului de cod.
<#
    Manevre cu serviciile Microsoft SQL (fara Reporting si Analysis).
    1) Cautam serviciile FARA DEPENDENTE, care RULEAZA, si le oprim.
#>
Get-Service -Name *SQL* `
| Where-Object {$_.Status -eq "Running" -and $_.DependentServices -and $_.Name -ne "MySQL"} `
| ForEach-Object {$_.DependentServices} | Where-Object {$_.Status -eq "Running"} `
| ForEach-Object -Process {NET STOP $_.Name}

<#
    2) Cautam RESTUL serviciilor care RULEAZA si le oprim.
#>
Get-Service -Name *SQL* `
| Where-Object {$_.Status -eq "Running" -and $_.Name -ne "MySQL"} `
| ForEach-Object -Process {NET STOP $_.Name}


<#
    Reluarea activitatii.
    3) Cautam serviciile FARA DEPENDENTE, care AU FOST OPRITE, si le pornim.
#>
Get-Service -Name *SQL* `
| Where-Object {$_.Status -eq "Stopped" -and $_.DependentServices -and $_.Name -ne "MySQL"} `
| ForEach-Object {$_.DependentServices} | Where-Object {$_.Status -eq "Stopped"} `
| ForEach-Object -Process {NET START $_.Name}

<#
    4) Cautam RESTUL serviciilor care AU FOST OPRITE si le pornim.
#>
Get-Service -Name *SQL* | Where-Object {$_.Status -eq "Stopped" -and $_.Name -ne "MySQL"} `
| ForEach-Object -Process {NET START $_.Name}

Diverse baze de date

Lecţii de SQL

Fazele logice ale unei interogări.

Containere Docker: Microsoft SQL Server 2017

Avem nevoie de un calculator cu configuraţie modernă. De exemplu, eu folosesc sistemul de operare Microsoft Windows 10 Professional (x64), Creators Update, pe o maşină cu procesor Intel® Core™ i7 4720HQ (4 nuclee şi 8 procesoare logice la frecvenţa de 2.6 GHz), cu memorie RAM de 8 GB şi cu stocare HDD de 1 TB. Virtualizarea Hyper-V este activată (vezi Control Panel > Programs > Programs and Features > Turn Windows features on or off).

Serverul de baze de date va funcţiona ca un container Docker-pentru-Linux într-o maşină virtuală Linux (distribuţia Alpine): MobyLinuxVM.

Instalăm Docker for Windows de aici.

Impunem, via Docker (din Taskbar) > Settings > Advanced, dimensiuni ale memoriei RAM de cel puţin 4GB pentru maşina virtuală Linux. Vezi aici.


Containerul serverului de baze de date se instalează, fie din consola CMD (Win + R > cmd, Run as administrator) fie dintr-o fereastră PowerShell, folosind scriptul următor (vezi aici):

docker pull microsoft/mssql-server-linux:2017-latest

Rulăm următoarea comandă din consola CMD:

docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=caruta_Acuflori" -e "MSSQL_PID=Developer" --cap-add SYS_PTRACE -p 19991:18883 -d microsoft/mssql-server-linux:2017-latest

Parola trebuie să conţină: litere mici şi mari, caractere non-literă. În caz contrar, containerul se va închide! De asemeni, porturile au primit valori nestandard: 19991, 18883.

Găsim id-ul containerului (e4ce3ffd3350):

docker ps

Ne vom conecta la server folosind shell-ul bash (introducem id-ul containerului):

docker exec -it e4ce3ffd3350 "bash"

Suntem root!

Manevrele în serverul de baze de date vor fi realizate via sqlcmd. Astfel, din consola CMD, rulăm scriptul:

/opt/mssql-tools/bin/sqlcmd -S localhost -U SA -P 'caruta_Acuflori'

De îndată ce ne-am conectat la server, putem tasta instrucţiunile T-SQL de mai jos:

SELECT @@VERSION AS [versiunea], SUSER_NAME() AS [cine sunt]

Nu uitaţi să adăugaţi GO pe o linie separată, în sqlcmd, pentru a porni execuţia interogării!

Un script interesant:

USE [master] SELECT * FROM master.sys.all_objects AS a CROSS JOIN (SELECT * FROM master.sys.all_objects) AS b ORDER BY a.name DESC OFFSET 0 ROWS FETCH NEXT 1000000 ROWS ONLY

Sistemul de operare din maşina virtuală (în octombrie 2017) este Ubuntu 16.04.3 LTS (Xenial Xerus). După încheierea instalării lui Docker for Windows, versiunea de Ubuntu poate fi găsită rulând următorul script bash:

cat /etc/*-release

Tot via bash, puteţi actualiza sistemul de operare, respectiv instala un editor de text:

apt-get update
apt-get install vim