Professional Documents
Culture Documents
Linstallation du serveur SQL ralise, il convient de dfinir des espaces logiques de stockage afin de regrouper sous un mme nom lensemble des donnes correspondant un mme projet. Cet ensemble est la base de donnes, elle va nous permettre de travailler logiquement avec des objets tels que les tables sans jamais avoir se soucier du stockage physique. SQL Server permet de raliser des associations entre les fichiers physiques et les bases de donnes. Dans ce chapitre, la cration et la gestion des fichiers physiques seront abordes en mme temps que les bases de donnes.
2. La notion de transaction
a. Quest-ce quune transaction ?
Une transaction est un ensemble indivisible dordres Transact SQL. Soit la totalit peut sexcuter, soit aucun ordre ne peut sexcuter. Le moteur SQL doit tre capable, tant que la transaction nest pas termine, de remettre les donnes dans ltat initial. Si la transaction nest pas termine, aucun autre utilisateur ne peut intervenir sur les donnes, tant en lecture quen criture. Il est dangereux de sappuyer sur des donnes, dont on ignore si les modifications en cours vont persister dans le temps ou non. Afin de garantir la cohrence des donnes, toutes les lignes qui sont modifies lintrieur dune transaction sont verrouilles pour quaucun autre utilisateur ne puisse intervenir sur ces lignes. Le verrouillage est effectu automatiquement, et les verrous sont relchs lorsque lutilisateur indique la fin de la transaction, soit en succs, soit en chec. Le verrouillage des donnes est gr de faon optimale par SQL Server de faon minimiser le nombre de lignes de donnes verrouilles (verrouillage au niveau de la ligne possible) ainsi que le nombre de verrous poss (verrous de ligne, de blocs ou de table). Lorsquune donne est verrouille et quune transaction autre que celle qui a pos le verrou la rclame, elle doit attendre la libration du verrou pour accder linformation. Les files dattente pour laccs aux donnes sont gres par des listes FIFO (Premier Entr Premier Sorti). Exemple de transaction : un exemple connu mais reprsentatif de la notion de transaction est celui du retrait dargent auprs dun distributeur automatique. La transaction est alors constitue de deux oprations : le dbit du compte et la distribution dargent. Sil nest pas possible de raliser lune des deux oprations, cest lensemble des oprations qui devra tre annul. Il parat draisonnable de dbiter le compte si la somme correspondante na pas
ENI Editions - All rigths reserved - Kaiss Tag - 1-
47
t distribue lutilisateur.
SAVE TRAN Cette instruction permet de dfinir des points darrt et donc donne la possibilit dannuler une partie de la transaction en cours. Il est possible de dfinir plusieurs points darrt sur une mme transaction. De faon permettre lannulation jusqu un point darrt prcis, ils sont gnralement identifis par un nom. SAVE { TRAN | TRANSACTION } {nomPointArret}[;] Exemple Dans lexemple suivant, le point darrt P1 est dfini, aprs lajout dun nouveau client.
- 2-
48
ROLLBACK TRAN[SACTION] Linstruction ROLLBACK permet dannuler une partie ou la totalit de la transaction, cest--dire des modifications intervenues sur les donnes. Lannulation partielle dune transaction nest possible que si des points darrt ont t dfinis laide de linstruction SAVE TRAN. Il nest pas possible darrter lannulation entre deux points darrt. ROLLBACK { TRAN | TRANSACTION } [nomTransaction|nomPointArret][;] Exemple Dans lexemple ci-dessous, les clients sans commande sont supprims, puis une requte compte le nombre de clients dfinis dans la base. Enfin, la suppression est annule par lintermdiaire de linstruction ROLLBACK qui annule toutes les modifications effectues sur les donnes depuis la dfinition du point darrt P1.
- 3-
49
COMMIT Cette instruction permet de mettre fin avec succs une transaction, cest--dire de conserver lensemble des modifications effectues dans la transaction. Cest simplement lissue de la transaction que les modifications sont visibles par les autres utilisateurs de la base de donnes. COMMIT { TRAN | TRANSACTION } [nomTransaction] [;] Exemple Les modifications sont valides et la transaction prend fin.
Pour SQL Server, si la transaction nest pas commence explicitement par la commande BEGIN TRAN, alors toute instruction SQL constitue une transaction qui est valide automatiquement. Si au cours dune transaction explicite, le client lorigine de la transaction rompt brutalement sa connexion avec le serveur, alors la transaction est annule (ROLLBACK) automatiquement.
- 4-
50
b. Le fonctionnement
Fonctionnement du journal Lorsquun ordre SQL est transmis au serveur SQL, ce dernier va chercher lexcuter le plus rapidement possible. Aprs analyse de lordre et mise en place du plan dexcution, si les donnes concernes par lordre ne sont pas dj prsentes en mmoire, alors le moteur SQL va lire les fichiers sur le disque dur afin dy trouver les informations ncessaires. Une fois prsentes en mmoire, les modifications peuvent tre apportes aux donnes. La modification est toujours enregistre dans le journal avant dtre rellement effectue sur les donnes de la base. Un tel journal est appel journal criture anticipe. Dune faon logique toutes les informations sont enregistres les unes la suite des autres dans le journal. Chaque information est parfaitement identifie par son LSN (Log Sequence Number) ou numro squentiel denregistrement dans le journal. Chaque enregistrement dans le journal contient galement lidentifiant de la transaction lorigine de la modification des donnes. Tous les enregistrements dune mme transaction ne sont donc pas enregistrs de faon contigu.
- 5-
51
Les fichiers journaux sont situs, par dfaut, dans le rpertoire C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Data, et portent lextension *.ldf. Il sagit dune extension recommande qui nest nullement obligatoire. Le journal peut tre constitu dun ou plusieurs fichiers, la taille de ces derniers pouvant tre fixe ou variable automatiquement ou de faon manuelle. La gestion des fichiers sera aborde dans ce chapitre dans la section Crer, grer et supprimer une base de donnes. Le journal des transactions peut tre constitu de plusieurs fichiers physiques. La gestion du journal est faite de faon indpendante de celle des donnes. SQL Server gre un cache dcriture spcifique au journal. En fonction de lutilisation faite des informations prsentes dans le journal, il est possible de tronquer rgulirement le journal de faon toujours utiliser les mmes fichiers physiques, tout en contrlant lespace disque occup.
- 6-
52
Principe de fonctionnement dun point de synchronisation SQL Server optimise les points de synchronisation de faon garantir la meilleure gestion des donnes sans dtriorer les temps de rponse du serveur. Il est toutefois possible dintervenir sur cette optimisation par lintermdiaire de linstruction CHECKPOINT. CHECKPOINT [tempsRealisation] tempsRealisation Permet de prciser le temps accord en secondes pour terminer le point de synchronisation. Cest SQL Server qui se charge de dclencher le point de synchronisation de faon avoir termin dans les temps.
- 7-
53
Seul un arrt de linstance par lintermdiaire de linstruction Transact SQL SHUTDOWNWITH NOWAIT permet darrter linstance sans dclenchement dun point de synchronisation.
- 8-
54
BCM : ou Bulk Change Map. Ces pages contiennent la liste des extensions modifies par des oprations de copie en bloc depuis la dernire sauvegarde du journal. DCM : ou Diffrentiel Change Map. Ces pages contiennent la liste de toutes les extensions modifies depuis la dernire sauvegarde de la base.
Les extensions Les extensions sont des regroupements logiques de 8 blocs contigus, elles ont donc une taille de 64 Ko (8 x 8 Ko). Le rle des extensions est dviter une trop grande dispersion des donnes pour un mme objet au sein des fichiers de donnes. Il existe deux types dextension : les extensions mixtes et les extensions propres ou uniformes. Ces deux types dextension permettent de limiter au mieux la consommation despace disque par une table en fonction du volume de donnes stocker.
Les extensions mixtes
Au dpart, les extensions sont communes plusieurs tables ou plusieurs index. Lorsquun des objets dfinis sur lextension demande la place, SQL Server octroie de la place bloc par bloc tant que lobjet nutilise pas 8 blocs. Ds quun objet franchit cette barrire, SQL Server lui octroie de la place extension par extension. Lavantage de cette mthode est dviter de perdre de la place inutilement avec les tables ou index contenant peu de donnes.
Les extensions uniformes
Si un objet occupe plus de 64 Ko dinformation, alors la place lui sera accorde extension par extension. Chacune des extensions tant spcialise pour un objet, les lectures disque seront dautant plus rapides car toutes les donnes sont stockes de faon contigu par paquets de 64 Ko.
- 9-
55
c. Le fonctionnement
Chaque base possde au moins un fichier de donnes, ce fichier est spcifique une base. Son chemin par dfaut est C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Data. Le premier fichier de donnes dune base porte lextension mdf, tous les suivants portent lextension ndf. Ces extensions sont recommandes mais ne sont pas obligatoires.
- 10 -
56
- 1-
57
Permet de prciser le premier groupe de fichiers de la base. Ce groupe est obligatoire, car lensemble des tables systme est obligatoirement cr dans le groupe primary. Si le mot cl PRIMARY est omis, le premier fichier de donnes prcis dans la commande CREATE DATABASE correspond obligatoirement au fichier primaire, il porte normalement lextension mdf. NAME Cet attribut, obligatoire, permet de prciser le nom logique du fichier. Ce nom sera utilis pour faire des manipulations sur le fichier via des commandes Transact SQL ; on pense notamment aux commandes DBCC ou la gestion de la taille des fichiers. FILENAME Spcification du nom et emplacement physique du fichier sur le disque dur. Le fichier de donnes est toujours cr sur un disque local du serveur. SIZE Attribut optionnel qui permet de prciser la taille du fichier de donnes. La taille par dfaut est de 1 Mo et la taille minimale dun fichier est 512 Ko aussi bien pour le journal que pour les fichiers de donnes. La taille peut tre prcise en kilo-octets (Kb) ou en mgaoctets (Mb, par dfaut). La taille du premier fichier de donnes doit tre au moins gale celle de la base Model. MAXSIZE Cet attribut optionnel, permet de prciser la taille maximale en Mgaoctets (par dfaut) ou en kilo-octets que peut prendre le fichier. Si rien nest prcis, le fichier grossira jusqu saturation du disque dur. FILEGROWTH Il sagit de prciser le facteur dextension du fichier. La taille de chacune des extensions peut correspondre un pourcentage (%), une taille en Mgaoctets (par dfaut) ou en Kilo octets. Si on prcise la valeur zro, le facteur dextension automatique du fichier est nul et donc la taille du fichier ne change pas automatiquement. Si le critre FILEGROWTH est omis, la valeur par dfaut est de 1 Mo pour les fichiers de donnes et de 10 % pour les fichier journaux. La taille des extensions est toujours arrondie au multiple de 64 Ko (8 blocs) le plus proche.
Toutes les options de linstruction CREATE DATABASE ne sont pas exposes ici. Seules les options les plus couramment utilises lors de la cration dune nouvelle base le sont.
- 2-
58
SQL Server Management Studio prsente alors la bote de dialogue des proprits de la base en mode cration. Aprs avoir complt les options comme le nom de la base et le nom et lemplacement des fichiers, il est possible de demander la cration de la base.
- 3-
59
Cette bote de dialogue permet un utilisateur averti de crer rapidement et simplement une base de donnes, tout en conservant la matrise de tous les paramtres. Il est possible de crer des fichiers sur des partitions brutes. Cependant, cette technique noffre quun faible gain de performance par rapport la cration de fichiers sur des partitions formates NTFS. De plus, les fichiers crs sur des partitions brutes ne peuvent pas tre manipuls par le systme de fichiers (notamment dans le cadre des sauvegardes base arrte) et il ne peut y avoir, bien sr, quun seul fichier par partition. Les fichiers de base de donnes ne doivent pas tre crs sur des partitions compresses. Dans certains cas extrmes, il est possible de placer les fichiers secondaires sur des partitions compresses. Les fichiers doivent alors tre en lecture seule. Par contre, les fichiers journaux ne doivent en aucun cas tre dfinis sur une partition compresse.
60
fichiers (MAXSIZE) et le taux daccroissement (FILEGROWTH). Si ces options sont omises la taille maximale est infinie et le taux daccroissement est de 10 % pour les journaux et 1 Mo pour les fichiers de donnes. En utilisant des fichiers croissance dynamique, le serveur ne sera jamais bloqu par la taille du fichier sauf saturation du disque ou taille maximale atteinte. Le facteur daccroissement permet de fixer la taille de tous les ajouts. Cette taille doit tre fixe de faon optimale, en prenant en compte le fait quun facteur daccroissement trop petit introduit beaucoup de fragmentations physiques du fichier et les demandes dextension du fichier sont frquentes, tandis quun facteur daccroissement trop grand ncessite une charge de travail importante de la part du serveur lorsque celui-ci met en place la structure de blocs de 8 Ko lintrieur du fichier. Si le taux daccroissement est fix zro, le fichier ne pourra pas grandir dynamiquement.
Laccroissement du fichier possde toujours une taille qui est multiple de 64 Ko (taille dune extension). Si le paramtrage des fichiers permet de grer automatiquement la croissance des fichiers, cette solution prsente tout de mme le dsavantage du fait quil nest pas possible de matriser quand cet accroissement aura lieu. Si cette opration intervient en pleine charge de travail, elle risque de ralentir le serveur. Par contre, si le paramtrage de laccroissement automatique des fichiers est ralis, cela permet en cas de problme, que les fichiers adaptent leur taille en fonction du volume de donnes, sans bloquer les utilisateurs. Fichier accroissement manuel La croissance manuelle des fichiers permet de matriser le moment o le fichier va grossir et donc le moment o le serveur va subir une charge de travail supplmentaire pour mettre en forme le fichier sil sagit dun fichier de donnes. Ajout de fichiers Pour permettre une base de donnes dobtenir plus de place, il est enfin possible de rajouter des fichiers. Cette solution prsente le double avantage de matriser linstant o le serveur va subir une surcharge de travail, ainsi que de ne pas fragmenter physiquement les fichiers surtout si ces derniers sont stocks sur une partition NTFS. Cependant cette solution ncessite que ladministrateur observe de prs lutilisation des fichiers journaux et de donnes afin de toujours intervenir avant que le systme ne se bloque pour un manque despace disque. Le journal des transactions Le journal des transactions est compos de un plusieurs journaux. Afin que le serveur fonctionne correctement, il est indispensable que le journal ne soit jamais satur. Le journal est vid lors des sauvegardes et ventuellement chaque point de synchronisation si la base est configure en mode de restauration simple. Pour assurer une place suffisante au journal, la solution la plus facile consiste positionner le ou les fichiers qui le composent avec une croissance automatique. Modifier un fichier en Transact SQL Cest linstruction ALTER DATABASE qui permet deffectuer toutes les oprations relatives aux manipulations des fichiers de base de donnes, aussi bien pour les fichiers de donnes que les fichiers du journal de transaction. Toutes les caractristiques des fichiers peuvent tre modifies, mais les modifications apportes doivent suivre certaines rgles comme, par exemple, la nouvelle taille du fichier qui doit tre suprieure la taille initiale. ALTER DATABASE nomBaseDeDonnes MODIFY FILE (spcificationFichier)[;] Avec pour spcificationFichier les lments de syntaxe suivants : (NAME = nomLogique, NEWNAME = nouveauNomlogique, FILENAME = cheminEtNomFichier [,SIZE = taille [KB|MB|GB|TB]] [,MAXSIZE={tailleMaximum[KB|MB|GB|TB]|UNLIMITED}] [,FILEGROWTH = pasIncrement [KB|MB|GB|TB|%]] )
- 5-
61
Ajouter un fichier en Transact SQL Cest la commande ALTER DATABASE associe loption ADD FILE qui va permettre de rajouter un fichier de donnes ou un fichier journal. Syntaxe : ALTER DATABASE nomBaseDeDonnes ADD FILE spcificationFichier[;]
- 6-
62
Cest par lintermdiaire de la bote de dialogue qui indique les proprits de la base de donnes, quil est possible de grer les oprations sur la taille initiale des fichiers ainsi que leur taille maximale.
- 7-
63
Comme pour les fichiers de donnes, il est possible de redimensionner le fichier journal ainsi que dajouter un fichier au journal des transactions. Si la modification peut seffectuer comme pour les fichiers de donnes par lintermdiaire de la commande ALTER DATABASE nomBaseDonnes MODIFY FILE, lajout quant lui ncessite lutilisation de loption ADD LOG FILE. Bien entendu comme pour les fichiers de donnes, toutes ces oprations peuvent tre effectues depuis SQL Server Management Studio.
Cette instruction permet de compacter lensemble des fichiers constituant la base de donnes (journaux et donnes). Pour les fichiers de donnes toutes les extensions utilises sont stockes de faon contigu en haut du fichier. Pour les fichiers journaux, cette opration de compactage intervient en diffr et SQL Server essaie de rendre aux fichiers journaux une taille aussi proche possible que celle de la taille cible lorsque les journaux sont tronqus. Syntaxe : DBCC SHRINKDATABASE {nom_base_donnes|id_base_donnes|0} [,pourcentage_cible] [,{NOTRUNCATE|TRUNCATEONLY}]) nom_base_donnes Nom de la base de donnes sur laquelle va porter lexcution de la commande id_base_donnes Identifiant de la base de donnes. Cet identifiant peut tre connu en excutant la fonction db_id() ou bien en interrogeant la vue sys.databases depuis la base master.
- 8-
64
0 Permet de prciser que lexcution portera sur la base courante. pourcentage_cible Permet de prciser en pourcentage lespace libre souhait dans le fichier aprs compactage. NOTRUNCATE Permet de ne pas rendre au systme dexploitation lespace libre obtenu aprs compactage. Par dfaut, lespace ainsi obtenu est libr. TRUNCATEONLY Permet de librer lespace inutilis dans les fichiers de donnes et compacte le fichier la dernire extension alloue. Aucune rorganisation physique des donnes nest envisage : dplacement des lignes de donnes afin de complter au mieux les extensions utilises par lobjet. Dans un tel cas, le paramtre pourcentage_cible est ignor.
SHRINKFILE
Cette instruction, semblable DBCC SHRINKDATABASE permet de raliser les oprations de compactage et rduction de fichier de donnes par fichier. Syntaxe : DBCC SHRINKFILE ([nom_fichier|id_fichier] {[[,taille_cible] [,{NOTRUNCATE|TRUNCATEONLY}]]|EMPTYFILE} taille_cible Permet de prciser la taille finale souhaite exprime en mgaoctets sous forme de nombre entier. Si aucune taille nest spcifie, la taille du fichier est rduite son maximum. EMPTYFILE Cette commande permet de raliser la migration de toutes les donnes contenues dans le fichier vers les autres fichiers du mme groupe. De plus, SQL Server nutilise plus ce fichier. Il est alors possible de le supprimer de la base de donnes laide dune commande ALTER DATABASE. NOTRUNCATE Permet de ne pas rendre au systme dexploitation lespace libre obtenu aprs compactage. Par dfaut, lespace ainsi obtenu est libr. TRUNCATEONLY Permet de librer lespace inutilis dans les fichiers de donnes et compacte le fichier la dernire extension alloue. Aucune rorganisation physique des donnes nest envisage : dplacement des lignes de donnes afin de complter au mieux les extensions utilises par lobjet. Dans un tel cas le paramtre taille_cible est ignor. Exemple :
- 9-
65
La taille finale doit tre suprieure la taille de la base Model plus la taille des donnes. Avant de raliser une opration de compactage, il est prudent de raliser une sauvegarde complte de la base de donnes compacter ainsi que de la base Master. Les instructions DBCC SHRINKDATABASE et DBCC SHRINKFILE sexcutent en mode diffr, il est donc possible que la taille des fichiers ne diminue pas de faon instantane. Seule linstruction DBCC SHRINKFILE permet de rduire la taille dun fichier une taille infrieure celle prcise lors de la cration du fichier. videmment, il nest pas possible de descendre en dessous de la taille occupe par les donnes.
- 10 -
66
RESTRICTED_USER
Seuls les utilisateurs membres des rles db_owner, db creator et sysadmin peuvent se connecter la base de donnes. Cest le mode de fonctionnement standard dune base, en autorisant plusieurs utilisateurs travailler simultanment. Lorsque cette option est positionne ON les statistiques manquantes lors de loptimisation de la requte, sont calcules de faon automatique. Lorsque cette option est positionne ON, les statistiques obsoltes sont calcules de faon automatique.
MULTI_USER
Les options AUTO_CREATE_STATISTICS et AUTO_UPDATE_STATISTICS ne concernent pas les tables systme ou bien usage interne SQL Server comme par exemple les index XML, les index de texte intgral, les files dattentes Service Broker. Pour toutes ces tables, les statistiques sont cres et mises jour quelle que soit la valeur des options AUTO_CREATE_STATISTICS et AUTO_UPDATE_STATISTICS.
La fonction DATABASEPROPERTYEX permet de connatre la valeur actuelle de loption qui lui est passe en paramtre. Pour rgler les paramtres de la base il est possible de passer par : SQL Server Management Studio Pour connatre et ventuellement modifier les paramtres dune base de donnes, il faut afficher la fentre prsentant les proprits de la base. Cette fentre est affiche en slectionnant Proprits depuis le menu contextuel associ la base de donnes.
- 11 -
67