20 KiB
formation SQL SERVER
- formation SQL SERVER
- Vocabulaire
- historique de SQL server
- Particularité de SQL Server
- nature des SGBDR
- conception de Codd
- algébre relationell
- migration de base
- instaltion/Configuration
- outils
- table d'admin
- stockage
- Type
- Collonne calculée
- Snapshot
- import export
- Schema SQL
- Securité
- chifrement
- Tache d'administratrion
- index
- Sauvegarde
- surveillance et performance
Vocabulaire
- SGBD:Système de gestion de base de données
- page: unité de stockage minimal de 8ko
- schema SQL: unité de stockage logique conteneur d'objet relationnelle (dbo est un schema) = namespace
- extention: block de 8 pages = 64ko
- lobs: large object
GO: séparateur de batch qui s'adresse au client il execute les requéte d'avant pour être sur que la requête c'est bien éxecuter over():
historique de SQL server
1974: ingres 1984: sybase (premier SGBD client serveur) 1988: accord sysbase/microsoft 1989: sortie de SQL server Unix 1993: rupture avec sysbase sortie de la premiére version de SQL server full windows 1999: version 7 premiére version professionnelle 2005: refonte monté en gamme 2012: SQL server devient plus performant que oracle
Particularité de SQL Server
-
information Schema: select * from information_Schema.Tables -> permet d'avoir la liste des tables
-
multischema: chaque base peu contenire un nombre indeterminé de schema
-
posibilité de requéter des base sur le meme serveur (oracle postgress foive utilisé un dblink)
-
chaque base dispose son journal de transaction (oracle postgress un journal pour tous)
-
transaction: lot de commande
-
In Memory: plus d'écriture dans le journal de transaction (a utilisé en mode hight availlibility)
-
strecht table: stockage de table dans le cloud
nature des SGBDR
conception de Codd
- Séparation HArdware/logique
- algébre relationelle
- insersion supression modification emsembliste (peut mettre a jour plusieur donné dans une seule requête)
relation
- posséde un nom
- possésde une collection d'attributs
- posséde une clef primaire
- peut posséder d'autre clefs
- valeur atomique
- pas de relation sans clef primaire
attributs
- non unique au sein de la relation
- pas de null
- fait partie d'un domaine (valeur possible de l'attribut)
atomicité
donnée atomique: ne peut pas être subdiviser sans perte de sens en base de donné il faut stockés les donnés au maximum de facon atomique (exemple un numéro de sécurité social est divisable en plusieurs informations)
algébre relationell
pas de jointure dans le where ordre d'exécution des requétes: from,where,group by,having,select,orderby
migration de base
- de 7 a 2000
- 2000 a 2005 ou 2008
- 2005 - now
instaltion/Configuration
- classement: french point de code binaire
- authent: mode mix
- formatage du disque en cluster de 64KO pour s'aligner sur la taille de l'unité d'extention
- pas de raid 5 6 faut mieux se limiter au raid 0 1 10
- pas d'outil instalé sur le serveur
patch
- <2016 attendre la demande de microsft
- >2016 faire au plus vite
choix immuable lors de l'instalation
- répertoire des exe
- répertoire base systeme
- collation de base
different service
- SQL server Broswer: permet de naviger dans les instance par non au lieux de port (recommandé de désactiver sur la prod)
- gérée les service via SQL Server Configuration Manager
instance
- port 1433 si une seul instance
- Ne jamais redemmarrer une instance sauf absolue neccesité
configuration minimal
- max server memory
- cost threshold for parallelism -> cout pour que le moteur étudie le paralémlisme ->min 12 sur PC perso, 25 et 100 sur prod
- max degree of parrallelism -> nombre maximum de thread parralléle recommandation sur grosse machine 1/4 des coeur -1 sur du transactionnelle, plus sur du decissionelle
- optimize for ad hoc workloads:1
- Backup compression default:1 gain sur la vitesse de compression cpu vs vitesse écriture disque sauf si base sont setter en 'transparente data encryption' (chiffrage des fichier de la base)
- Backup checksum default',1
configuration Base
ne jamais mettre en ON:
- AUTO_CLOSE
- AUTO_SHRINK
mettre a ON:
- AUTO_CREATE_STATISTICS
- AUTO_UPDATE_STATISTICS
- pour version entreprise: AUTO_UPDATE_STATISTICS_ASYNC
activé l'autonomie partielle pemet de créer des compte user dédiéet de réglé des probléme de collation
ALTER DATABASE [DB_GRAND_HOTEL] SET CONTAINMENT = PARTIAL WITH NO_WAIT
base system
visible:
- master: liste des bases,connexions,lessage d'erreur (a sauvegarder impérativement tous les jour)
- model: template pour création des basrs
- msdb: gestion des travaux SQL SERVER (a sauvegarder impérativement tous les jour)
- tempdb: objet temporaire
invisible:
- mssqlsystemresource: routine systéme
optionel:
- ditribution (réplication)
- semanticdb (recherche sémantique)
renomer un serveur SQL
-
renomer le serveur au niveau de windows
-
changer le nom dans master
select * from sys.servers exec sp_dropserver '' exec sp_addserver '', local
-
redemmarré le service
outils
- SQL server Management Studio (ne pas utilisé sur une instance deffectueuse)
- SentryONe Plan Explorer (add on permetant d'améliorer le plan d'éxécution des requête)
- Gestionnaire de configuration SQL Server
- apexlog visualisation de log
SQLcmd.exe
utilitaire en ligne de commande option:
- -S nom du serveur
- *-U" login
- -P MDP
- -E Sécurité intégré windows
- -q tamponne unse requéte (go pour lancer)
- -Q lance une requête
- -A mode DAC (Dedicated Administrative Connector) connection d'urgence permet de mobiliser les resource pour la connection a utiliser en local
table d'admin
sys.object
- contient tous les objet de la base
- is_ms_shipped permet de voir les objet system
table instance
- sys.servers
- sys.databases
- sys.master_files
- sys.configuration
table base
- sys.table
- sys.schema
- sys.database_files
- sys.indexes
- sys.index_column
- sys.stats
stockage
considérer les fichier comme si s'était des disque d'OS deux fichier:
- mdf fichier de donnée (Master Data File)
- ldf journal de transaction (Log Data File)
groupe de fichier
possibilité de cré diferent group de fichier pour la même base par example mettre les collonnes purement relationelle dans un group dans un groupe de fichier X mettre les donné de type blob dans un groupe de fichier spécifique
definition de fichier
name filename Size MaxSize Filegrowth
- les taille sont exprimé en KB,MB,GB
- pas de croisance en pourcentage.
planification de capacité
- journale de transaction 20% des donnée pour les grosse base,40% pour les petitte
- ne pas placez les table ddans le groupe primary
- creer un groupe de fichier blob
- créer plusieur fichier par groupe de fichier en fonction de disques physique
disque
- raid 0 ou 1 uniquement
SSD
optmisation des écriture necesaire need disk write intensive
machine virtuel
vaux mieux utiliser le stockage non virtuel non recommandé pour utilisation particuliére
reduction de fichier
DBCC SHRINKFILE options:
- EMPTYFILE: permet de vider le fichier (besoin d'un autre fichier dans le groupfile pour transférer les donnés)
transaction
aficher le journal de transaction
select * from sys.fn_dblog(null, null)
fichier de transaction est le plus sensible a la vitesse d'écriture
3 mode de journalisation:
- Full: journalisation max, aucune purge
- BULK logged: journalisation min, aucune purge
- Simple: journalisation min, purge auto les deux premier necesitte des savegarde transactionelle pour purger
dans base transactionelle utilisé le mode full
dans les base decisionnelle BI plutot simple
frequence de sauvegarde du journal de transaction:20 a 30 min
si JT plein passez en mode simple.
alter database [toto] set recovery simple
partitionnement
permet de diminuer ou ventiler la plage es données scrutées:
- les recherches
- les mises a jour (prallélisme)
1 création des espace de stockage
2 creation de la fonction de partitionnement
create PArtition Function PF_Date_facture (Datetime2(0))
AS RANGE Right
For values ('2018-01-01','2019-01-01','2020-01-01');
3 création du schema de répartition
Create PARTITION SCHEME PS_DATE FACTURE
as PARTITION PF_DATE_FACTURE
to (FG_OLD,FG_2018,FG2019,FG2020)
on ne peut pas avoir une table stocker sous forme de cluster et partitioner pour cela il faut supprimer le cluster et recréer un cluster sur la partition
4 création de l'objet sur la partition
create table (...)
ON PS_DATE_FACTURE (coll_critere)
create INDEX (...)
ON PS_DATE_FACTURE (coll_critere)
Type
litteraux: char,varchar,nchar,nvarchar
Numérique: int,smallint,bigint,tinyint,decimal,numeric,float,real
time: datetime(obsolete),datetime2,time,datetimeoffset
Binaire: bit,binary,varbinary,hierarchyID,uniqueindetifier
Lobs:
- CLOB => varchar(max)
- NCLOB => NVARCHAR(max)
- BLOB => VARBINARY(max), XML, GEOGRAPHY, GEOMETRY
Collonne calculée
Snapshot
limité édition enterprise photographie de la base de données (assimilé a un journal de trasaction inversé). a utilisé pour les grosse base avec un serveur qui tien la route car le serveur doit mettre a jour le snapshot a chaque modification de la base.
import export
Bulk INSERT
- CHECK_CONSTRAINTS: verifie les contraintes Check et FK
- FIRE_TRIGGER: execute les déclencheur
- KEEPIDENTITY: force la valeur dans les auto increments
- KEEPNULLS: collonnes vides transformées en NULL
- BATCHSIZE: spécifie la taille du lot de données
- KILOBYTES_PER_BATCH: Découpe le lot par volume
- ROWS_PER_BATCH: Découpe le lot par ligne
SSIS
Schema SQL
Espace de stockage des objet relationelle
- schema par default de la base: dbo
deux niveaux:
- un schema par default est attribuer a un utilisateur
- un schema par default de la base
creation
create schema nom_schema
Authorization = nom_utilisateur
transfert
Alter SCHEMA nom_schema
TRANSFER nom_objet
delete
DROP SCHEMA nom_Schema
Securité
compte connexion
create SQL login :
create LOGIN CNX_SQL_LAMBDA WITH PASSWORD = 'AZERT123'
create WIndows login :
create LOGIN CNX_SQL_LAMBDA From windows
with DEFAULT_DATABASE=toto,DEFAULT_LANGUAGE= us_english
Utilisateur SQL
Utilisateur SQL autonome
deux cas:
- utilisateur sans compte de connexion
- utilisateur se conenctant directement a la base
pour le dernier cas la base doit être paramétrée en contained
ALTER DATABASE [DB_GRAND_HOTEL] SET CONTAINMENT = PARTIAL WITH NO_WAIT
privilége
afficher priovilége
select * FROM sys.fn_builtin_permissions(null)
ORDER BY parent_class_desc,covering_permission_name, class_desc
GRANT <liste de privilèges>
ON <objet a privilégier>
to <liste des entité bénéficiaire>
DENY EXECUTE
ON SCHEMA::[dbo]
TO [USR_ECRIVAIN]
roles
permet de presetter des proviléges sysadmin,bulkadmin,dbcreator,setupadmin,securityadmin,serveradmin
metadonné: sys.server_principals sys.server_permissions
role predefinit de database: db_owner,db_datareader,db_datawriter,db_denydatareader,db_denydatawriter,db_securityadmin,db_accessadmin,db_ddladmin,db_backupoperator
public: roles de base que tous les utilisateur on
revoir les fonction de sécurité sur le diapo
chifrement
revoir les fonction de sécurité sur le diapo
Tache d'administratrion
agent SQL
planificateur de tache associé a SQL SERVER.
les donnée de l'agent sont stockés dans la base msdb. on y trouve des jog et des alerte
Database Mail
permet d'envoyer des mail par le biais du moteur SQL
Travaux
ensemble d'étape a réaliser
s'execute par default sur le compte de service de l'agent sur le compte de Service SQL server pour les Transactions
pour les extention de droit on doit utiliser un "proxy"
monitoring
disque
saturation disque taux de remplisage des fichier de bases drossisement des fichier SQL des bases activité IO de disque
transaction
longue transaction blocages verrou mortels
cache
rémanence des pages en cache taux de mise en cache
DBCC
DAtabase console Command utilitaire permettant
- obtenir des informations
- modifier le comportement du moteur
- effectuer la maintenance bas nivaux
integrité des bases
- CHECKALLOC
- CHECKCATALOG
- CHECKTABLE
- CHECKFILEGROUP
- CHECKDB
- CHECKCONSTRAINTS
réparation base endommagée
lire le diagnostique mais
- ne pas ce précipitez sur la commandes REPAIR
- Commencez par revoir le support (disque)
- Déplacer la base si besoin
- si l'objet endommagé est un index non clustered, supprimez et recréez
- si c'est une table vous pouvez peut être récupérer les pages endommagées (RESTORE PAGE)
si repair_allow_DATA_LOSS est utilisé:
- vérifier les contraintes (notamment FK) sur les tables réparées (checkconstraint)
- supprimez les lignes orpheline a l'aide de requéte (semi aniti joiture left)
- désactiver préalablement les contraints FK
index
- Primary Key création index cluster par default
- foreign key: ne neccesite pas tous le temps un index
structure de donnée redondante pour acccélérer certaine recherche relationelle:
-
B-tree+
-
hash
-
BW-Tree Analyptique
-
ColumnStore
PArticuler
- XML
- GEO
- full TEXT
les index B-tree peut être utilisé par
- =
- < > >=>=
- Between
- LIKE 'blalal%'
- Group By
- Order by
2 type d'index:
-
clustered table triée par la cled d'index (un par table comme il represente la table)
-
NONCLUSTERED: index avec copie des données ce dernior neccesite un renvoie pour retrouver la ligne originelle de la table
- par un row ID (si pas de index clustered)
- la valeur de la cles clustered
le row ID contien 3 info:
- numéro de fichier dans la base (file_id)
- numéro de page dans le fichier
- numéro de slot de ligne dans la page
les clef d'index clustered devrait:
-
être unique
-
Not Null
-
être la plus petite possible
-
ne pas pouvoir être modifié
-
toute table doit avoir une clés PRIMAIRE
-
la clef Primaire devrait être un collonne IDENTITY
pour voir la fragmentation des index
select * from sys.dm_db_index_physical_stats(NULL,NULL,NULL,NULL)
where avg_fragmentation_in_percent > 10 and page_count > 64
pour défragmenter
alter index .... reorganize -> pas bloquant mais pas top
alter index ..... Rebuild -> bloquant mais pas top (nom bloquant si verzsion entreprise et mode online)
Sauvegarde
consite a dupliquer les données contenu dans un systeme inforamtique de maniére a pouvoir le restaurer
deux conception:
- sauvegarde pour pallier a l'erreur humaine
- sauvegarde pour archivage
3 mode de sauvegarde:
-
complet:
- Enregistre l'intéfrité de la base de données a l'huere de fin de la sauvegarde compléte.
- Laisse le journal tel quel.
- initialise les sauvegarde diferentielles et du journal de transaction.
-
diferentille: enregistre les pages modifiées depuis la derniére sauvegarde compléte et les transactions qui ont eu lieu pendant la sauvegarde
-
journal de transactions: enregistre mes transactions qui ont eu lieu depuis la derniére sauvegarde
mode de récupération
- full (par default) obligatoire en haute dispo
- bulk logged
- simple
syntaxe de commande
complete
BAckup DATABASE
differentiel
Backup DATABASE WITH DIFFERENTIAL
transactionelle
BAckup LOG
Urgence
COPY_ONLY: effectue une sauvegarde dans inscription dans le plan de sauvegarde
multifichier
il est possible d'envoyer la sauvegarde sur plusieur fichier en paralléle chaque ficcier contien une partie de la sauvegarde
il est aussi possible d'envoyer la sauvegarde sur diferent device
compresioon
WITH COMPRESSION
gain sur le temps de sauvegarde gain important sur le temps de restauration gain importants sur le volume
lire une sauvegarde
RESTORE LABELONLY: donne des info sur lr média de sauvegarde
RESTORE HEADERONLY: liste les fichier de sauvgarde dans le média
RESTORE FILELISTONLY list les fichier restaurable pour l'in des sauvegarde contenue
RESTORE VERIFYONLY: controle la sauvegarde
surveillance et performance
Historisation des données
Tables temporelles:
- Table Temporalisée: une table de production dont on rajoute 2 collonnes techniques qui peuvent être "hidden" et qui sont alimentées automatiquement a chaque insert update
- table d'historisation: table technique contenant l'historique des évolution de chacune des lignes de la table a laquelle elle est associée.
l'intervalle de temps est ouvert a droite fermée a gauche
interrogation temporelle
- as-of
- from
- between
- contained in
- all
verrouillages et blocages
mode de verrouillage pessimiste par default
- une écriture bloque la lecture et l'écriture d'autre processus
- le verrouillafe peut entrainner des: wait,Blocage,deadlock