Vous êtes sur la page 1sur 48

IIV

5Sauvegarde et restauration

Parmi les tches assignes un administrateur, la sauvegarde et la gestion des jeux de sauvegardes occupent une place importante. Comme le dit ladage, on sait ce que lon perd, pas ce que lon gagne ! En informatique, il est clair que la perte dune base de donnes peut avoir des rpercussions importantes sur le fonctionnement dune socit. Autant aborder la sauvegarde et la restauration avant de parler de scurit ou de distribution de donnes. Trois raisons motivent ce choix : tout dabord, montrer que ces oprations sont parmi les plus importantes du systme, ensuite sensibiliser tout de suite aux mcanismes simples de sauvegarde et enfin prsenter lorganisation dune vritable gestion des sauvegardes. Dans ce chapitre, nous aborderons en premier lieu les principes gnraux de la sauvegarde, en nous attardant ce quil faut sauvegarder, et quand. Ensuite, nous verrons en dtail toutes les subtilits des sauvegardes des bases, des journaux de transactions et des tables seules. Nous tudierons les mcanismes de restauration des bases et surtout des journaux de transactions. Enfin, nous conclurons sur tout ce qui peut arriver pendant une sauvegarde, et sur les prcautions prendre pour que tout se passe au mieux.

216

Administration et maintenance PARTIE II

Sauvegarde : pourquoi, comment ?


Personne nest labri dun crash du disque dur ou dune mauvaise manipulation, qui crase des dizaines de mga-octets de donnes. Que celui qui na jamais fait un DEL *.* dans le mauvais rpertoire ou sur le mauvais disque, aux temps hroques du tout DOS, savance afin que je le flicite. Pour se prserver de ces erreurs, il faut sauvegarder ses donnes. Pour viter que tout finisse mal, SAUVEGARDEZ VOS DONNES !!!! Oui, mais : quoi et quand sauvegarder ?

Quoi sauvegarder ?
Vous me demandez ce quil faut sauvegarder ? Mais tout, bien sr. Non seulement les bases de donnes que vous avez cres, mais aussi les bases systme master, msdb et distribution si vous faites de la rplication et tes distributeur, ainsi que les journaux de transactions, pour tenir compte des modifications apportes aux donnes. Bien videmment, il nest pas question de sauvegarder btement ces bases, sans rflchir une politique gnrale de sauvegarde : cela implique de dcider quand les sauvegardes doivent avoir lieu.

Quand sauvegarder ?
Tous les jours, ou presque ! Nexagrons rien, tout dpend du type de vos bases de donnes. Gnralement, on se fonde sur un certain nombre de critres pour tablir une stratgie de sauvegarde. En voici quelques-uns : lindice de volatilit des donnes, qui indique si vos donnes sont frquemment mises jour ou non. Pourquoi sauvegarder tous les jours une base dinfocentre qui nest quen consultation ? lespace allou au journal des transactions. Si votre journal est de faible taille, il faudra le sauvegarder frquemment et le purger, tout en conservant des mcanismes de tolrance de pannes ; la confiance que vous accordez aux bandes de sauvegarde ou leur mode de stockage. Plus vous faites confiance aux bandes, moins vous sauvegardez. Mais attention, ces choses-l ne devraient pas inspirer confiance. Mfiez-vous en comme de la peste. Quy a-t-il daussi peu fiable quune bande ?

Sauvegarde et restauration CHAPITRE V

217

le temps imparti aux sauvegardes. Si vous navez pas le temps de sauvegarder votre base pendant la nuit, car ladite sauvegarde prend plus de 12 heures, il faut penser une politique de sauvegarde plus judicieuse.

De manire gnrale, sauvegardez vos bases de donnes toutes les semaines, y compris master, msdb et distribution. Souvenez-vous que master est la cl de vote de SQL Server. Si vous en faites une sauvegarde hebdomadaire, vous prvenez les risques de crash du disque. En effet, vous serez nouveau oprationnel rapidement en remontant lune des sauvegardes de master et de vos bases de donnes. En rgle gnrale, il est prfrable, pour une base transactionnelle, dadopter un plan de sauvegarde incrmental, comme celui-ci :.

Figure 51 Exemple de planning de sauvegarde incrmentale

La sauvegarde du mardi ne contient donc que les transactions survenues depuis la sauvegarde du journal du lundi. Puis, le dimanche suivant, on refait une sauvegarde complte de la base. Ensuite, les jeux de sauvegardes sont permuts de faon nen conserver que deux ou trois. Si le nombre dutilisateurs est important et quils font de nombreuses modifications, on peut tre amen sauvegarder le journal plusieurs fois par jour, et de ce fait, raliser la sauvegarde, complte ou diffrentielle de la base, tous les jours. Lintrt de cette dernire mthode de sauvegarde est double : dune part, sauvegarder le journal est infiniment plus rapide que sauvegarder la base, dautre part, sauvegarder le journal le vide et contribue donc ne conserver en permanence quun journal de faible volume. Enfin la sauvegarde diffren-

218

Administration et maintenance PARTIE II

Figure 52 Exemple de planning de sauvegarde diffrentielle et incrmentale

tielle est plus rapide quune sauvegarde complte, puisquelle ne contient que les pages de la base modifies depuis la dernire sauvegarde complte, et elle contribue acclrer les restaurations, comme nous le verrons un peu plus loin dans ce chapitre.
Soyez rus !

Dans tous les cas, si la sauvegarde de votre base de donnes est rapide, de quelques minutes quelques heures, et quelle peut se faire de nuit, je vous conseille de sauvegarder le journal plusieurs fois par jour et la base tous les jours. Cette stratgie de sauvegarde, dune part, minimise le risque de perte dinformations et, dautre part, garantit que le journal garde une taille grable dans la journe.

Principes gnraux
Pour faire des sauvegardes avec SQL Server, vous devez crer des units de sauvegarde. Elles peuvent accueillir indiffremment les sauvegardes compltes et diffrentielles des bases de donne et celles des journaux de transactions. Une fois lunit cre, vous pouvez sauvegarder une ou plusieurs bases, mlanger bases et journaux, ou encore craser les anciennes sauvegardes par une nouvelle. Une base un journal, un fichier ou un groupe de fichiers peut galement tre sauvegarde sur plusieurs units, en parallle ; chaque unit en contiendra une portion. La runion de ces units permettra donc de restaurer la base. Cette fonctionnalit propre SQL Server permet dacclrer de manire significative les sauvegardes1. La dmarche est simple : crer les units, sauvegarder, puis restaurer en cas de problme.

Sauvegarde et restauration CHAPITRE V

219

Soyez rus !

Une stratgie dacclration des sauvegardes, quand vous ne disposez pas de lecteur de bande rapide (comme les lecteurs DLT Digital Linear Tape) consiste sauvegarder les bases dans des units sur disques (cest--dire dans des fichiers), puis de sauvegarder ces fichiers grce au gestionnaire de sauvegardes de Windows 2000 ou de tout autre logiciel appropri. Attention : il nest pas possible de sauvegarder directement les fichiers de bases de donnes avec le gestionnaire de sauvegarde de Windows 2000. En effet, dans la mesure o SQL Server en a lutilisation exclusive, Windows 2000 ne peut y accder, moins darrter le serveur SQL.

Les units de sauvegarde


Avant de se lancer dans la premire sauvegarde, il est prfrable de crer au moins une ou plusieurs units permanentes de sauvegarde.

Les diffrents types dunits


Il existe plusieurs types dunits, regroupant les diffrents media standards de stockage informatique : bande ; disque ; disque rseau ; canal nomm.

Les trois premiers types sont accessibles depuis linterface graphique. Pour ce qui est du dernier, on ne peut crer lunit qu partir de la procdure stocke sp_addumpdevice.

Units sur bande


SQL Server naccepte que les lecteurs de bandes locaux, cest--dire connects directement sur la machine et reconnus par Windows 2000. Il nest donc pas possible de lancer une sauvegarde sur un lecteur de bandes en rseau, moins dutiliser un logiciel de sauvegarde comme ARCSERVE ou BACKUPEXEC avec lagent adquat.
1. En test, jai russi sauvegarder une base de 30 giga-octets sur deux lecteurs de bandes DLT en moins dune demi-heure. On peut mieux faire, mais cest plus cher !

220

Administration et maintenance PARTIE II

Avant de crer une unit de sauvegarde sur bande, on doit installer le pilote du lecteur de bandes dans Windows 2000. Par dfaut, cette unit aura pour nom \\.\TAPE0. Sil y en a plusieurs sur la mme machine, elles sappelleront \\.\TAPE1, \\.\TAPE2, et ainsi de suite. Il est possible de sauvegarder plusieurs bases sur une seule bande, ainsi quune base sur plusieurs bandes. De plus avec le nouveau format de sauvegarde sur bande (MSTF, Microsoft Tape Format), il est possible de grouper sauvegardes Windows et SQL sur la mme bande.

Unit sur disque


La cration dune unit sur disque se rsume en fait la cration dun fichier local ou dun fichier situ sur un rpertoire partag distant. Le fichier nest cr quau moment de la premire sauvegarde sur cette unit. Dans le cas dune unit sur disque rseau, on peut (et cest prfrable) utiliser un nom UNC (Universal Naming Convention), par exemple, \\GODZILLA\SAUVESQL\PLANNING.BAK, pour sauvegarder dans le rpertoire partag SAUVESQL du serveur GODZILLA. Bien videmment, la sauvegarde sur une unit rseau est subordonne au fait que le disque distant soit en marche et accessible.

Units de canal nomm


Cette fonctionnalit est propose pour permettre la connexion de logiciels de sauvegarde. Il est alors possible de faire des sauvegardes sur des units de bande se trouvant sur le rseau ou sur des priphriques particuliers. La diffrence majeure avec les autres types dunits est quelles ne possdent pas de nom logique. Le canal est appel pendant la sauvegarde ou la restauration (voir les instructions BACKUP et RESTORE, plus loin dans ce chapitre).

La cration des units


La cration dune unit peut se faire depuis SQL Enterprise Manager ou depuis Transact-SQL. Avec SQL Enterprise Manager, on ne peut crer que des units sur disque ou sur bande.

Cration avec SQL Enterprise Manager


