notebook/IT/SQL/FormationSQL.md
2021-04-20 23:13:14 +02:00

20 KiB

formation SQL SERVER

benchmark professionnelle

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