forked from vincent/notebook
785 lines
20 KiB
Markdown
785 lines
20 KiB
Markdown
|
# formation SQL SERVER
|
||
|
|
||
|
<!-- @import "[TOC]" {cmd="toc" depthFrom=1 depthTo=6 orderedList=false} -->
|
||
|
|
||
|
<!-- code_chunk_output -->
|
||
|
|
||
|
- [formation SQL SERVER](#formation-sql-server)
|
||
|
- [Vocabulaire](#vocabulaire)
|
||
|
- [historique de SQL server](#historique-de-sql-server)
|
||
|
- [Particularité de SQL Server](#particularité-de-sql-server)
|
||
|
- [nature des SGBDR](#nature-des-sgbdr)
|
||
|
- [conception de Codd](#conception-de-codd)
|
||
|
- [relation](#relation)
|
||
|
- [attributs](#attributs)
|
||
|
- [atomicité](#atomicité)
|
||
|
- [algébre relationell](#algébre-relationell)
|
||
|
- [migration de base](#migration-de-base)
|
||
|
- [instaltion/Configuration](#instaltionconfiguration)
|
||
|
- [patch](#patch)
|
||
|
- [choix immuable lors de l'instalation](#choix-immuable-lors-de-linstalation)
|
||
|
- [different service](#different-service)
|
||
|
- [instance](#instance)
|
||
|
- [configuration minimal](#configuration-minimal)
|
||
|
- [configuration Base](#configuration-base)
|
||
|
- [base system](#base-system)
|
||
|
- [renomer un serveur SQL](#renomer-un-serveur-sql)
|
||
|
- [outils](#outils)
|
||
|
- [SQLcmd.exe](#sqlcmdexe)
|
||
|
- [table d'admin](#table-dadmin)
|
||
|
- [sys.object](#sysobject)
|
||
|
- [table instance](#table-instance)
|
||
|
- [table base](#table-base)
|
||
|
- [stockage](#stockage)
|
||
|
- [groupe de fichier](#groupe-de-fichier)
|
||
|
- [definition de fichier](#definition-de-fichier)
|
||
|
- [planification de capacité](#planification-de-capacité)
|
||
|
- [disque](#disque)
|
||
|
- [SSD](#ssd)
|
||
|
- [machine virtuel](#machine-virtuel)
|
||
|
- [reduction de fichier](#reduction-de-fichier)
|
||
|
- [transaction](#transaction)
|
||
|
- [partitionnement](#partitionnement)
|
||
|
- [Type](#type)
|
||
|
- [Collonne calculée](#collonne-calculée)
|
||
|
- [Snapshot](#snapshot)
|
||
|
- [import export](#import-export)
|
||
|
- [Bulk INSERT](#bulk-insert)
|
||
|
- [SSIS](#ssis)
|
||
|
- [Schema SQL](#schema-sql)
|
||
|
- [Securité](#securité)
|
||
|
- [compte connexion](#compte-connexion)
|
||
|
- [Utilisateur SQL](#utilisateur-sql)
|
||
|
- [privilége](#privilége)
|
||
|
- [roles](#roles)
|
||
|
- [chifrement](#chifrement)
|
||
|
- [Tache d'administratrion](#tache-dadministratrion)
|
||
|
- [agent SQL](#agent-sql)
|
||
|
- [Database Mail](#database-mail)
|
||
|
- [Travaux](#travaux)
|
||
|
- [monitoring](#monitoring)
|
||
|
- [disque](#disque-1)
|
||
|
- [transaction](#transaction-1)
|
||
|
- [cache](#cache)
|
||
|
- [DBCC](#dbcc)
|
||
|
- [integrité des bases](#integrité-des-bases)
|
||
|
- [réparation base endommagée](#réparation-base-endommagée)
|
||
|
- [index](#index)
|
||
|
- [Sauvegarde](#sauvegarde)
|
||
|
- [mode de récupération](#mode-de-récupération)
|
||
|
- [syntaxe de commande](#syntaxe-de-commande)
|
||
|
- [Urgence](#urgence)
|
||
|
- [multifichier](#multifichier)
|
||
|
- [compresioon](#compresioon)
|
||
|
- [lire une sauvegarde](#lire-une-sauvegarde)
|
||
|
- [surveillance et performance](#surveillance-et-performance)
|
||
|
- [Historisation des données](#historisation-des-données)
|
||
|
- [verrouillages et blocages](#verrouillages-et-blocages)
|
||
|
|
||
|
<!-- /code_chunk_output -->
|
||
|
|
||
|
[benchmark professionnelle](http://www.tpc.org/information/benchmarks.asp)
|
||
|
|
||
|
## 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
|
||
|
|
||
|
```SQL
|
||
|
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
|
||
|
|
||
|
```SQL
|
||
|
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))
|
||
|
|
||
|
```SQL
|
||
|
AS RANGE Right
|
||
|
For values ('2018-01-01','2019-01-01','2020-01-01');
|
||
|
```
|
||
|
|
||
|
3 création du schema de répartition
|
||
|
|
||
|
```SQL
|
||
|
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
|
||
|
|
||
|
```SQL
|
||
|
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
|
||
|
|
||
|
```SQL
|
||
|
create schema nom_schema
|
||
|
Authorization = nom_utilisateur
|
||
|
```
|
||
|
|
||
|
transfert
|
||
|
|
||
|
```SQL
|
||
|
Alter SCHEMA nom_schema
|
||
|
TRANSFER nom_objet
|
||
|
```
|
||
|
|
||
|
delete
|
||
|
|
||
|
```SQL
|
||
|
DROP SCHEMA nom_Schema
|
||
|
```
|
||
|
|
||
|
## Securité
|
||
|
|
||
|
### compte connexion
|
||
|
|
||
|
create SQL login :
|
||
|
|
||
|
```SQL
|
||
|
create LOGIN CNX_SQL_LAMBDA WITH PASSWORD = 'AZERT123'
|
||
|
```
|
||
|
|
||
|
create WIndows login :
|
||
|
|
||
|
```SQL
|
||
|
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*
|
||
|
|
||
|
```SQL
|
||
|
ALTER DATABASE [DB_GRAND_HOTEL] SET CONTAINMENT = PARTIAL WITH NO_WAIT
|
||
|
```
|
||
|
|
||
|
### privilége
|
||
|
|
||
|
afficher priovilége
|
||
|
|
||
|
```SQL
|
||
|
|
||
|
select * FROM sys.fn_builtin_permissions(null)
|
||
|
ORDER BY parent_class_desc,covering_permission_name, class_desc
|
||
|
|
||
|
```
|
||
|
|
||
|
```SQL
|
||
|
|
||
|
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
|
||
|
|
||
|
```SQL
|
||
|
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
|
||
|
|
||
|
```SQL
|
||
|
|
||
|
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
|
||
|
|
||
|
|
||
|
|