Voici les tapes de cration dune unit depuis SQL Enterprise Manager : 1. Depuis SQL Enterprise Manager, ouvrir le dossier Gestion ;

Sauvegarde et restauration CHAPITRE V

221

2. Sur licne Sauvegarde, cliquer avec le bouton droit de la souris et slectionner la commande Nouvelle unit de sauvegarde : la fentre de cration dune unit apparat (figure 53) ;

Figure 53 Cration dune unit de sauvegarde

3. Dans la zone Nom, donner le nom de lunit de sauvegarde ; 4. Dans la zone Nom de fichier ou Nom du lecteur de bande, donner le nom physique de lunit. Dans le cas dunits sur disque, donner le nom du fichier avec son chemin complet. Exemple : G:\BACKUP\MABASE.BAK. Dans le cas dunits sur disque rseau, indiquer le nom du fichier avec son chemin, par exemple : \\GODZILLA\BACKUP\MABASE.BAK. Il est prfrable de donner un nom UNC plutt que dutiliser une lettre de lecteur logique, celle-ci pouvant changer au redmarrage de la machine. Dans le cas dunits sur bande, donner le nom de la bande conforme sa dfinition dans le gestionnaire de bande de Windows 2000, par exemple : \\.\TAPE0. Sil y a plusieurs lecteurs de bandes sur la machine, ils sont identifis par leur numro (TAPE0, TAPE1, TAPE2...). 5. Cliquer sur le bouton OK. Lunit est cre.
Important

Dans le cas dune sauvegarde sur disque, si vous allez voir sur le disque o se trouve le fichier, vous constaterez quil nexiste pas, contrairement aux fichiers de base de donnes. Ce fichier ne sera cr que lors de la premire sauvegarde.

Cration avec Transact-SQL


Il existe une instruction permettant de crer tout type dunit ( part les units de canaux nomms) : sp_addumpdevice.

222

Administration et maintenance PARTIE II

Syntaxe
sp_addumpdevice [@devtype =] 'type_dunit', [@logicalname =] 'nom_logique', [@physicalname =] 'nom_physique' [, { [@cntrltype =] type_de_contrleur | [@devstatus =] 'tat_unit' } ]

Exemple :
sp_addumpdevice 'disk', 'SAUVEMABASE', 'C:\MSSQL\BACKUP\MABASE.BAK'

cre une unit de sauvegarde sur disque appele MABASE.BAK.

La maintenance des units


Comme pour tout composant du serveur, il est possible dditer ltat et le contenu dune unit et, bien videmment, de la supprimer.

diter le contenu dune unit


Une unit va contenir une ou plusieurs sauvegardes de bases de donnes, de journaux de transaction et de tables. Le moyen le plus simple est de passer par SQL Enterprise Manager. Une fois lunit cre, elle apparat dans la liste des units dans le dossier Sauvegarde. Faire un clic droit sur lunit dont on souhaite diter le contenu et choisir
Proprits, ou double-cliquer sur le nom de lunit : la fentre de Proprits

apparat (figure 54).

Figure 54 Proprits dune unit de sauvegarde

Appuyer sur le bouton Afficher le contenu pour visualiser le contenu de lunit slectionne (figure 55).

Sauvegarde et restauration CHAPITRE V

223

Figure 55 Contenu dune unit de sauvegarde

On peut galement obtenir des informations sur une unit de sauvegarde partir de la fentre Restauration de la base de donnes. Nous reviendrons sur les informations contenues dans cette fentre et sur leur interprtation, plus loin dans ce chapitre.

Figure 56 Contenu dune unit de sauvegarde depuis la fentre Restauration

Enfin, pour obtenir des informations sous forme de texte, on peut utiliser la procdure stocke systme sp_helpdevice, qui interroge la table master..sysdevices.
Syntaxe
sp_helpdevice [[@devname=] 'nom']

Le tableau 51 montre le rsultat obtenu en excutant cette procdure sans paramtres. Dans la mesure o la table sysdevices contient la rfrence des units de base de donnes et celle des units de sauvegarde, le rsultat de sp_helpdevice contient la liste de toutes les units.

224

Administration et maintenance PARTIE II


Tableau 51 Rsultat de sp_helpdevice
device_name master physical_name C:\Program Files\Microsoft SQL Server\MSSQL\data\master.mdf C:\Program Files\Microsoft SQL Server\MSSQL\data\mastlog.ldf C:\Program Files\Microsoft SQL Server\MSSQL\data\model.mdf C:\Program Files\Microsoft SQL Server\MSSQL\data\modellog.ldf C:\Program Files\Microsoft SQL Server\MSSQL\data\tempdb.mdf C:\Program Files\Microsoft SQL Server\MSSQL\data\templog.ldf description special, physical disk, 4 MB special, physical disk, 0.8 MB special, physical disk, 0.6 MB special, physical disk, 0.8 MB special, physical disk, 2 MB special, physical disk, 0.5 MB status 2 cntrltype 0 size 512

mastlog

128

modeldev

80

modellog

96

tempdev

256

templog

64

Supprimer une unit de sauvegarde


Supprimer une unit de sauvegarde ne supprime pas le fichier physique associ, mais simplement sa rfrence dans la table sysdevices. Pour supprimer, en mode graphique, une unit de sauvegarde, il suffit, partir du dossier Sauvegarde de SQL Enterprise Manager, de slectionner le nom de lunit et dappuyer sur la touche SUPPR ou de choisir Supprimer dans le menu contextuel. partir de Transact-SQL, utiliser la procdure systme sp_dropdevice.
Syntaxe
sp_dropdevice [@logicalname =] 'unit' [, [@delfile =] 'suppr_fichier']

La sauvegarde
Lorsque les units sont cres, on peut passer la sauvegarde des informations. SQL Server 2000 permet de sauvegarder cinq types de composants : la base de donnes complte ; la base de donnes en mode diffrentiel ; le journal des transactions ;

Sauvegarde et restauration CHAPITRE V

225

un fichier ; un groupe de fichiers.

Lune des fonctionnalits les plus puissantes de SQL Server concerne la possibilit de sauvegarder une base, alors mme quelle est en cours dutilisation : il sagit du mcanisme de sauvegarde dynamique.

Sauvegarde dynamique
Il nest pas ncessaire darrter lexploitation dune base de donnes pour en faire la sauvegarde. En effet, le mcanisme de sauvegarde dynamique donne la possibilit de la sauvegarder alors que des utilisateurs y sont connects. Pour comprendre comment cela est possible, il nous faut revenir sur la structure interne dune base de donnes SQL Server. Toutes les informations sont stockes dans des pages de 8 kilo-octets, que SQL Server sauvegarde, dans lordre du fichier, que les pages aient t modifies ou non depuis le dbut de la sauvegarde. Mais sauvegarder une page modifie, alors que la transaction qui la modifie nest pas termine, est une opration dangereuse. En effet, si la transaction choue, les donnes modifies doivent revenir dans ltat prcdant la modification. Cest pourquoi, le systme sauvegarde le journal des transactions en mme temps que la base de donnes. Le schma ci-dessous rsume ce fonctionnement (figure 57).

Figure 57 Mcanisme de sauvegarde dune base de donnes

Pendant la sauvegarde de la base, SQL Server capture les pages de donnes directement sur le disque sans chercher savoir si ces pages sont cohrentes ou non. La sauvegarde de la base seule est donc incohrente, sil y a une activit sur le systme. Pour assurer la cohrence de la sauvegarde, SQL Server enregistre la portion du journal des transactions correspondant la priode de

226

Administration et maintenance PARTIE II

sauvegarde. Ainsi, si la base doit tre restaure, SQL Server rejouera le journal quil a sauvegard en mme temps que la base pour ramener les donnes dans un tat cohrent. Dans ce cas, la diffrence de la sauvegarde du journal des transactions seul, celui-ci nest pas purg.

Sauvegarde complte de la base de donnes


La premire chose sauvegarder est la base elle-mme : cela assure quen cas de crash, on pourra revenir la dernire sauvegarde pour restaurer les structures et les donnes. Une sauvegarde complte est le point de rfrences des sauvegardes de journaux et diffrentielles ultrieures.

Sauvegarder avec SQL Enterprise Manager


Pour sauvegarder la base avec SQL Enterprise Manager, il est prfrable davoir cr une ou plusieurs units de sauvegarde. Ensuite, rien nest plus simple. 1. Dans SQL Enterprise Manager, slectionner le serveur sur lequel se trouve la base sauvegarder. 2. Slectionner la base et dans le menu Outils, choisir Sauvegarder la base de donnes (on peut aussi obtenir cette commande via le menu contextuel, sur le dossier de la base de donnes). La fentre de sauvegarde apparat alors (figure 58).

Figure 58 Bote de dialogue de sauvegarde dune base de donnes

Sauvegarde et restauration CHAPITRE V

227

3. Dans la liste Base de donnes, slectionner la base sauvegarder. 4. Choisir le type de sauvegarde dans la zone Sauvegarde. Souvenez-vous quil faut imprativement commencer par une sauvegarde complte de la base de donnes avant de sauvegarder le journal ou de faire une sauvegarde diffrentielle. 5. Dans la zone Destination, ajouter la ou les units dans lesquelles on souhaite sauvegarder la base, en cliquant sur le bouton Ajouter. Si lon souhaite effectuer une sauvegarde en agrgat (cest--dire sur plusieurs units simultanment), indiquer les units les unes aprs les autres.

Figure 59 Slection dune unit de sauvegarde

6. Si lon souhaite craser le contenu dune ou des units slectionnes, cocher le bouton Remplacer le support existant. 7. Choisir ventuellement les options de sauvegarde, telles la vrification de la sauvegarde2 ou la date dexpiration du jeu de sauvegarde (figure 510). 8. Si lunit slectionne est une bande, on peut choisir djecter la bande aprs sauvegarde. 9. Cliquer sur le bouton OK pour lancer la sauvegarde.
Soyez rus !

La sauvegarde est une opration qui bloque linterface graphique de SQL Enterprise Manager. Donc, pendant quelle sexcute, il ne vous reste plus qu regarder le curseur davancement ! Pour viter cela, cochez la case Planification, puis cliquez sur le bouton contenant trois points de la zone Planification. La bote de planification de la sauvegarde apparat alors. Cochez la case Une fois et slectionnez une planification dans quelques minutes, puis cliquez sur le bouton OK. Le systme revient la fentre

2. Dans la bote de dialogue, Vrifier que la sauvegarde est termine est une erreur de traduction. Il faut lire Vrification du jeu de sauvegarde la fin de lopration de sauvegarde.

228

Administration et maintenance PARTIE II

Figure 510 Slection des options de sauvegarde

de sauvegarde de la base de donnes, que vous pouvez fermer en cliquant sur le bouton OK. Votre sauvegarde va se drouler larrire-plan lheure indique. De plus, vous avez cr une tche que vous pouvez invoquer tout moment.

Sauvegarder avec Transact-SQL


La sauvegarde avec le code, bien que plus contraignante (il faut taper la totalit de la commande), est beaucoup plus souple en termes de fonctionnalits.
Syntaxe
BACKUP DATABASE {nom_base | @var_nom_base} TO <unit_sauvegarde> [,...n] [WITH [BLOCKSIZE = {taille_bloc | @var_taille_bloc}] [[,] DESCRIPTION = {texte | @var_texte}] [[,] DIFFERENTIAL] [[,] EXPIREDATE = {date | @var_date} | RETAINDAYS = {jours | @var_jours}] [[,] PASSWORD = { mot_de_passe | @var_mot_de_passe } ] [[,] FORMAT | NOFORMAT] [[,] {INIT | NOINIT}] [[,] MEDIADESCRIPTION = {texte | @var_texte}] [[,] MEDIANAME = {nom_support | @var_nom_support}] [[,] MEDIAPASSWORD = { mot_de_passe_media | @var_mot_de_passe_media } ] [[,] [NAME = {nom_jeu_sauve | @var_nom_jeu_sauve}] [[,] {NOSKIP | SKIP}] [[,] {NOREWIND | REWIND} ]

Sauvegarde et restauration CHAPITRE V


[[,] {NOUNLOAD | UNLOAD}] [[,] [RESTART] [[,] STATS [= pourcentage]]

229

Exemple :
BACKUP DATABASE mabase TO sauvemabase

sauvegarde la base mabase dans lunit sauvemabase.

Le paramtre unit_sauvegarde de linstruction BACKUP peut prendre les valeurs suivantes : nom de lunit de sauvegarde ; variable contenant le nom de lunit de sauvegarde ; {DISK | TAPE | PIPE} = nom de lunit physique.

Si lon souhaite faire une sauvegarde sans crer dunit de sauvegarde au pralable, on peut se servir de la troisime valeur. Par exemple, pour sauvegarder dans un fichier appel C:\BACKBASE.BAK, il suffit dexcuter la ligne suivante :
BACKUP DATABASE MABASE TO DISK='C:\BACKBASE.BAK'.

Voici la description exhaustive des options disponibles : : il sagit de la taille de bloc utiliser. Cette taille est fonction du type dunit de bande utilise. SQL Server dtecte automatiquement le type de bande et y adapte la taille de bloc. moins dy tre invit par le fabricant du lecteur de bande, ne modifiez pas ce paramtre qui a des rpercutions importantes sur la vitesse de sauvegarde. De plus, il faut utiliser cette option conjointement avec FORMAT pour formater la bande avec la taille de bloc dfinie ;
BLOCKSIZE DESCRIPTION, MEDIADESCRIPTION, MEDIANAME : DESCRIPTION donne la description du jeu de sauvegarde, alors que MEDIADESCRIPTION et MEDIANAME donnent la description et le nom du mdia sur lequel se fait la

sauvegarde ;
EXPIREDATE={date|@var_date} : prcise une date au-del de laquelle la sauvegarde est considre comme obsolte et peut tre crase. Cette option ne peut tre employe que pour les units sur bande ou sur disque, avec le paramtre INIT ;

| NOFORMAT : invalide tout le contenu de lunit de sauvegarde. Cette option valide implicitement INIT et va plus loin que cette dernire option puisque le contenu de la bande est alors totalement cras, quil existe un mot de passe ou non ;
FORMAT

230

Administration et maintenance PARTIE II

MEDIAPASSWORD

: permet de protger le support de sauvegarde par un

mot de passe ; | NOINIT : prcise sil faut ou non initialiser la bande avant la sauvegarde. Cependant, sil existe dautres jeux de sauvegardes sur le bande qui ne sont pas arrivs expiration, ils ne sont pas impacts par cette option ;
INIT UNLOAD | NOUNLOAD

: spcifie sil faut ou non dcharger la bande en fin

de sauvegarde ;
PASSWORD : permet de protger le jeu de sauvegarde par un mot de passe qui sera demand chaque restauration ultrieure ;

: donne le nombre de jours pendant lesquels la sauvegarde ne peut pas tre crase. Comme EXPIREDAYS, cette option nest utilise quavec les units sur bande ou sur disque avec le paramtre INIT ; : dfinit la frquence des messages en pourcentage de pages sauvegardes. Si vous ne renseignez pas ce paramtre, sa valeur est 10, cest-dire que vous recevrez 10 messages pendant la sauvegarde (de 0 100%) ;
STATS RESTARTS

RETAINDAYS={jours|@var_jours}

: indique que la sauvegarde prcdente a chou et quil faut la redmarrer l o elle sest arrte. | NOREWIND : spcifie sil faut ou non fermer la bande aprs la sauvegarde. NOREWIND implique NOUNLOAD ; : indique sil faut lire ou non len-tte des bandes contenant le nom et la date dexpiration du jeu de sauvegarde ;

REWIND

SKIP | NOSKIP STATS

: dfinit la frquence des messages en pourcentage de pages sauvegardes. Si vous ne renseignez pas ce paramtre, sa valeur est 10, cest-dire que vous recevrez 10 messages pendant la sauvegarde (de 0 100%).

La sauvegarde dune base de donnes sauve tous les objets et toutes les donnes de la base, ainsi que toutes les modifications valides pendant la sauvegarde. Cela signifie que si lon effectue une sauvegarde de la base alors que plusieurs utilisateurs sont au travail, la sauvegarde contient le reflet exact de ltat rel de la base la fin de la sauvegarde.

Sauvegarde du journal des transactions


Une transaction est dfinie par quatre caractristiques : Atomique, Cohrente, Isole, Durable (ACID). Voir Transactions , page 54. Le journal des transactions permet de sassurer de la durabilit des transactions. Il peut tre sauvegard indpendamment de la base de donnes. Cest en fait une double opration : outre son enregistrement sur disque, bande ou canal

Sauvegarde et restauration CHAPITRE V

231

nomm, le journal est purg des transactions valides (ce que lon appelle sa partie inactive). La sauvegarde est donc un mcanisme qui ne conserve quun journal des transactions de faible volume.

Sauvegarder avec SQL Enterprise Manager


Avec SQL Enterprise Manager, la sauvegarde du journal se droule comme la sauvegarde dune base de donnes. Cependant, il nest pas possible de passer tous les paramtres spcifiques des journaux de transactions comme avec Transact-SQL.

Sauvegarder avec Transact-SQL


La syntaxe est similaire celle qui sert sauvegarder une base de donnes, mais on dispose de trois options supplmentaires, spcifiques des journaux. Comme avec BACKUP DATABASE, lunit de sauvegarde peut tre une unit existante ou une variable contenant un nom dunit ou un nom dunit physique.
Syntaxe
BACKUP LOG {nom_base_de_donnes | @var_nom_base_de_donnes} { [WITH { NO_LOG | TRUNCATE_ONLY }] } | { TO <unit_sauvegarde> [,...n] [WITH [BLOCKSIZE = {taille_bloc | @var_taille_bloc}] [[,] DESCRIPTION = {texte | @var_texte}] [[,] EXPIREDATE = {date | @var_date} | RETAINDAYS = {jours | @var_jours}] [[,] PASSWORD = { mot_de_passe | @var_mot_de_passe } ] [[,] FORMAT | NOFORMAT] [[,] {INIT | NOINIT}] [[,] MEDIADESCRIPTION = {texte | @var_texte}] [[,] MEDIANAME = {nom_support | @var_nom_support}] [[,] MEDIAPASSWORD = { mot_de_passe_media | @var_mot_de_passe_media } ] [[,] [NAME = {nom_jeu_sauve | @var_nom_jeu_sauve}] NO_TRUNCATE [[,] {NOREWIND | REWIND} ] [[,] {NOSKIP | SKIP}] [[,] {NOUNLOAD | UNLOAD}] [[,] [RESTART] [[,] STATS [= pourcentage]] ] }

232

Administration et maintenance PARTIE II Exemple :


BACKUP LOG Mabase TO Sauvelog

sauvegarde le journal de la base mabase dans lunit Sauvelog.

Truncate_only
Cette option permet de vider la partie inactive du journal sans la sauvegarder. Bien videmment, cette opration est risque sur un site de production puisquon perd la capacit de recharger une sauvegarde de la base et des journaux. Elle sert surtout au cours des phases de dveloppement ou de test, pendant lesquelles les journaux nont pas besoin dtre conservs. Toutes les modifications faites depuis la dernire synchronisation sont perdues corps et biens : sauvegardez donc toujours la base aprs un BACKUP LOG WITH TRUNCATE_ONLY. Il nest pas ncessaire de prciser le nom dune unit de sauvegarde, puisque le journal nest pas sauvegard. Un exemple ? En voici un : backup log mabase with truncate_only.
Important

Aprs un BACKUP LOG WITH TRUNCATE_ONLY, il faut faire une sauvegarde de la base de donnes : sinon, on ne pourra pas faire dautres BACKUP LOG.

No_log
Comme TRUNCATE_ONLY, NO_LOG vide le journal. La diffrence concerne lenregistrement dans le journal. Sans loption NO_LOG, BACKUP LOG est une transaction inscrite dans le journal ; avec cette option, BACKUP LOG vide la partie inactive du journal et nenregistre pas le fait que le journal a t vid.
NO_LOG est loption utiliser si le journal est satur. On ne peut rien faire dautre ! Il faut dabord vider le journal avant de continuer travailler. Bien videmment, pensez faire une sauvegarde de la base immdiatement aprs (en priant que tout se passe bien !).

No_truncate
Attention : ne pas confondre NO_TRUNCATE avec TRUNCATE_ONLY ou NO_LOG. Cette option sert lorsque la base est suspecte, et que le journal de transactions est accessible. Si la base est suspecte dfaillance du disque sur lequel elle est stocke, par exemple , il est impossible de sauvegarder le journal normalement. Avec cette option, on peut faire une sauvegarde du journal, ce qui permettra de recharger la base et les journaux jusquau moment de la dfaillance.

Sauvegarde et restauration CHAPITRE V

233

Pour que cette opration soit possible, master doit tre accessible. Si, par malheur, master et la base de donnes se trouvaient sur le mme disque dfaillant, il ne vous reste que les yeux pour pleurer sur la dpouille des transactions perdues.
Important Dans SQL Server 7, si le fichier .MDF de la base de donnes nest pas accessible,

on ne peut pas sauvegarder le journal avec loption NO_TRUNCATE. On obtient les messages derreurs 3446 et 3013 qui indiquent que la sauvegarde a chou. Microsoft a confirm le problme (note Q218739 du TechNet) sans apporter de solutions autre que la protection du fichier .MDF par du RAID 1 ou 5. Ce dysfonctionnement a t corrig dans SQL Server 2000 : il est donc possible de sauvegarder le journal des transactions, mme si le fichier .mdf nest pas accessible.

Sauvegarde diffrentielle et incrmentale


La mise en uvre dune sauvegarde complte de base de donnes et du journal des transactions est appele sauvegarde incrmentale.

Figure 511 Sauvegarde incrmentale

Dans lexemple de la figure 511, le journal de mardi 8h00 contient uniquement les modifications ayant eu lieu sur la base entre la sauvegarde complte de la base et la sauvegarde du journal des transactions. De mme, la sauvegarde de mardi 12h00 contient les modifications ayant eu lieu sur la base entre la sauvegarde du journal de 8h00 et celle de 12h00. On peut dire quil sagit dune stratgie incrmentale, puisque les sauvegardes de journaux ne contiennent que la partie ajoute lincrment des modifications depuis la dernire sauvegarde. Linconvnient dune telle stratgie est quen cas de restauration, il faut rappliquer tous les journaux des transactions. Lapplication de certaines transactions peut engendrer un traitement long et fastidieux. De plus, il nest pas toujours possible de sauvegarder la

234

Administration et maintenance PARTIE II

base tous les jours. En effet, si la sauvegarde de la base dpasse la dure impartie pendant la nuit, vous devez utiliser une autre stratgie. Cest ici quentre en jeu la sauvegarde diffrentielle. La sauvegarde diffrentielle est une sauvegarde de base de donnes qui capture les pages modifies depuis la dernire sauvegarde complte.

Figure 512 Sauvegarde diffrentielle

La sauvegarde diffrentielle est donc plus rapide, puisquelle ne contient que les diffrences survenues depuis la dernire sauvegarde complte. Dans lexemple de la figure 512, la sauvegarde diffrentielle effectue lundi 22h00 contient les pages modifies depuis samedi 22h00, date et heure de dernire la sauvegarde complte, rendant ainsi caduques les sauvegardes du journal de la journe de lundi. De plus, elle est le point de dpart de la sauvegarde suivante du journal de mardi 8h00. Si un crash se produit aprs 8h00 le mardi, il faut restaurer la sauvegarde complte de la base, puis la sauvegarde diffrentielle et enfin le journal de mardi. Lintrt de la sauvegarde diffrentielle rside surtout dans le fait quelle est plus rapide quune sauvegarde complte et que sa restauration est plus rapide que celle du journal des transactions : elle restaure des pages, alors que celle dun journal rejoue les transactions. Dans le cas, par exemple, de la cration dun index, le journal des transactions ne contient que linstruction de cration de lindex, alors que la sauvegarde diffrentielle contient les pages de lindex cr. Depuis SQL Server 7, la sauvegarde diffrentielle a t amliore et acclre par lintroduction des pages DCM (Differential Changed Map). Cette page systme, situe en dbut de fichier de donnes, permet de suivre 64 000 extensions. Si une extension est modifie depuis la dernire sauvegarde complte de la base de donnes, son bit dans la DCM passe 1. Lors de la sauvegarde diffrentielle, SQL Server a juste besoin de parcourir la DCM pour trouver les extensions sauvegarder. Cette stratgie vite le parcours de la base la recherche des extensions modifies.

Sauvegarde et restauration CHAPITRE V

235

Sauvegarder avec SQL Enterprise Manager


Le lancement dune sauvegarde diffrentielle est identique celui dune sauvegarde complte, lexception du bouton radio slectionner.

Sauvegarder avec Transact-SQL


La syntaxe est identique celle dune sauvegarde complte, lexception de loption DIFFERENTIAL qui indique une sauvegarde diffrentielle.

Sauvegarde dun fichier ou dun groupe de fichiers


Avec SQL Server 7 disparaissait la sauvegarde dune table seule. SQL Server 2000 confirme cette disparition et prennise la sauvegarde dun fichier ou dun groupe de fichiers. Comme il est possible de placer une table dans un groupe de fichiers donn, on conserve, de manire dtourne, la possibilit de sauvegarder une table indpendante. La sauvegarde dun fichier est utile si la sauvegarde complte ou diffrentielle de la base nest pas possible en raison de sa dure excessive. Soit, par exemple, une base de 800 giga-octets rpartie en quatre fichiers de 200 gigaoctets. La base est sauvegarde le week-end et les fichiers chaque jour, les uns la suite des autres, comme dans la figure 513.

Figure 513 Sauvegarde de fichiers

la diffrence dune sauvegarde complte de la base, le journal des transactions nest pas inclus dans la sauvegarde dun fichier, il faut donc faire une sauvegarde du journal immdiatement aprs celle du fichier afin de capturer toutes les modifications apportes au fichier. Cette stratgie est prendre en considration si vous ne disposez pas dun temps suffisant pour la sauvegarde complte de la base, la nuit en semaine. Mais, nous le verrons plus tard, il est possible de restaurer un seul fichier partir dune sauvegarde complte de base de donnes.

236

Administration et maintenance PARTIE II

Important

Les groupes de fichiers sont parfois crs pour sparer physiquement les tables de leurs index. Par exemple, une table peut tre cre sur le groupe numro 1 et ses index dans le groupe 2. Il est alors obligatoire de sauvegarder ensemble les deux groupes. Si lon ne slectionne quun des deux groupes sauvegarder, SQL Server gnre une erreur 3013, La sauvegarde ou la restauration se sont termines anormalement , indiquant que la sauvegarde du groupe a chou.

Sauvegarder avec SQL Enterprise Manager


La sauvegarde dun fichier avec SQL Enterprise Manager se fait au travers de la fentre de sauvegarde. En cliquant sur loption Fichier et groupe de fichiers, on active le bouton permettant de choisir le fichier ou le groupe de fichiers sauvegarder : on peut slectionner soit un groupe de fichiers (ce qui slectionne lensemble des fichiers du groupe), soit un ou plusieurs fichiers indpendants.

Figure 514 Choix du fichier ou du groupe de fichiers sauvegarder

Sauvegarder avec Transact-SQL


La sauvegarde dun fichier ou dun groupe de fichiers est lance par linstruction BACKUP DATABASE dont voici la syntaxe.
Syntaxe
BACKUP DATABASE {nom_base | @var_nom_base} [FILE = {nom_fichier_logique | @var_nom_fichier_logique} | FILEGROUP = {nom_groupe | @var_nom_groupe} [,...n]] TO <unit_sauvegarde> [,...n] [WITH options]

Exemple :
BACKUP DATABASE Mabase FILE = 'DonnesBase1' TO Sauvefichiers

sauvegarde le fichier DonnesBase1 de la base mabase dans lunit Sauvefichiers.

Sauvegarde et restauration CHAPITRE V

237

Mettre en place une stratgie de sauvegarde


Nous venons de dcouvrir les quatre types de sauvegardes : complte, diffrentielle, journal et fichier/groupe de fichiers. Il est trs important de mettre en place une stratgie utilisant une ou plusieurs de ces sauvegardes pour rduire au maximum le risque de perte dinformations en cas de crash.
Important

Si votre installation SQL Server est un cluster, vous devez quand mme sauvegarder vos bases de donnes. La mise en cluster vous protge de la dfaillance dune machine, mais pas des pertes de donnes suite un crash des disques. De la mme faon, mme si vos donnes sont protges par RAID 1 ou 5, vous devez sauvegarder vos bases. En cas de crash, improbable, de plusieurs disques de la baie RAID vous perdriez toute la base. La sauvegarde de la base est donc indpendante des mcanismes de protection de vos donnes.

La stratgie de sauvegarde dpend de quatre facteurs principaux : le temps dont vous disposez pour faire les sauvegardes ; le dbit des units de sauvegarde ; le facteur daccroissement de la taille du journal des transactions ; le temps acceptable pour la restauration complte de la base.

Le tableau 52, propose diffrentes stratgies de sauvegarde en fonction de diverses contraintes oprationnelles.
Tableau 52 Types de stratgies en fonction de diverses contraintes oprationnelles
Contrainte La base peut tre sauvegarde toutes les nuits. Type de sauvegarde Sauvegarde complte de la base tous les soirs, sauvegarde du journal dans la journe dont la frquence est fonction de la vitesse de remplissage. Sauvegarde complte de la base tous les weekends, plusieurs sauvegardes du journal dans la journe, sauvegarde diffrentielle tous les soirs. Sauvegarde complte une fois par semaine ou par mois, plusieurs sauvegardes du journal dans la journe, sauvegarde cyclique des fichiers de donnes.

La base ne peut-tre sauvegarde que le weekend, mais le volume de modification reste infrieure moins de 10% de celui de la base La base est trs volumineuse, seule une petite partie peut tre sauvegarde la nuit.

Le choix des units de sauvegarde doit tre fonction du cot darrt de votre systme. Sil vous faut deux heures pour restaurer lensemble de la base et de ses journaux, et que la minute darrt du systme cote 10 000 Francs votre

238

Administration et maintenance PARTIE II

socit, acheter un nouveau lecteur de bande 50 000 Francs qui permet de rduire le temps de restauration une demi-heure est un investissement rentable, grce au temps gagn. Sans parler de leffet induit : un temps infrieur de restauration signifie souvent temps infrieur de sauvegarde !

La restauration
Gnralement, lorsque lon restaure une base ou un journal, cest que lon a vcu un crash. Pour viter davoir de mauvaises surprises en cas durgence, mieux vaut tre prt au pire et bien comprendre le mode de fonctionnement de la restauration. linverse de la sauvegarde, il nest pas possible de restaurer une base en production. Il faudra donc demander tous les utilisateurs de se dconnecter, et sassurer que le dbo est le seul utilisateur autoris. Lhistorique de toutes les sauvegardes et restaurations est conserv dans les tables backupfile, backupset, backupmediafamily, backupmediaset, restorefile, restorefilegroup et restorehistory de la base msbd. Il est possible de les interroger depuis SQL Enterprise Manager partir des fentres Sauvegarde et Restauration de la base de donnes, ou avec une requte SELECT. Ces tables sont dcrites lannexe C.

Restauration dune base de donnes


La restauration de la base de donnes restitue le contenu complet de la base de donnes. Elle ne doit donc pas tre en exploitation lors de la restauration. L encore, on peut utiliser SQL Enterprise Manager ou Transact-SQL. SQL Enterprise Manager permet de consulter le contenu des bandes avant de procder au chargement.
Important

La restauration est parfois utilise pour transfrer des bases de donnes dun site un autre. Le problme du classement ne se pose plus, puisque chaque base de donnes peut possder le sien. Il ny a donc aucune contre indication restaurer une base de donnes cre avec un classement X sur un serveur install avec un classement Y. Il est cependant important de noter que la base de donnes conservera son classement dorigine.

Restaurer avec SQL Enterprise Manager


1. Dans SQL Enterprise Manager, slectionner le serveur sur lequel se trouve la base charger.

Sauvegarde et restauration CHAPITRE V

239

2. Dans le menu Outils, choisir Restaurer une base de donnes (on peut aussi obtenir cette commande via le menu contextuel de la base de donnes, dans loption Toutes les tches). La fentre Restaurer la base de donnes apparat alors.

Figure 515 Bote de dialogue de restauration dune base de donnes

3. Choisir la base restaurer dans la liste droulante Restaurer en tant que base de donnes, ainsi que dans Afficher les sauvegardes de la BdD.
Important

Attention ! Vous pouvez restaurer une base x partir de la sauvegarde dune base y ! Vrifiez bien que les deux listes droulantes sont concordantes.

4. Choisir la sauvegarde restaurer dans le jeu, dans la liste Premire sauvegarde restaurer. Le systme va alors afficher lhistorique des sauvegardes en slectionnant la dernire sauvegarde complte de base, les journaux et, le cas chant, les sauvegardes diffrentielles appliquer pour ramener la base dans un tat cohrent. 5. Choisir ventuellement des options. Loption Forcer la restauration sur la base de donnes existante permet dcraser la base existante, de recrer les fichiers aux emplacements indiqus dans le tableau Restaurer les fichiers base de donnes en tant que. 6. Il ne reste qu choisir la sauvegarde utiliser, et cliquer sur le bouton OK.

240

Administration et maintenance PARTIE II

Figure 516 Options de restauration

Restaurer partir dune unit spcifique


Il se peut que lunit partir de laquelle on souhaite restaurer une sauvegarde nait pas t dfinie. Cest le cas quand on doit rinstaller SQL Server aprs un crash disque, ou quand on branche un lecteur de bande sur le serveur pour rcuprer une bande dun autre serveur. Il faut alors redfinir lunit pour que SQL Server puisse sen servir. Nous verrons que linstruction RESTORE permet dutiliser une unit sur disque, bande ou canal nomm sans quelle ait t au pralable dfinie avec la procdure sp_addumpdevice.

Figure 517 Restaurer partir dune unit

Sauvegarde et restauration CHAPITRE V

241

Pour linstant, voyons comment restaurer une sauvegarde partir dun fichier se trouvant sur un disque local ou sur un disque rseau. partir de la fentre Restaurer la base de donnes (figure 515), cliquer sur le bouton radio partir de lunit. La bote de dialogue apparat (figure 517). On a alors la possibilit dajouter une ou plusieurs units en cliquant sur le bouton Slectionner les units. On obtient alors une bote de dialogue qui permet de slectionner les units ajouter (figure 518).

Figure 518 Choix dune unit

En cliquant sur le bouton Ajouter, on choisit une unit existante ou lon pointe sur un fichier ou un lecteur de bande. Attention ! Le titre de cette bote de dialogue est erron et devrait tre Slectionnez lunit source de la restauration (figure 519).

Figure 519 Slection de lunit contenant la sauvegarde

Une fois linformation saisie et valide deux fois par OK, la nouvelle unit apparat dans la liste des units disponibles (figure 520).

242

Administration et maintenance PARTIE II

Figure 520 Restauration partir dune unit

Il est possible partir de cette fentre de visualiser le contenu de lunit afin de slectionner la sauvegarde restaurer (figure 521). La slection de la sauvegarde entrane le choix du numro et du type de la sauvegarde.

Figure 521 Choix de la sauvegarde dans lunit

FILE

Par exemple, si lon coche la deuxime case, on slectionne en fait loption = 2 et un journal des transactions. Une fois le choix fait, il ne reste qu slectionner les options ncessaires et cliquer sur le bouton OK.

Obtenir des informations sur un jeu de sauvegarde avant de le restaurer


Obtenir des informations sur une unit de sauvegarde revient consulter son en-tte. Il est possible de le faire soit directement depuis SQL Enterprise Manager, en demandant le contenu dune unit slectionne, comme dans les

Sauvegarde et restauration CHAPITRE V

243

manipulations prcdentes, soit laide de linstruction RESTORE HEADERONLY tudie plus loin : voir Chargement dun en-tte , page 249.

Restaurer avec Transact-SQL


Comme pour la sauvegarde, linstruction de restauration prsente quelques options intressantes qui mritent dtre mentionnes.
Syntaxe
RESTORE DATABASE {nom_base_de_donnes | @var_nom_base_de_donnes} [FROM <unit_de_sauvegarde> [,...n]] [WITH [RESTRICTED_USER] [[,] FILE = numro_fichier] [[,] PASSWORD = {mot_de_passe | @variable_mot_de_passe }] [[,] MEDIANAME = {nom_support | @variable_nom_support}] [[,] MEDIAPASSWORD = {mdp_media | @variable_mdp_media}] [[,] MOVE 'nom_fichier_logique' TO 'nom_fichier_systme_dexploitation'] [,...n] [[,] KEEP_REPLICATION ] [[,] {NORECOVERY | RECOVERY | STANDBY = nom_fichier_annulation}] [[,] {NOREWIND | REWIND}] [[,] {NOUNLOAD | UNLOAD}] [[,] REPLACE] [[,] RESTART] [[,] STATS [= pourcentage]] ]

Exemple :
RESTORE DATABASE mabase FROM Sauvebase

charge la base mabase depuis lunit Sauvebase.

Les noms dunits de sauvegarde sont identiques ceux qui figurent dans les instructions BACKUP mais nous ne retrouvons pas toutes les options :
FILE = numro_de_fichier : spcifie lemplacement de la sauvegarde dans le cas o lunit contient plusieurs sauvegardes squentielles ; KEEP_REPLICATION MEDIAPASSWORD

: indique que les paramtres de rplication dune base de donnes publis sont conservs lors de sa restauration ; : indique le mot de passe protgeant le support de

sauvegarde ;
MOVE

: permet de changer lemplacement des fichiers de base de donnes pendant la restauration. Pour utiliser cette option, il ne faut pas que la base restaure existe sur le systme. Lopration de restauration se charge de la cration des fichiers aux emplacements indiqus dans loption MOVE ;

244

Administration et maintenance PARTIE II

: indique au systme que dautres sauvegardes vont tre restaures la suite de la base. Il est impratif de stipuler cette option dans le cas o lon doit restaurer les journaux des transactions ou une sauvegarde diffrentielle ;
NORECOVERY

| REWIND : permet dindiquer de librer et de rembobiner ou non la bande aprs restauration. Si vous ne librez pas la bande lissue de la restauration, elle ne pourra pas tre utilise pas un autre processus. NOREWIND implique NOUNLOAD ;
NOREWIND PASSWORD RECOVERY

: indique le mot de passe protgeant la sauvegarde ;

: indique que la sauvegarde restaurer est la dernire du jeu de sauvegarde. Cette option (par dfaut) est stipuler pour laisser la base en tat cohrent et empcher la restauration des journaux des transactions ;

REPLACE : indique SQL Server quil doit remplacer la base si elle existe sur le systme ;

: indique SQL Server que la restauration prcdente sest interrompue (par exemple, la suite dun crash systme) et quil faut reprendre la restauration son point darrt (ne concerne que les restaurations partir de bandes) ;
RESTART

: remplace loption DBO_ONLY des versions prcdentes et permet de restreindre laccs de la base de donnes restaure aux membres des rles db_owner, dbcreator et sysadmin ;
UNLOAD | NOUNLOAD

RESTRICTED_USER

(voir linstruction BACKUP DATABASE, page 230).

Si lon restaure une base sauvegarde sur plusieurs units en parallle, il faut slectionner lensemble de ces units. La base de donnes master est un cas particulier dans les oprations de restauration. Voir le chapitre 14, Tolrance aux pannes et arrts systme .

Restauration du journal des transactions


La restauration du journal des transactions est une opration qui consiste rappliquer les transactions sauvegardes. Pour pouvoir restaurer un journal, il faut que celui-ci ait t sauvegard indpendamment de la base de donnes, donc quil ait fait lobjet dune instruction BACKUP LOG. Si lon applique une stratgie de sauvegarde incrmentale, on dispose de plusieurs sauvegardes du journal depuis la dernire sauvegarde de la base. Pour restaurer les journaux, il faut dabord restaurer la base avec loption NORECOVERY, puis rappliquer les transactions enregistres dans les journaux, dans lordre. Si lon tente de les rappliquer dans un ordre diffrent, le systme indique que la sauvegarde utilise nest pas sa place dans la squence.

Sauvegarde et restauration CHAPITRE V

245

Restaurer avec SQL Enterprise Manager


La dmarche de restauration dun journal est identique celle dune base de donnes. On peut en plus indiquer la date et lheure laquelle on souhaite arrter la restauration : par exemple, restaurer le journal sauvegard mardi soir, jusqu mardi 12 h 45 (voir, dans le paragraphe suivant, lexemple illustrant loption STOPAT).

Restaurer avec Transact-SQL


Syntaxe
RESTORE LOG {nom_base | @var_nom_base} [FROM <unit_de_sauvegarde> [,...n]] [ WITH [RESTRICTED_USER] [[,] FILE = {numro_fichier | @variable_numro_fichier } ] [[,] PASSWORD = {mot_de_passe | @variable_mot_de_passe }] [[,] MEDIANAME = {nom_support | @variable_nom_support}] [[,] MEDIAPASSWORD = {mdp_media | @variable_mdp_media}] [[,] MOVE 'nom_fichier_logique' TO 'nom_fichier_systme_dexploitation'] [,...n] [[,] KEEP_REPLICATION ] [[,] {NORECOVERY | RECOVERY | STANDBY = nom_fichier_annulation}] [[,] {NOREWIND | REWIND}] [[,] {NOUNLOAD | UNLOAD}] [[,] REPLACE] [[,] RESTART] [[,] STATS [= pourcentage]] [[,] STOPAT = { date_heure | @var_date_heure } | [,] STOPATMARK = 'nom_marque' [ AFTER dateheure ] | [,] STOPBEFOREMARK = 'nom_marque' [ AFTER dateheure ]] ]

Exemple :
RESTORE LOG mabase FROM Sauvelog

rapplique les transactions du journal de la base mabase, sauvegard dans lunit Sauvelog.

Les noms dunits de sauvegarde obissent aux mmes rgles que les instructions BACKUP et RESTORE DATABASE. Les options sont identiques celles de RESTORE DATABASE, lexception de STOPAT, STOPATMARK et STOPBEFOREMARK qui sont propres aux journaux de transactions. STOPAT existait dj en version 7, les deux autres sont nouvelles dans SQL Server 2000.Supposons, par exemple, que vous ayez fait une sauvegarde du journal le mardi 21h00 ; vous souhaitez revenir ltat dans lequel tait la

246

Administration et maintenance PARTIE II

base 12h45 le mardi 21 septembre 2001 ; vous allez donc restaurer la sauvegarde de base du dimanche par un BACKUP DATABASE simple, restaurer le journal du lundi par un BACKUP LOG simple et enfin, restaurer celui du mardi avec loption : WITH STOPAT '21/09/01 12:45:00'. En fin dexcution, le systme indique le nombre de transactions valides (rolled forward) et le nombre de transactions annules (rolled back). Les transactions annules sont celles qui sont dotes dun ROLLBACK explicite, ou celles qui nont pas fait lobjet dun COMMIT. Gnralement, il sagit des transactions en cours lors de la sauvegarde du journal et dont il a t impossible de sauvegarder les ordres COMMIT. STOPATMARK et STOPBEFOREMARK permettent de restaurer le journal des transactions jusqu' une marque nomme place spcialement dans une transaction par linstruction BEGIN TRANSACTION nom_transaction WITH MARK. Supposons que vous souhaitiez excuter une transaction dont vous ntes pas certain 100%. Vous marquez cette transaction de faon pouvoir, lors de la restauration du journal, revenir ltat dans lequel tait la base juste avant la transaction (STOPBEFOREMARK). Lexistence de loption AFTER est justifie par le fait quil peut exister plusieurs marques portant le mme nom dans une sauvegarde de journal. Imaginons les marques suivantes : marque1 12 juillet 2001 20h00 marque2 12 juillet 2001 21h00 marque1 13 juillet 2001 14h00

Si vous restaurez le journal WITH STOPATMARK marque1, la restauration va avoir lieu jusqu la premire occurrence de la marque, cest--dire celle du 12 juillet 20 heures. En revanche, avec WITH STOPATMARK marque1 AFTER '07/13/01 13h00', la sauvegarde va se poursuivre jusqu la seconde marque marque1 car elle est postrieure la date et lheure indiques dans la premire. STOPATMARK rejoue toutes les transactions jusqu celle qui est marque incluse. STOPBEFOREMARK sarrte la dernire transaction prcdant celle qui est marque. Ces deux options pallient en fait les limites intrinsques de loption STOPAT. Il est en effet plus simple de laisser une marque dans le journal des transactions pour permettre de retrouver une transaction particulire que de noter lheure et la date auxquelles elle a eu lieu.

Sauvegarde et restauration CHAPITRE V

247

Restauration dune sauvegarde diffrentielle


La restauration dune sauvegarde diffrentielle suit immdiatement celle dune sauvegarde complte de la base de donnes faite avec loption NORECOVERY. Plus rapide quune restauration dun ensemble de sauvegarde de journal des transactions, son but est le mme : restaurer lactivit de la base de donnes depuis la sauvegarde complte.

Restaurer avec SQL Enterprise Manager


Avec SQL Enterprise Manager, la dmarche est identique la restauration dune base ou dun journal.

Restaurer avec Transact-SQL


La syntaxe de la restauration diffrentielle est celle de linstruction RESTORE DATABASE. Il ny a donc aucune diffrence syntaxique entre une restauration complte et une restauration diffrentielle. La diffrence rside dans le jeu de sauvegarde et dans loption NORECOVERY applique la restauration complte.

Restauration dun fichier ou dun groupe de fichiers


La restauration dun fichier ou dun groupe de fichiers peut seffectuer partir dune sauvegarde de fichier/groupe de fichiers ou de base de donnes. Elle nest pas sans poser de problmes de cohrence. En effet, si vous restaurez un fichier une version antrieure, vous perdez toutes les modifications apportes aux donnes depuis leur sauvegarde et prenez donc le risque davoir une base incohrente. Pour garantir le retour une cohrence totale, il suffit de restaurer les sauvegardes du journal des transactions faites depuis la sauvegarde du fichier. La restauration du fichier est faite avec loption NORECOVERY, et celle des journaux ne rejouent que les transactions sappliquant aux donnes du fichier/ groupe de fichiers restaur.

Restaurer avec SQL Enterprise Manager


Lopration est identique la restauration dune base de donnes ou dun journal des transactions lexception du choix de loption Groupe de fichiers ou fichiers (figure 522). SQL Enterprise Manager slectionne automatiquement les journaux appliquer au fichier/groupe la suite de sa restauration.

248

Administration et maintenance PARTIE II

Figure 522 Restauration dun fichier

Restaurer avec Transact-SQL


Comme pour la sauvegarde, lordre indique le nom dune base de donnes et dsigne le fichier ou le groupe de fichier.
Syntaxe
RESTORE DATABASE {nom_base | @var_nom_base} FILE = {nom_fichier | @var_nom_fichier } | FILEGROUP = {nom_groupe | @var_nom_groupe} [,...n] [FROM <unit_de_sauvegarde> [,...n]] [WITH options]

Restauration partielle dune base de donnes


Nous venons de voir quil tait possible de restaurer un seul fichier ou groupe de fichier ; on peut encore restaurer une base de donnes partiellement, en mettant certains de ses fichiers ou de ses groupes de fichiers offline. Lintrt dune restauration partielle rside dans la possibilit de ne pas restaurer lintgralit dune base de donnes si lon ne souhaite accder qu un sous-ensemble de ses donnes, par exemple, des donnes archives.

Sauvegarde et restauration CHAPITRE V

249

Syntaxe
RESTORE DATABASE {nom_base | @var_nom_base} FILE = {nom_fichier | @var_nom_fichier } | FILEGROUP = {nom_groupe | @var_nom_groupe} [,...n] [FROM <unit_de_sauvegarde> [,...n]] WITH PARTIAL[, options]

La granularit dune restauration partielle est le fichier ou le groupe de fichier. Si donc on souhaite accder aux donnes dune table prcise, il faudra restaurer son fichier ou son groupe en totalit. Il est noter que la restauration partielle nest possible que depuis Transact-SQL.
Pour en savoir plus

Pour consulter des exemples complets et avoir de plus amples informations sur la restauration partielle, consultez la documentation en ligne Administration de SQL Server/Sauvegarde et restauration de base de donnes/Oprations de sauvegarde et de restauration/Oprations de restauration dune base de donnes partielle.

Chargement dun en-tte


Il faut charger len-tte pour avoir un aperu du contenu dune unit. Lintrt en est la vrification du contenu dune bande, avant de la charger ; par exemple, lorsque la bande vient dun site distant. Cette opration peut tre faite depuis linterface graphique ou par une commande Transact-SQL.
Syntaxe
RESTORE HEADERONLY FROM unit_de_sauvegarde [ WITH { NOUNLOAD | UNLOAD } [[,] FILE = numro_fichier] [[,] PASSWORD = {mot_de_passe | @variable_mot_de_passe} ] [[,] MEDIAPASSWORD = {mdp_media | @variable_mdp_media} ] ]

Le tableau 53 explique les paramtres du rsultat obtenu.

250

Administration et maintenance PARTIE II


Tableau 53 Liste des colonnes obtenues avec RESTORE HEADERONLY
Option BackupName BackupDescription BackupType Type de donnes nvarchar(128) nvarchar(255) smallint Valeurs possibles Nom du jeu de sauvegarde. Description du jeu de sauvegarde. Si la sauvegarde est ralise par SQL Server : base de donnes (1), journal des transactions (2), fichier (4), base de donnes diffrentielle (5). Si la sauvegarde est ralise par un logiciel tiers : normale (1), diffrentielle (5). Date dexpiration du jeu de sauvegarde. Compress (1), non compress(0), (SQL Server ne prend pas en compte, seul, la compression logicielle). Position du jeu de sauvegarde dans le volume (FILE =). Disque (2, 102), bande (5, 105) ou canal de communication (6, 106), Priphrique virtuel (7, 107). Nom de lutilisateur ayant lanc la sauvegarde. Nom du serveur qui a cr la sauvegarde. Nom de base de donnes sauvegarde. Version de la base de donnes sauvegarde. Date et heure de cration de la base de donnes. Taille de la sauvegarde en octets. Numro de squence du journal des transactions correspondant la premire transaction sauvegarde. Numro de squence du journal des transactions correspondant la dernire transaction sauvegarde. Numro de squence du journal des transactions correspondant au point de synchronisation le plus proche du moment de la sauvegarde. Numro de squence du journal des transactions correspondant la sauvegarde. Date et heure du dbut de la sauvegarde. Date et heure de la fin de la sauvegarde. Ordre de tri du serveur. Jeu de caractres du serveur.

ExpirationDate Compressed Position Devicetype UserName ServerName DatabaseName DatabaseVersion DatabaseCreationDate BackupSize FirstLSN LastLSN CheckpointLSN

datetime tinyint smallint tinyint nvarchar(128) nvarchar(128) nvarchar(128) int datetime numeric(20,0) numeric(25,0) numeric(25,0) numeric(25,0)

DatabaseBackupLSN BackupStartDate BackupFinishDate SortOrder CodePage

numeric(25,0) datetime datetime smallint smallint

Sauvegarde et restauration CHAPITRE V


Tableau 53 Liste des colonnes obtenues avec RESTORE HEADERONLY
Option UnicodeLocaleId UnicodeComparisonStyle CompatibilityLevel SoftwareVendorId SoftwareVersionMajor SoftwareVersionMinor SoftwareVersionBuild Machine_name Flags Type de donnes int int tinyint int int int int nvarchar(128) int Valeurs possibles Identifiant du style Unicode (langue) du serveur. Ordre de comparaison Unicode. Niveau de compatibilit de la base (60, 65 ou 70). Numro de lditeur du logiciel de sauvegarde (4608 pour Microsoft SQL Server). Numro principal de version du logiciel de sauvegarde. Numro secondaire de version du logiciel de sauvegarde. Numro de build de version du logiciel de sauvegarde. Nom de lordinateur qui a effectu la sauvegarde. Indique si les donnes insres en bloc (bcp ou BULK INSERT) sont contenues dans la sauvegarde du journal. ID de la base de donnes. ID de fourchette de rcupration de cette sauvegarde. Utilis conjointement avec BindingID pour vrifier quune sauvegarde peut tre restaure sur un serveur particulier. Classement de la base de donnes.

251

BindingID RecoveryForkID

uniqueidentifier uniqueidentifier

Collation

nvarchar(128)

252

Administration et maintenance PARTIE II

Rsum
Les nombreux mcanismes de sauvegarde et de restauration peuvent engendrer une certaine confusion. Voici un rsum rapide des diverses situations ncessitant la restauration dune ou plusieurs bases de donnes.

Restauration suite corruption de la base de donnes


1. Faire durgence une sauvegarde du journal des transactions :
BACKUP LOG mabase TO unit_sauvegarde WITH NO_TRUNCATE

2. Supprimer la base depuis SQL Enterprise Manager ou avec linstruction DROP DATABASE ; 3. Restaurer la base de donnes depuis SQL Enterprise Manager ou avec linstruction RESTORE DATABASE :
RESTORE DATABASE mabase FROM unit_sauvegarde WITH NORECOVERY RESTORE LOG mabase FROM unit_sauvegarde WITH FILE = 1, NORECOVERY RESTORE LOG mabase FROM unit_sauvegarde WITH FILE = n, RECOVERY

4. Accder la base depuis SQL Enterprise Manager.

Crash des disques de la base de donnes


1. Faire une sauvegarde durgence du journal des transactions :
BACKUP LOG mabase TO unit_sauvegarde WITH NO_TRUNCATE

2. Remplacer et formater les disques incrimins ; 3. Supprimer la base depuis SQL Enterprise Manager ou avec linstruction DROP DATABASE ; 4. Restaurer la base de donnes depuis SQL Enterprise Manager ou avec linstruction RESTORE DATABASE :
RESTORE DATABASE mabase FROM unit_sauvegarde WITH NORECOVERY RESTORE LOG mabase FROM unit_sauvegarde WITH FILE = 1, NORECOVERY RESTORE LOG mabase FROM unit_sauvegarde WITH FILE = n, RECOVERY

5. Accder la base depuis SQL Enterprise Manager.

Sauvegarde et restauration CHAPITRE V

253

Crash des disques du journal des transactions


En cas de crash des disques du journal des transactions, le systme recre automatiquement un journal lemplacement du fichier .MDF permettant lexploitation de la base. 1. Changer le disque dfectueux ; 2. Dtacher la base incrimine :
sp_detach_db mabase

3. Dplacer le fichier journal que le systme a cr automatiquement et le renommer avec lancien nom ; 4. Rattacher la base :
sp_attach_db mabase, "fichierMDF", "FichierNDF",, "FichierLDF"

Saturation du journal des transactions


1. Faire durgence un vidage du journal des transactions :
BACKUP LOG mabase WITH NO_LOG

2. Excuter une instruction CHECKPOINT sur la base de production ; 3. Faire immdiatement une sauvegarde de la base de donnes :
BACKUP DATABASE mabase TO unit_sauvegarde

4. Augmenter la taille du journal des transactions pour viter le phnomne.

Crash des bases systme


Nous reviendrons sur les problmes de crash systme et sur les moyens de sen protger au chapitre 14, Tolrance aux pannes et arrts systme . Voici cependant les procdures suivre si le support contenant les bases de donnes systme est endommag.

Restauration de bases de donnes systme depuis une sauvegarde


Si le service SQL Server peut tre lanc, vous pouvez utiliser linstruction RESTORE DATABASE ou SQL Enterprise Manager pour restaurer les bases de donnes systme partir dune sauvegarde valide :
RESTORE DATABASE master FROM unit_sauvegarde_master RESTORE DATABASE msdb FROM unit_sauvegarde_msdb

254

Administration et maintenance PARTIE II

Reconstruction et restauration des bases de donnes systme


Si la base de donnes master est endommage et que vous ne pouvez pas lancer SQL Server, suivez la procdure ci-aprs : 1. Reconstruire les bases de donnes systme avec lutilitaire REBUILDM.EXE qui se trouve dans le rpertoire \Program Files\Microsoft SQL Server\80\Tools\Binn ; 2. Redmarrer normalement le service SQL Server ; 3. Restaurer la base master partir de sa sauvegarde la plus rcente :
RESTORE DATABASE Master FROM unit_sauvegarde_master

4. Restaurer la base msdb :


RESTORE DATABASE msdb FROM unit_sauvegarde_msdb

5. Restaurer la base model, le cas chant :


RESTORE DATABASE model FROM unit_sauvegarde_model

6. Restaurer la base distribution si la machine est distributeur de rplication :


RESTORE DATABASE distribution FROM unit_sauvegarde_distribution

Rattachement ou restauration des bases de donnes de production


Si vous avez pu restaurer la base master, aucune autre opration nest ncessaire, car cette base contient les informations suffisantes la rcupration des bases utilisateur. Si la restauration de master a chou, vous devez rattacher les bases de donnes de production ou les restaurer si lattache choue.

Crash du disque systme


Si le support contenant SQL Server est endommag, il faut rinstaller SQL Server et les bases systme. 1. Rinstaller SQLServer en installation par dfaut, moins que vous nayez fait et not des choix dinstallation particuliers ; 2. Dmarrer SQL Server en mode monoutilisateur, avec lapplet Services du Panneau de configuration, en utilisant le commutateur m dans le paramtre du service SQL Server ; 3. Restaurer master partir de la sauvegarde la plus rcente, depuis SQL Enterprise Manager :
RESTORE DATABASE master FROM unit_sauvegarde_master

Sauvegarde et restauration CHAPITRE V

255

4. Restaurer la base msdb partir de sa sauvegarde la plus rcente depuis SQL Enterprise Manager :
RESTORE DATABASE msdb FROM unit_sauvegarde_msdb

5. Rattacher les bases de production :


sp_attach_db mabase, "fichierMDF", "FichierNDF",, "FichierLDF"

ou les restaurer :
RESTORE DATABASE mabase FROM unit_sauvegarde WITH NORECOVERY RESTORE LOG mabase FROM unit_sauvegarde WITH FILE = 1, NORECOVERY RESTORE LOG mabase FROM unit_sauvegarde WITH FILE = n, RECOVERY

Problmes courants et prcautions dusage


Une sauvegarde ne peut jamais tre fiable 100%, ne serait-ce qu cause du support sur lequel elle est faite et de son mode de stockage. Mme si toutes les prcautions sont prises ce niveau, il peut arriver que la sauvegarde ne puisse tre rcupre, essentiellement cause des problmes de cohrence de la base. De plus, pour assurer une stratgie de sauvegarde parfaite, il est prfrable de la faire alors que le trafic sur la base est faible, voire nul. Pour cela, il est intressant dautomatiser le processus de sauvegarde, pour quil ait lieu la nuit ou le week-end, sans intervention dun oprateur.

Vrification de cohrence
Dans les versions prcdentes de SQL Server, les structures de donnes ntaient pas dune fiabilit toute preuve dans la mesure o il nexistait pas de mcanisme de vrification des allocations. Dans les versions 7 et 2000, les pages des tables qui possdent un index clustered sont chanes et rfrences dans lIAM (Index Allocation Map). Dans le cas, improbable, de suppression dun pointeur avant ou arrire entre pages, le systme peut facilement retrouver les allocations correctes en examinant lIAM. Cependant, si un problme dallocation existe, il peut entraner une instabilit du systme et une corruption des sauvegardes ou des restaurations.

256

Administration et maintenance PARTIE II

Rsultat : il faut vrifier et, le cas chant, rparer ces incohrences avant de lancer une sauvegarde ! Pour cela, nous avons trois armes : la dfragmentation (voir chapitre 12, Optimisation des performances ), lutilitaire SQLMAINT (voir Outil de maintenance , page 259) ou le Database Consistency Checker (DBCC). Cependant ces vrifications sont moins ncessaires quen version 6.x et, par ailleurs, elles ont t optimises et sont beaucoup plus rapides.

Database Consistency Checker (DBCC)


Voici quatre de ses instructions. : vrifie que les pages dindex et de tables sont correctement lies. Si cette instruction renvoie des erreurs, il va falloir demander une rparation des allocations et lon va au devant de pertes potentielles de donnes. Il convient darrter lexploitation de la base, de sauvegarder durgence le journal de transactions, de faire les rparations avec loption REPAIR_REBUILD (qui nengendre pas de perte de donnes, mais est limit dans ses rparations) ou REPAIR_ALLOW_DATA_LOSS (qui peut entraner des pertes de donnes), de faire les vrifications de fonctionnement et, le cas chant, de reconstruire la base depuis sa dernire sauvegarde3.
DBCC CHECKDB DBCC CHECKALLOC : vrifie les allocations de pages par rapport aux extensions. Elle est implicitement contenue dans DBCC CHECKDB et nest donc pas utile en sus. DBCC CHECKTABLE : vrifie la cohrence dune table et ventuellement de ses index. Comme CHECKALLOC, elle est contenue dans DBCC CHECKDB. DBCC CHECKCATALOG : vrifie la cohrence des tables systme. Si on ne donne pas de nom de base de donnes, elle sapplique la base en cours. Si cette instruction renvoie des erreurs, il sagira vraisemblablement de modifications apportes aux tables sans que ces modifications aient t rpercutes dans les tables systme, mais ce cas est trs peu probable.

Et puis si aprs tout, nous laissions faire le systme... Microsoft nous donne une bote outils complte, nous de mettre en place les stratgies gagnantes.

3. Rassurez-vous ! ces cas sont rarissimes et mme si nous navons que peu de recul sur les systmes SQL Server 2000 en production, je nai pas eu connaissance de corruption ayant entran des pertes de donnes.

Sauvegarde et restauration CHAPITRE V

257

Automatisation
SQL Server met notre disposition un gestionnaire de tches automatises. Parmi ces tches, celles qui concernent la sauvegarde occupent une place prpondrante. Il y a deux moyens dautomatiser la sauvegarde : crer un travail qui excute un BACKUP DATABASE ou BACKUP LOG, soit depuis la fentre Sauvegarder la base de donnes, soit directement depuis le gestionnaire de travaux ; crer un travail qui sappuie sur lutilitaire SQLMAINT, soit avec lAssistant Plan de maintenance de base de donnes, soit depuis la fentre du Gestionnaire de travaux.

Automatiser une sauvegarde


En ce qui concerne le premier moyen, il ne sagit que de lautomatisation dinstructions que nous avons dj tudies, mise en place directement grce au gestionnaire de travaux ou depuis la bote de dialogue Sauvegarder la base de donnes.

Figure 523 Liste des travaux dfinis

Dans SQL Enterprise Manager, ouvrir le dossier Gestion, puis Agent SQL Server, enfin slectionner Travaux (figure 523). Pour crer un nouveau travail, choisir Nouveau travail dans le menu contextuel du dossier Travaux ou utiliser lAssistant Cration de travail en slectionnant Planification de travail dans le menu Outils. Tout travail planifi se compose de trois lments essentiels : un nom (et, accessoirement, une catgorie), une ou plusieurs tapes et une ou plusieurs planifications. Une tape appartient lun de ces quatre types : Transact-SQL (une ou plusieurs commandes SQL), CmdExec (une commande du systme

258

Administration et maintenance PARTIE II

dexploitation), script ActiveX (Visual Basic Script ou Javascript) et rplication (que nous verrons plus tard). Voici les tapes pour crer un travail de sauvegarde, depuis la bote de dialogue Proprits du nouveau travail : 1. donner un nom et une catgorie au nouveau travail ;

Figure 524 Dfinition du nom et de la catgorie du travail

2. slectionner longlet tapes, cliquer sur le bouton Nouvelle et dfinir les caractristiques de ltape, savoir son nom et la commande SQL excuter, puis valider en cliquant sur le bouton OK (figure 525) ;

Figure 525 Dfinition dune tape de type Transact-SQL

3. de retour dans la bote de dialogue Proprits du nouveau travail, slectionner longlet Planification et cliquer sur le bouton Nouvelle planification, dfinir les paramtres de la planification, puis valider en cliquant sur le bouton OK (figure 526) :

Sauvegarde et restauration CHAPITRE V

259

Figure 526 Dfinition dune planification

Il est possible de dfinir plusieurs planifications : par exemple, lune charge de la sauvegarde tous les jours ouvrs 22h00 et lautre charge de celle du dimanche 04h00 ; 4. Valider la cration du travail en cliquant sur le bouton OK. Nous reverrons toutes les options de cration et de planification dun travail au chapitre 13, Automatisation des tches .

Outil de maintenance
Lutilitaire SQLMAINT est apparu avec la version 6.5. Il a t conu comme support de lAssistant Plan de maintenance de base de donnes. Nanmoins, personne ne vous empche de lutiliser pour mettre en place des stratgies de sauvegarde automatise. Le but ici nest pas de dtailler tous les paramtres de cet utilitaire, mais simplement den prsenter les options intressant cette partie du livre.
Syntaxe
sqlmaint [ [-S serveur] [-U nom_daccs [-P mot_de_passe]] { [ -D nom_base | -PlanName nom | -PlanID guid ] [-Rpt fichier_texte [-DelTxtRpt <priode>] ] [-To nom_oprateur] [-HtmlRpt fichier_html [-DelHtmlRpt <priode>] ] [-RmUnusedSpace pourcentage_seuil pourcentage_libre] [-CkDB | -CkDBNoldx] [-CkAl | -CkAlNoIdx] [-CkTxtAl] [-CkCat]

260

Administration et maintenance PARTIE II


[-UpdOptiStats pourcentage_chantillonage] [-RebldIdx espace_libre] [-WriteHistory] [ [-BkUpDB chemin | -BkUpLog chemin] {-BkUpMedia {DISK [[-DelBkUps <priode>] [-CrBkSubDir ] [ -UseDefDir ]] | TAPE} } [-BkUpOnlyIfClean] [-VrfyBackup] ] } ]

Les options de la commande ont presque toutes une correspondance avec lune des commandes que nous avons vues dans les sections prcdentes.
Rpt : indique le fichier avec son chemin complet dans lequel sera inscrit le rapport dexcution ; HtmlRpt : indique le fichier HTML avec son chemin complet dans lequel

sera inscrit le rapport dexcution ;


RmUnusedSpace : stipule de rcuprer lespace libre en fin de fichier, si la

base est croissance automatique et quelle a cr ;


CkDB, CkDBNoIdx : quivalent de DBCC CHECKDB, avec ou sans loption
NOINDEX

; ;

CkAl, CkAlNoIdx : quivalent de DBCC NEWALLOC, avec ou sans loption


NOINDEX

CkTxtAl : quivalent de DBCC TEXTALL ; CkCat : quivalent de DBCC CHECKCATALOG ; WriteHistory : indique que chaque opration de maintenance est consigne dans la table msdb.dbo.sysdbmaintplan_history. BkUpDB : indique le chemin dans lequel faire la sauvegarde. Dans le cas dune sauvegarde sur bande, indiquer son nom sous la forme \\.\TAPEn, o n reprsente le numro du lecteur de bande. Le fichier gnr sera de la forme : NOMBASE_DB_AAAAMMJJHHMM.BAK, o aaaammjjhhmm reprsente la date et lheure de sauvegarde ; BkUpLog : identique BkUpDB pour les journaux de transactions. Le

fichier sappellera NOMBASE_LOG_AAAAMMJJHHMM.BAK ;


BkUpMedia : spcifie le type de lunit de sauvegarde. Pour le type DISK, DelBkUps permet de donner un dlai de rtention ;

Sauvegarde et restauration CHAPITRE V

261

BkUpOnlyIfClean : ne fait la sauvegarde que si les oprations de vrification (CkDB et CkCat) ne renvoient aucune erreur ; VrfyBackup : vrifie la sauvegarde son issue.

Attention

Les paramtres sont sensibles aux diffrences majuscule/minuscule. Respectez bien leur casse sous peine de ne pas voir votre commande sexcuter.

Si vous excutez linstruction suivante le 23 septembre 2001 une invite de commande :


sqlmaint -D pubs -Rpt "c:\mssql\log\pubs.rpt" -CkDB -CkCat -BkUpDB "c:\mssql\backup" BkUpMedia DISK BkUpOnlyIfClean

vous

faites

une

sauvegarde

de

la

base

pubs

dans

le

fichier

PUBS_DB_200109232315.BAK sur disque, condition que les rapports de vri-

fication de cohrence ne renvoient pas derreurs. Vous pourrez alors lire le rsultat de lopration dans le fichier de rapport PUBS_MAINT_200109232315.RPT. Quand une commande est bien paramtre, sauvegardez-la et planifiez-la avec le gestionnaire de tches.

262

Administration et maintenance PARTIE II

Points cls
Mettez en place ds le dbut de la mise en production de votre base une stratgie de sauvegarde. Sauvegardez toutes les bases de donnes, y compris master, msdb et distribution (si vous utilisez de la rplication). Une unit de sauvegarde peut tre cre sur disque, disque rseau, bande ou canal nomm. Toute sauvegarde est faite destination dune unit de sauvegarde explicitement cre ou dfinie au moment de la sauvegarde. Les units de sauvegarde sur bande sappuient sur le gestionnaire de bande de Windows 2000. Toutes les informations sur les units de sauvegarde se trouvent dans la table sysdevices dans master. On peut sauvegarder une base de donnes complte, une base de donnes en mode diffrentiel, un journal des transactions, un fichier ou un groupe de fichiers. Le mcanisme de sauvegarde dynamique permet de sauvegarder une base ou son journal alors mme que les utilisateurs travaillent sur la base. La sauvegarde dun journal des transactions vide sa partie inactive, conservant ainsi au journal un faible volume. Il est possible de restaurer un journal jusqu une date et une heure prcise avec le paramtre STOPAT. Vrifiez de temps en temps la cohrence de la base de donnes avec les instructions DBCC. Planifier vos sauvegardes avec SQLMAINT vous permet de mettre en place simplement et rapidement une stratgie de sauvegarde de vos informations, avec les vrifications de cohrence ncessaires.

Pour en savoir plus sur les sujets abords dans ce chapitre

Documentation en ligne de SQL Server, livre Administration de SQL Server , chapitre Sauvegarde et restauration de base de donnes .