IIV 5 - · PDF filePour faire des sauvegardes avec SQL Server, ... moins d’utiliser un...

48
IIV 5 5Sauvegarde et restauration Parmi les tâches assignées à un administrateur, la sauvegarde et la gestion des jeux de sauvegardes occupent une place importante. Comme le dit l’adage, on sait ce que l’on perd, pas ce que l’on gagne ! En informatique, il est clair que la perte d’une base de données peut avoir des répercussions importantes sur le fonctionnement d’une société. Autant aborder la sauvegarde et la restauration avant de parler de sécurité ou de distribution de données. Trois raisons motivent ce choix : tout d’abord, montrer que ces opérations sont parmi les plus importantes du système, ensuite sensibiliser tout de suite aux mécanismes simples de sauvegarde et enfin présenter l’organisation d’une véritable gestion des sauvegardes. Dans ce chapitre, nous aborderons en premier lieu les principes généraux de la sauvegarde, en nous attardant à ce qu’il faut sauvegarder, et quand. Ensuite, nous verrons en détail toutes les subtilités des sauvegardes des bases, des journaux de transactions et des tables seules. Nous étudierons les mécanismes 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 précautions à prendre pour que tout se passe au mieux.

Transcript of IIV 5 - · PDF filePour faire des sauvegardes avec SQL Server, ... moins d’utiliser un...

IIV 55Sauvegarde et restauration

Parmi les tâches assignées à un administrateur, la sauvegarde et la gestion desjeux de sauvegardes occupent une place importante. Comme le dit l’adage, onsait ce que l’on perd, pas ce que l’on gagne ! En informatique, il est clair quela perte d’une base de données peut avoir des répercussions importantes sur lefonctionnement d’une société.

Autant aborder la sauvegarde et la restauration avant de parler de sécurité oude distribution de données. Trois raisons motivent ce choix : tout d’abord,montrer que ces opérations sont parmi les plus importantes du système,ensuite sensibiliser tout de suite aux mécanismes simples de sauvegarde etenfin présenter l’organisation d’une véritable gestion des sauvegardes.

Dans ce chapitre, nous aborderons en premier lieu les principes généraux dela sauvegarde, en nous attardant à ce qu’il faut sauvegarder, et quand. Ensuite,nous verrons en détail toutes les subtilités des sauvegardes des bases, desjournaux de transactions et des tables seules. Nous étudierons les mécanismesde restauration des bases et surtout des journaux de transactions. Enfin, nousconclurons sur tout ce qui peut arriver pendant une sauvegarde, et sur lesprécautions à prendre pour que tout se passe au mieux.

Administration et maintenancePARTIE II

216

Sauvegarde : pourquoi, comment ?Personne n’est à l’abri d’un crash du disque dur ou d’une mauvaise manipula-tion, qui écrase des dizaines de méga-octets de données. Que celui qui n’ajamais fait un DEL *.* dans le mauvais répertoire ou sur le mauvais disque,aux temps héroïques du tout DOS, s’avance afin que je le félicite. Pour sepréserver de ces erreurs, il faut sauvegarder ses données.

Pour éviter que tout finisse mal, SAUVEGARDEZ VOS DONNÉES !!!! Oui,mais : quoi et quand sauvegarder ?

Quoi sauvegarder ?Vous me demandez ce qu’il faut sauvegarder ? Mais tout, bien sûr. Non seule-ment les bases de données que vous avez créées, mais aussi les bases systèmemaster, msdb et distribution si vous faites de la réplication et êtes distributeur,ainsi que les journaux de transactions, pour tenir compte des modificationsapportées aux données.

Bien évidemment, il n’est pas question de sauvegarder bêtement ces bases,sans réfléchir à une politique générale de sauvegarde : cela implique de déci-der quand les sauvegardes doivent avoir lieu.

Quand sauvegarder ?Tous les jours, ou presque ! N’exagérons rien, tout dépend du type de vosbases de données.

Généralement, on se fonde sur un certain nombre de critères pour établir unestratégie de sauvegarde. En voici quelques-uns :

• l’indice de volatilité des données, qui indique si vos données sontfréquemment mises à jour ou non. Pourquoi sauvegarder tous les jours unebase d’infocentre qui n’est qu’en consultation ?

• l’espace alloué au journal des transactions. Si votre journal est de faibletaille, il faudra le sauvegarder fréquemment et le purger, tout en conser-vant des mécanismes de tolérance de pannes ;

• la confiance que vous accordez aux bandes de sauvegarde ou à leur modede stockage. Plus vous faites confiance aux bandes, moins vous sauvegar-dez. Mais attention, ces choses-là ne devraient pas inspirer confiance.Méfiez-vous en comme de la peste. Qu’y a-t-il d’aussi peu fiable qu’unebande ?

Sauvegarde et restaurationCHAPITRE V

217

• le temps imparti aux sauvegardes. Si vous n’avez pas le temps de sauve-garder votre base pendant la nuit, car ladite sauvegarde prend plus de12 heures, il faut penser à une politique de sauvegarde plus judicieuse.

De manière générale, sauvegardez vos bases de données toutes les semaines,y compris master, msdb et distribution.

Souvenez-vous que master est la clé de voûte de SQL Server. Si vous enfaites une sauvegarde hebdomadaire, vous prévenez les risques de crash dudisque. En effet, vous serez à nouveau opérationnel rapidement en remontantl’une des sauvegardes de master et de vos bases de données.

En règle générale, il est préférable, pour une base transactionnelle, d’adopterun plan de sauvegarde incrémental, comme celui-ci :.

La sauvegarde du mardi ne contient donc que les transactions survenuesdepuis la sauvegarde du journal du lundi. Puis, le dimanche suivant, on refaitune sauvegarde complète de la base. Ensuite, les jeux de sauvegardes sontpermutés de façon à n’en conserver que deux ou trois.

Si le nombre d’utilisateurs est important et qu’ils font de nombreuses modifi-cations, on peut être amené à sauvegarder le journal plusieurs fois par jour, etde ce fait, à réaliser la sauvegarde, complète ou différentielle de la base, tousles jours.

L’intérêt de cette dernière méthode de sauvegarde est double : d’une part,sauvegarder le journal est infiniment plus rapide que sauvegarder la base,d’autre part, sauvegarder le journal le vide et contribue donc à ne conserveren permanence qu’un journal de faible volume. Enfin la sauvegarde différen-

Figure 5–1Exemple de planning de sauvegarde incrémentale

Administration et maintenancePARTIE II

218

tielle est plus rapide qu’une sauvegarde complète, puisqu’elle ne contient queles pages de la base modifiées depuis la dernière sauvegarde complète, et ellecontribue à accélérer les restaurations, comme nous le verrons un peu plusloin dans ce chapitre.

Soyez rusé !

Dans tous les cas, si la sauvegarde de votre base de données est rapide, de quel-ques minutes à quelques heures, et qu’elle peut se faire de nuit, je vous conseillede sauvegarder le journal plusieurs fois par jour et la base tous les jours. Cettestratégie de sauvegarde, d’une part, minimise le risque de perte d’informations et,d’autre part, garantit que le journal garde une taille gérable dans la journée.

Principes générauxPour faire des sauvegardes avec SQL Server, vous devez créer des unités desauvegarde. Elles peuvent accueillir indifféremment les sauvegardes complè-tes et différentielles des bases de donnée et celles des journaux de transac-tions. Une fois l’unité créée, vous pouvez sauvegarder une ou plusieurs bases,mélanger bases et journaux, ou encore écraser les anciennes sauvegardes parune nouvelle. Une base — un journal, un fichier ou un groupe de fichiers —peut également être sauvegardée sur plusieurs unités, en parallèle ; chaqueunité en contiendra une portion. La réunion de ces unités permettra donc derestaurer la base. Cette fonctionnalité propre à SQL Server permet d’accélérerde manière significative les sauvegardes1.

La démarche est simple : créer les unités, sauvegarder, puis restaurer en casde problème.

Figure 5–2Exemple de planning de sauvegarde différentielle et incrémentale

Sauvegarde et restaurationCHAPITRE V

219

Soyez rusé !

Une stratégie d’accélération des sauvegardes, quand vous ne disposez pas delecteur de bande rapide (comme les lecteurs DLT – Digital Linear Tape) consisteà sauvegarder les bases dans des unités sur disques (c’est-à-dire dans desfichiers), puis de sauvegarder ces fichiers grâce au gestionnaire de sauvegardes deWindows 2000 ou de tout autre logiciel approprié.

Attention : il n’est pas possible de sauvegarder directement les fichiers de basesde données avec le gestionnaire de sauvegarde de Windows 2000. En effet, dansla mesure où SQL Server en a l’utilisation exclusive, Windows 2000 ne peut yaccéder, à moins d’arrêter le serveur SQL.

Les unités de sauvegardeAvant de se lancer dans la première sauvegarde, il est préférable de créer aumoins une ou plusieurs unités permanentes de sauvegarde.

Les différents types d’unitésIl existe plusieurs types d’unités, regroupant les différents media standards destockage informatique :

• bande ;

• disque ;

• disque réseau ;

• canal nommé.

Les trois premiers types sont accessibles depuis l’interface graphique. Pour cequi est du dernier, on ne peut créer l’unité qu’à partir de la procédure stockéesp_addumpdevice.

Unités sur bande

SQL Server n’accepte que les lecteurs de bandes locaux, c’est-à-dire connec-tés directement sur la machine et reconnus par Windows 2000. Il n’est doncpas possible de lancer une sauvegarde sur un lecteur de bandes en réseau, àmoins d’utiliser un logiciel de sauvegarde comme ARCSERVE ouBACKUPEXEC avec l’agent adéquat.

1. En test, j’ai réussi à sauvegarder une base de 30 giga-octets sur deux lecteurs de bandes DLT enmoins d’une demi-heure. On peut mieux faire, mais c’est plus cher !

Administration et maintenancePARTIE II

220

Avant de créer une unité de sauvegarde sur bande, on doit installer le pilote dulecteur de bandes dans Windows 2000. Par défaut, cette unité aura pour nom\\.\TAPE0. S’il y en a plusieurs sur la même machine, elles s’appelleront\\.\TAPE1, \\.\TAPE2, et ainsi de suite.

Il est possible de sauvegarder plusieurs bases sur une seule bande, ainsiqu’une base sur plusieurs bandes. De plus avec le nouveau format de sauve-garde sur bande (MSTF, Microsoft Tape Format), il est possible de groupersauvegardes Windows et SQL sur la même bande.

Unité sur disque

La création d’une unité sur disque se résume en fait à la création d’un fichierlocal ou d’un fichier situé sur un répertoire partagé distant. Le fichier n’estcréé qu’au moment de la première sauvegarde sur cette unité.

Dans le cas d’une unité sur disque réseau, on peut (et c’est préférable) utiliserun nom UNC (Universal Naming Convention), par exemple,\\GODZILLA\SAUVESQL\PLANNING.BAK, pour sauvegarder dans le répertoirepartagé SAUVESQL du serveur GODZILLA.

Bien évidemment, la sauvegarde sur une unité réseau est subordonnée au faitque le disque distant soit en marche et accessible.

Unités de canal nommé

Cette fonctionnalité est proposée pour permettre la connexion de logiciels desauvegarde. Il est alors possible de faire des sauvegardes sur des unités debande se trouvant sur le réseau ou sur des périphériques particuliers. La diffé-rence majeure avec les autres types d’unités est qu’elles ne possèdent pas denom logique. Le canal est appelé pendant la sauvegarde ou la restauration(voir les instructions BACKUP et RESTORE, plus loin dans ce chapitre).

La création des unitésLa création d’une unité peut se faire depuis SQL Enterprise Manager oudepuis Transact-SQL. Avec SQL Enterprise Manager, on ne peut créer quedes unités sur disque ou sur bande.

Création avec SQL Enterprise Manager

Voici les étapes de création d’une unité depuis SQL Enterprise Manager :

1. Depuis SQL Enterprise Manager, ouvrir le dossier Gestion ;

Sauvegarde et restaurationCHAPITRE V

221

2. Sur l’icône Sauvegarde, cliquer avec le bouton droit de la souris et sélec-tionner la commande Nouvelle unité de sauvegarde : la fenêtre de créa-tion d’une unité apparaît (figure 5–3) ;

3. Dans la zone Nom, donner le nom de l’unité de sauvegarde ;

4. Dans la zone Nom de fichier ou Nom du lecteur de bande, donner le nomphysique de l’unité.

Dans le cas d’unités sur disque, donner le nom du fichier avec son chemincomplet. Exemple : G:\BACKUP\MABASE.BAK.

Dans le cas d’unités sur disque réseau, indiquer le nom du fichier avec sonchemin, par exemple : \\GODZILLA\BACKUP\MABASE.BAK. Il est préférablede donner un nom UNC plutôt que d’utiliser une lettre de lecteur logique,celle-ci pouvant changer au redémarrage de la machine.

Dans le cas d’unités sur bande, donner le nom de la bande conforme à sadéfinition dans le gestionnaire de bande de Windows 2000, par exemple :\\.\TAPE0. S’il y a plusieurs lecteurs de bandes sur la machine, ils sontidentifiés par leur numéro (TAPE0, TAPE1, TAPE2...).

5. Cliquer sur le bouton OK. L’unité est créée.

Important

Dans le cas d’une sauvegarde sur disque, si vous allez voir sur le disque où setrouve le fichier, vous constaterez qu’il n’existe pas, contrairement aux fichiers debase de données. Ce fichier ne sera créé que lors de la première sauvegarde.

Création avec Transact-SQL

Il existe une instruction permettant de créer tout type d’unité (à part les unitésde canaux nommés) : sp_addumpdevice.

Figure 5–3Création d’une unité de sauvegarde

Administration et maintenancePARTIE II

222

Syntaxe

La maintenance des unitésComme pour tout composant du serveur, il est possible d’éditer l’état et lecontenu d’une unité et, bien évidemment, de la supprimer.

Éditer le contenu d’une unité

Une unité va contenir une ou plusieurs sauvegardes de bases de données, dejournaux de transaction et de tables. Le moyen le plus simple est de passer parSQL Enterprise Manager. Une fois l’unité créée, elle apparaît dans la liste desunités dans le dossier Sauvegarde.

Faire un clic droit sur l’unité dont on souhaite éditer le contenu et choisirPropriétés, ou double-cliquer sur le nom de l’unité : la fenêtre de Propriétésapparaît (figure 5–4).

Appuyer sur le bouton Afficher le contenu pour visualiser le contenu del’unité sélectionnée (figure 5–5).

sp_addumpdevice [@devtype =] 'type_d’unité', [@logicalname =] 'nom_logique',[@physicalname =] 'nom_physique'[, { [@cntrltype =] type_de_contrôleur | [@devstatus =] 'état_unité' } ]

Exemple :

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

crée une unité de sauvegarde sur disque appelée MABASE.BAK.

Figure 5–4Propriétés d’une unité de sauvegarde

Sauvegarde et restaurationCHAPITRE V

223

On peut également obtenir des informations sur une unité de sauvegarde àpartir de la fenêtre Restauration de la base de données. Nous reviendrons surles informations contenues dans cette fenêtre et sur leur interprétation, plusloin dans ce chapitre.

Enfin, pour obtenir des informations sous forme de texte, on peut utiliser laprocédure stockée système sp_helpdevice, qui interroge la tablemaster..sysdevices.

Syntaxe

Le tableau 5–1 montre le résultat obtenu en exécutant cette procédure sansparamètres. Dans la mesure où la table sysdevices contient la référence desunités de base de données et celle des unités de sauvegarde, le résultat desp_helpdevice contient la liste de toutes les unités.

Figure 5–5Contenu d’une unité de sauvegarde

Figure 5–6Contenu d’une unité de sauvegarde depuis la fenêtre Restauration

sp_helpdevice [[@devname=] 'nom']

Administration et maintenancePARTIE II

224

Supprimer une unité de sauvegarde

Supprimer une unité de sauvegarde ne supprime pas le fichier physique asso-cié, mais simplement sa référence dans la table sysdevices. Pour supprimer, enmode graphique, une unité de sauvegarde, il suffit, à partir du dossier Sauve-garde de SQL Enterprise Manager, de sélectionner le nom de l’unité etd’appuyer sur la touche SUPPR ou de choisir Supprimer dans le menu contex-tuel. À partir de Transact-SQL, utiliser la procédure système sp_dropdevice.

Syntaxe

La sauvegardeLorsque les unités sont créées, on peut passer à la sauvegarde des informa-tions. SQL Server 2000 permet de sauvegarder cinq types de composants :

• la base de données complète ;• la base de données en mode différentiel ;• le journal des transactions ;

Tableau 5–1Résultat de sp_helpdevice

device_name physical_name description status cntrltype size

master C:\Program Files\Microsoft SQL Server\MSSQL\data\master.mdf

special, physical disk, 4 MB

2 0 512

mastlog C:\Program Files\Microsoft SQL Server\MSSQL\data\mastlog.ldf

special, physical disk, 0.8 MB

2 0 128

modeldev C:\Program Files\Microsoft SQL Server\MSSQL\data\model.mdf

special, physical disk, 0.6 MB

2 0 80

modellog C:\Program Files\Microsoft SQL Server\MSSQL\data\modellog.ldf

special, physical disk, 0.8 MB

2 0 96

tempdev C:\Program Files\Microsoft SQL Server\MSSQL\data\tempdb.mdf

special, physical disk, 2 MB

2 0 256

templog C:\Program Files\Microsoft SQL Server\MSSQL\data\templog.ldf

special, physical disk, 0.5 MB

2 0 64

sp_dropdevice [@logicalname =] 'unité' [, [@delfile =] 'suppr_fichier']

Sauvegarde et restaurationCHAPITRE V

225

• un fichier ;• un groupe de fichiers.

L’une des fonctionnalités les plus puissantes de SQL Server concerne lapossibilité de sauvegarder une base, alors même qu’elle est en coursd’utilisation : il s’agit du mécanisme de sauvegarde dynamique.

Sauvegarde dynamiqueIl n’est pas nécessaire d’arrêter l’exploitation d’une base de données pour enfaire la sauvegarde. En effet, le mécanisme de sauvegarde dynamique donnela possibilité de la sauvegarder alors que des utilisateurs y sont connectés.Pour comprendre comment cela est possible, il nous faut revenir sur la struc-ture interne d’une base de données SQL Server. Toutes les informations sontstockées dans des pages de 8 kilo-octets, que SQL Server sauvegarde, dansl’ordre du fichier, que les pages aient été modifiées ou non depuis le début dela sauvegarde. Mais sauvegarder une page modifiée, alors que la transactionqui la modifie n’est pas terminée, est une opération dangereuse. En effet, si latransaction échoue, les données modifiées doivent revenir dans l’état précé-dant la modification. C’est pourquoi, le système sauvegarde le journal destransactions en même temps que la base de données.

Le schéma ci-dessous résume ce fonctionnement (figure 5–7).

Pendant la sauvegarde de la base, SQL Server capture les pages de donnéesdirectement sur le disque sans chercher à savoir si ces pages sont cohérentesou non. La sauvegarde de la base seule est donc incohérente, s’il y a une acti-vité sur le système. Pour assurer la cohérence de la sauvegarde, SQL Serverenregistre la portion du journal des transactions correspondant à la période de

Figure 5–7Mécanisme de sauvegarde d’une base de données

Administration et maintenancePARTIE II

226

sauvegarde. Ainsi, si la base doit être restaurée, SQL Server rejouera le jour-nal qu’il a sauvegardé en même temps que la base pour ramener les donnéesdans un état cohérent. Dans ce cas, à la différence de la sauvegarde du journaldes transactions seul, celui-ci n’est pas purgé.

Sauvegarde complète de la base de donnéesLa première chose à sauvegarder est la base elle-même : cela assure qu’en casde crash, on pourra revenir à la dernière sauvegarde pour restaurer les structu-res et les données. Une sauvegarde complète est le point de références dessauvegardes de journaux et différentielles ultérieures.

Sauvegarder avec SQL Enterprise Manager

Pour sauvegarder la base avec SQL Enterprise Manager, il est préférabled’avoir créé une ou plusieurs unités de sauvegarde. Ensuite, rien n’est plussimple.

1. Dans SQL Enterprise Manager, sélectionner le serveur sur lequel se trouvela base à sauvegarder.

2. Sélectionner la base et dans le menu Outils, choisir Sauvegarder la basede données (on peut aussi obtenir cette commande via le menu contex-tuel, sur le dossier de la base de données). La fenêtre de sauvegarde appa-raît alors (figure 5–8).

Figure 5–8Boîte de dialogue de sauvegarde d’une base de données

Sauvegarde et restaurationCHAPITRE V

227

3. Dans la liste Base de données, sélectionner la base à sauvegarder.

4. Choisir le type de sauvegarde dans la zone Sauvegarde. Souvenez-vousqu’il faut impérativement commencer par une sauvegarde complète de labase de données avant de sauvegarder le journal ou de faire une sauve-garde différentielle.

5. Dans la zone Destination, ajouter la ou les unités dans lesquelles onsouhaite sauvegarder la base, en cliquant sur le bouton Ajouter. Si l’onsouhaite effectuer une sauvegarde en agrégat (c’est-à-dire sur plusieursunités simultanément), indiquer les unités les unes après les autres.

6. Si l’on souhaite écraser le contenu d’une ou des unités sélectionnées,cocher le bouton Remplacer le support existant.

7. Choisir éventuellement les options de sauvegarde, telles la vérification dela sauvegarde2 ou la date d’expiration du jeu de sauvegarde (figure 5–10).

8. Si l’unité sélectionnée est une bande, on peut choisir d’Éjecter la bandeaprès sauvegarde.

9. Cliquer sur le bouton OK pour lancer la sauvegarde.

Soyez rusé !

La sauvegarde est une opération qui bloque l’interface graphique deSQL Enterprise Manager. Donc, pendant qu’elle s’exécute, il ne vous reste plusqu’à regarder le curseur d’avancement !

Pour éviter cela, cochez la case Planification, puis cliquez sur le bouton contenanttrois points de la zone Planification. La boîte de planification de la sauvegardeapparaît alors. Cochez la case Une fois et sélectionnez une planification dansquelques minutes, puis cliquez sur le bouton OK. Le système revient à la fenêtre

Figure 5–9Sélection d’une unité de sauvegarde

2. Dans la boîte de dialogue, Vérifier que la sauvegarde est terminée est une erreur de traduction. Il fautlire Vérification du jeu de sauvegarde à la fin de l’opération de sauvegarde.

Administration et maintenancePARTIE II

228

de sauvegarde de la base de données, que vous pouvez fermer en cliquant sur lebouton OK. Votre sauvegarde va se dérouler à l’arrière-plan à l’heure indiquée. Deplus, vous avez créé une tâche que vous pouvez invoquer à tout moment.

Sauvegarder avec Transact-SQL

La sauvegarde avec le code, bien que plus contraignante (il faut taper la tota-lité de la commande), est beaucoup plus souple en termes de fonctionnalités.

Syntaxe

Figure 5–10Sélection des options de sauvegarde

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 restaurationCHAPITRE V

229

Le paramètre unité_sauvegarde de l’instruction BACKUP peut prendre lesvaleurs suivantes :

• nom de l’unité de sauvegarde ;• variable contenant le nom de l’unité de sauvegarde ;• {DISK | TAPE | PIPE} = nom de l’unité physique.

Si l’on souhaite faire une sauvegarde sans créer d’unité de sauvegarde aupréalable, on peut se servir de la troisième valeur. Par exemple, pour sauve-garder dans un fichier appelé C:\BACKBASE.BAK, il suffit d’exécuter la lignesuivante :

Voici la description exhaustive des options disponibles :

• BLOCKSIZE : il s’agit de la taille de bloc à utiliser. Cette taille est fonctiondu type d’unité de bande utilisée. SQL Server détecte automatiquement letype de bande et y adapte la taille de bloc. À moins d’y être invité par lefabricant du lecteur de bande, ne modifiez pas ce paramètre qui a desrépercutions importantes sur la vitesse de sauvegarde. De plus, il faut utili-ser cette option conjointement avec FORMAT pour formater la bande avecla taille de bloc définie ;

• DESCRIPTION, MEDIADESCRIPTION, MEDIANAME : DESCRIPTION donne ladescription du jeu de sauvegarde, alors que MEDIADESCRIPTION et MEDIA-NAME donnent la description et le nom du média sur lequel se fait lasauvegarde ;

• EXPIREDATE={date|@var_date} : précise une date au-delà de laquelle lasauvegarde est considérée comme obsolète et peut être écrasée. Cetteoption ne peut être employée que pour les unités sur bande ou sur disque,avec le paramètre INIT ;

• FORMAT | NOFORMAT : invalide tout le contenu de l’unité de sauvegarde.Cette option valide implicitement INIT et va plus loin que cette dernièreoption puisque le contenu de la bande est alors totalement écrasé, qu’ilexiste un mot de passe ou non ;

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

Exemple :

BACKUP DATABASE mabase TO sauvemabase

sauvegarde la base mabase dans l’unité sauvemabase.

BACKUP DATABASE MABASE TO DISK='C:\BACKBASE.BAK'.

Administration et maintenancePARTIE II

230

• MEDIAPASSWORD : permet de protéger le support de sauvegarde par unmot de passe ;

• INIT | NOINIT : précise s’il faut ou non initialiser la bande avant la sauve-garde. Cependant, s’il existe d’autres jeux de sauvegardes sur le bande quine sont pas arrivés à expiration, ils ne sont pas impactés par cette option ;

• UNLOAD | NOUNLOAD : spécifie s’il faut ou non décharger la bande en finde sauvegarde ;

• PASSWORD : permet de protéger le jeu de sauvegarde par un mot de passequi sera demandé à chaque restauration ultérieure ;

• RETAINDAYS={jours|@var_jours} : donne le nombre de jours pendantlesquels la sauvegarde ne peut pas être écrasée. Comme EXPIREDAYS, cetteoption n’est utilisée qu’avec les unités sur bande ou sur disque avec leparamètre INIT ;

• STATS : définit la fréquence des messages en pourcentage de pages sauve-gardées. Si vous ne renseignez pas ce paramètre, sa valeur est 10, c’est-à-dire que vous recevrez 10 messages pendant la sauvegarde (de 0 à 100%) ;

• RESTARTS : indique que la sauvegarde précédente a échoué et qu’il faut laredémarrer là où elle s’est arrêtée.

• REWIND | NOREWIND : spécifie s’il faut ou non fermer la bande après lasauvegarde. NOREWIND implique NOUNLOAD ;

• SKIP | NOSKIP : indique s’il faut lire ou non l’en-tête des bandes contenantle nom et la date d’expiration du jeu de sauvegarde ;

• STATS : définit la fréquence des messages en pourcentage de pages sauve-gardées. Si vous ne renseignez pas ce paramètre, sa valeur est 10, c’est-à-dire que vous recevrez 10 messages pendant la sauvegarde (de 0 à 100%).

La sauvegarde d’une base de données sauve tous les objets et toutes lesdonnées de la base, ainsi que toutes les modifications validées pendant lasauvegarde. Cela signifie que si l’on effectue une sauvegarde de la base alorsque plusieurs utilisateurs sont au travail, la sauvegarde contient le reflet exactde l’état réel de la base à la fin de la sauvegarde.

Sauvegarde du journal des transactionsUne transaction est définie par quatre caractéristiques : Atomique, Cohérente,Isolée, Durable (ACID). Voir « Transactions », page 54. Le journal des tran-sactions permet de s’assurer de la durabilité des transactions.

Il peut être sauvegardé indépendamment de la base de données. C’est en faitune double opération : outre son enregistrement sur disque, bande ou canal

Sauvegarde et restaurationCHAPITRE V

231

nommé, le journal est purgé des transactions validées (ce que l’on appelle sapartie inactive). La sauvegarde est donc un mécanisme qui ne conserve qu’unjournal des transactions de faible volume.

Sauvegarder avec SQL Enterprise Manager

Avec SQL Enterprise Manager, la sauvegarde du journal se déroule comme lasauvegarde d’une base de données. Cependant, il n’est pas possible de passertous les paramètres spécifiques des journaux de transactions comme avecTransact-SQL.

Sauvegarder avec Transact-SQL

La syntaxe est similaire à celle qui sert à sauvegarder une base de données,mais on dispose de trois options supplémentaires, spécifiques des journaux.Comme avec BACKUP DATABASE, l’unité de sauvegarde peut être une unitéexistante ou une variable contenant un nom d’unité ou un nom d’unité physi-que.

Syntaxe

BACKUP LOG {nom_base_de_données | @var_nom_base_de_données}{

[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]]

]}

Administration et maintenancePARTIE II

232

Truncate_only

Cette option permet de vider la partie inactive du journal sans la sauvegarder.Bien évidemment, cette opération est risquée sur un site de productionpuisqu’on perd la capacité de recharger une sauvegarde de la base et des jour-naux. Elle sert surtout au cours des phases de développement ou de test,pendant lesquelles les journaux n’ont pas besoin d’être conservés.

Toutes les modifications faites depuis la dernière synchronisation sontperdues corps et biens : sauvegardez donc toujours la base après un BACKUP

LOG WITH TRUNCATE_ONLY. Il n’est pas nécessaire de préciser le nom d’uneunité de sauvegarde, puisque le journal n’est pas sauvegardé. Un exemple ?En voici un : backup log mabase with truncate_only.

Important

Après un BACKUP LOG WITH TRUNCATE_ONLY, il faut faire une sauvegarde de labase de données : sinon, on ne pourra pas faire d’autres BACKUP LOG.

No_log

Comme TRUNCATE_ONLY, NO_LOG vide le journal. La différence concernel’enregistrement dans le journal. Sans l’option NO_LOG, BACKUP LOG est unetransaction inscrite dans le journal ; avec cette option, BACKUP LOG vide lapartie inactive du journal et n’enregistre pas le fait que le journal a été vidé.

NO_LOG est l’option à utiliser si le journal est saturé. On ne peut rien faired’autre ! Il faut d’abord vider le journal avant de continuer à travailler. Bienévidemment, pensez à faire une sauvegarde de la base immédiatement après(en priant que tout se passe bien !).

No_truncate

Attention : ne pas confondre NO_TRUNCATE avec TRUNCATE_ONLY ouNO_LOG. Cette option sert lorsque la base est suspecte, et que le journal detransactions est accessible.

Si la base est suspecte — défaillance du disque sur lequel elle est stockée, parexemple —, il est impossible de sauvegarder le journal normalement. Aveccette option, on peut faire une sauvegarde du journal, ce qui permettra derecharger la base et les journaux jusqu’au moment de la défaillance.

Exemple :

BACKUP LOG Mabase TO Sauvelog

sauvegarde le journal de la base mabase dans l’unité Sauvelog.

Sauvegarde et restaurationCHAPITRE V

233

Pour que cette opération soit possible, master doit être accessible. Si, parmalheur, master et la base de données se trouvaient sur le même disquedéfaillant, il ne vous reste que les yeux pour pleurer sur la dépouille des tran-sactions perdues.

Important

Dans SQL Server 7, si le fichier .MDF de la base de données n’est pas accessible,on ne peut pas sauvegarder le journal avec l’option NO_TRUNCATE. On obtient lesmessages d’erreurs 3446 et 3013 qui indiquent que la sauvegarde a échoué.Microsoft a confirmé le problème (note Q218739 du TechNet) sans apporter desolutions autre que la protection du fichier .MDF par du RAID 1 ou 5. Ce dysfonc-tionnement a été corrigé dans SQL Server 2000 : il est donc possible de sauvegar-der le journal des transactions, même si le fichier .mdf n’est pas accessible.

Sauvegarde différentielle et incrémentaleLa mise en œuvre d’une sauvegarde complète de base de données et du jour-nal des transactions est appelée sauvegarde incrémentale.

Dans l’exemple de la figure 5–11, le journal de mardi 8h00 contient unique-ment les modifications ayant eu lieu sur la base entre la sauvegarde complètede la base et la sauvegarde du journal des transactions. De même, la sauve-garde de mardi 12h00 contient les modifications ayant eu lieu sur la baseentre la sauvegarde du journal de 8h00 et celle de 12h00.

On peut dire qu’il s’agit d’une stratégie incrémentale, puisque les sauvegardesde journaux ne contiennent que la partie ajoutée — l’incrément — des modi-fications depuis la dernière sauvegarde. L’inconvénient d’une telle stratégieest qu’en cas de restauration, il faut réappliquer tous les journaux des transac-tions. L’application de certaines transactions peut engendrer un traitementlong et fastidieux. De plus, il n’est pas toujours possible de sauvegarder la

Figure 5–11Sauvegarde incrémentale

Administration et maintenancePARTIE II

234

base tous les jours. En effet, si la sauvegarde de la base dépasse la duréeimpartie pendant la nuit, vous devez utiliser une autre stratégie. C’est iciqu’entre en jeu la sauvegarde différentielle.

La sauvegarde différentielle est une sauvegarde de base de données quicapture les pages modifiées depuis la dernière sauvegarde complète.

La sauvegarde différentielle est donc plus rapide, puisqu’elle ne contient queles différences survenues depuis la dernière sauvegarde complète. Dansl’exemple de la figure 5–12, la sauvegarde différentielle effectuée lundi à22h00 contient les pages modifiées depuis samedi 22h00, date et heure dedernière la sauvegarde complète, rendant ainsi caduques les sauvegardes dujournal de la journée de lundi. De plus, elle est le point de départ de la sauve-garde suivante du journal de mardi 8h00. Si un crash se produit après 8h00 lemardi, il faut restaurer la sauvegarde complète de la base, puis la sauvegardedifférentielle et enfin le journal de mardi.

L’intérêt de la sauvegarde différentielle réside surtout dans le fait qu’elle estplus rapide qu’une sauvegarde complète et que sa restauration est plus rapideque celle du journal des transactions : elle restaure des pages, alors que celled’un journal rejoue les transactions. Dans le cas, par exemple, de la créationd’un index, le journal des transactions ne contient que l’instruction de créa-tion de l’index, alors que la sauvegarde différentielle contient les pages del’index créé.

Depuis SQL Server 7, la sauvegarde différentielle a été améliorée et accéléréepar l’introduction des pages DCM (Differential Changed Map). Cette pagesystème, située en début de fichier de données, permet de suivre 64 000extensions. Si une extension est modifiée depuis la dernière sauvegardecomplète de la base de données, son bit dans la DCM passe à 1. Lors de lasauvegarde différentielle, SQL Server a juste besoin de parcourir la DCMpour trouver les extensions à sauvegarder. Cette stratégie évite le parcours dela base à la recherche des extensions modifiées.

Figure 5–12Sauvegarde différentielle

Sauvegarde et restaurationCHAPITRE V

235

Sauvegarder avec SQL Enterprise Manager

Le lancement d’une sauvegarde différentielle est identique à celui d’unesauvegarde complète, à l’exception du bouton radio à sélectionner.

Sauvegarder avec Transact-SQL

La syntaxe est identique à celle d’une sauvegarde complète, à l’exception del’option DIFFERENTIAL qui indique une sauvegarde différentielle.

Sauvegarde d’un fichier ou d’un groupe de fichiersAvec SQL Server 7 disparaissait la sauvegarde d’une table seule. SQL Server2000 confirme cette disparition et pérennise la sauvegarde d’un fichier oud’un groupe de fichiers. Comme il est possible de placer une table dans ungroupe de fichiers donné, on conserve, de manière détournée, la possibilité desauvegarder une table indépendante.

La sauvegarde d’un fichier est utile si la sauvegarde complète ou différen-tielle de la base n’est pas possible en raison de sa durée excessive. Soit, parexemple, une base de 800 giga-octets répartie en quatre fichiers de 200 giga-octets. La base est sauvegardée le week-end et les fichiers chaque jour, les unsà la suite des autres, comme dans la figure 5–13.

À la différence d’une sauvegarde complète de la base, le journal des transac-tions n’est pas inclus dans la sauvegarde d’un fichier, il faut donc faire unesauvegarde du journal immédiatement après celle du fichier afin de capturertoutes les modifications apportées au fichier. Cette stratégie est à prendre enconsidération si vous ne disposez pas d’un temps suffisant pour la sauvegardecomplète de la base, la nuit en semaine. Mais, nous le verrons plus tard, il estpossible de restaurer un seul fichier à partir d’une sauvegarde complète debase de données.

Figure 5–13Sauvegarde de fichiers

Administration et maintenancePARTIE II

236

Important

Les groupes de fichiers sont parfois créés pour séparer physiquement les tables deleurs index. Par exemple, une table peut être créée sur le groupe numéro 1 et sesindex dans le groupe 2. Il est alors obligatoire de sauvegarder ensemble les deuxgroupes. Si l’on ne sélectionne qu’un des deux groupes à sauvegarder,SQL Server génère une erreur 3013, « La sauvegarde ou la restauration se sontterminées anormalement », indiquant que la sauvegarde du groupe a échoué.

Sauvegarder avec SQL Enterprise Manager

La sauvegarde d’un fichier avec SQL Enterprise Manager se fait au travers dela fenêtre de sauvegarde. En cliquant sur l’option Fichier et groupe defichiers, on active le bouton permettant de choisir le fichier ou le groupe defichiers à sauvegarder : on peut sélectionner soit un groupe de fichiers (ce quisélectionne l’ensemble des fichiers du groupe), soit un ou plusieurs fichiersindépendants.

Sauvegarder avec Transact-SQL

La sauvegarde d’un fichier ou d’un groupe de fichiers est lancée par l’instruc-tion BACKUP DATABASE dont voici la syntaxe.

Syntaxe

Figure 5–14Choix du fichier ou du groupe de fichiers à sauvegarder

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 = 'DonnéesBase1' TO Sauvefichiers

sauvegarde le fichier DonnéesBase1 de la base mabase dans l’unité Sauvefichiers.

Sauvegarde et restaurationCHAPITRE V

237

Mettre en place une stratégie de sauvegardeNous venons de découvrir les quatre types de sauvegardes : complète, diffé-rentielle, journal et fichier/groupe de fichiers. Il est très important de mettreen place une stratégie utilisant une ou plusieurs de ces sauvegardes pourréduire au maximum le risque de perte d’informations en cas de crash.

Important

Si votre installation SQL Server est un cluster, vous devez quand même sauvegar-der vos bases de données. La mise en cluster vous protège de la défaillance d’unemachine, mais pas des pertes de données suite à un crash des disques. De la mêmefaçon, même si vos données sont protégées par RAID 1 ou 5, vous devez sauve-garder vos bases. En cas de crash, improbable, de plusieurs disques de la baieRAID vous perdriez toute la base. La sauvegarde de la base est donc indépen-dante des mécanismes de protection de vos données.

La stratégie de sauvegarde dépend de quatre facteurs principaux :

• le temps dont vous disposez pour faire les sauvegardes ;

• le débit des unités de sauvegarde ;

• le facteur d’accroissement de la taille du journal des transactions ;

• le temps acceptable pour la restauration complète de la base.

Le tableau 5–2, propose différentes stratégies de sauvegarde en fonction dediverses contraintes opérationnelles.

Le choix des unités de sauvegarde doit être fonction du coût d’arrêt de votresystème. S’il vous faut deux heures pour restaurer l’ensemble de la base et deses journaux, et que la minute d’arrêt du système coûte 10 000 Francs à votre

Tableau 5–2Types de stratégies en fonction de diverses contraintes opérationnelles

Contrainte Type de sauvegarde

La base peut être sauvegardée toutes les nuits. Sauvegarde complète de la base tous les soirs, sauvegarde du journal dans la journée dont la fréquence est fonction de la vitesse de remplissage.

La base ne peut-être sauvegardée que le week-end, mais le volume de modification reste inférieure à moins de 10% de celui de la base

Sauvegarde complète de la base tous les week-ends, plusieurs sauvegardes du journal dans la journée, sauvegarde différentielle tous les soirs.

La base est très volumineuse, seule une petite partie peut être sauvegardée la nuit.

Sauvegarde complète une fois par semaine ou par mois, plusieurs sauvegardes du journal dans la journée, sauvegarde cyclique des fichiers de données.

Administration et maintenancePARTIE II

238

société, acheter un nouveau lecteur de bande à 50 000 Francs qui permet deréduire le temps de restauration à une demi-heure est un investissement renta-ble, grâce au temps gagné. Sans parler de l’effet induit : un temps inférieur derestauration signifie souvent temps inférieur de sauvegarde !

La restaurationGénéralement, lorsque l’on restaure une base ou un journal, c’est que l’on avécu un crash. Pour éviter d’avoir de mauvaises surprises en cas d’urgence,mieux vaut être prêt au pire et bien comprendre le mode de fonctionnement dela restauration. À l’inverse de la sauvegarde, il n’est pas possible de restaurerune base en production. Il faudra donc demander à tous les utilisateurs de sedéconnecter, et s’assurer que le dbo est le seul utilisateur autorisé.

L’historique de toutes les sauvegardes et restaurations est conservé dans lestables backupfile, backupset, backupmediafamily, backupmediaset, restore-file, restorefilegroup et restorehistory de la base msbd. Il est possible de lesinterroger depuis SQL Enterprise Manager à partir des fenêtres Sauvegarde etRestauration de la base de données, ou avec une requête SELECT. Ces tablessont décrites à l’annexe C.

Restauration d’une base de donnéesLa restauration de la base de données restitue le contenu complet de la base dedonnées. 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 deprocéder au chargement.

Important

La restauration est parfois utilisée pour transférer des bases de données d’un site àun autre. Le problème du classement ne se pose plus, puisque chaque base dedonnées peut posséder le sien. Il n’y a donc aucune contre indication à restaurerune base de données créée avec un classement X sur un serveur installé avec unclassement Y. Il est cependant important de noter que la base de données conser-vera son classement d’origine.

Restaurer avec SQL Enterprise Manager

1. Dans SQL Enterprise Manager, sélectionner le serveur sur lequel se trouvela base à charger.

Sauvegarde et restaurationCHAPITRE V

239

2. Dans le menu Outils, choisir Restaurer une base de données (on peutaussi obtenir cette commande via le menu contextuel de la base dedonnées, dans l’option Toutes les tâches). La fenêtre Restaurer la base dedonnées apparaît alors.

3. Choisir la base à restaurer dans la liste déroulante Restaurer en tant quebase de données, ainsi que dans Afficher les sauvegardes de la BdD.

Important

Attention ! Vous pouvez restaurer une base x à partir de la sauvegarde d’unebase y ! Vérifiez bien que les deux listes déroulantes sont concordantes.

4. Choisir la sauvegarde à restaurer dans le jeu, dans la liste Première sauve-garde à restaurer. Le système va alors afficher l’historique des sauvegar-des en sélectionnant la dernière sauvegarde complète de base, les journauxet, le cas échéant, les sauvegardes différentielles à appliquer pour ramenerla base dans un état cohérent.

5. Choisir éventuellement des options. L’option Forcer la restauration sur labase de données existante permet d’écraser la base existante, de recréerles fichiers aux emplacements indiqués dans le tableau Restaurer lesfichiers base de données en tant que.

6. Il ne reste qu’à choisir la sauvegarde à utiliser, et à cliquer sur lebouton OK.

Figure 5–15Boîte de dialogue de restauration d’une base de données

Administration et maintenancePARTIE II

240

Restaurer à partir d’une unité spécifique

Il se peut que l’unité à partir de laquelle on souhaite restaurer une sauvegarden’ait pas été définie. C’est le cas quand on doit réinstaller SQL Server aprèsun crash disque, ou quand on branche un lecteur de bande sur le serveur pourrécupérer une bande d’un autre serveur. Il faut alors redéfinir l’unité pour queSQL Server puisse s’en servir. Nous verrons que l’instruction RESTORE

permet d’utiliser une unité sur disque, bande ou canal nommé sans qu’elle aitété au préalable définie avec la procédure sp_addumpdevice.

Figure 5–16Options de restauration

Figure 5–17Restaurer à partir d’une unité

Sauvegarde et restaurationCHAPITRE V

241

Pour l’instant, voyons comment restaurer une sauvegarde à partir d’un fichierse trouvant sur un disque local ou sur un disque réseau. À partir de la fenêtreRestaurer la base de données (figure 5–15), cliquer sur le bouton radioÀ partir de l’unité. La boîte de dialogue apparaît (figure 5–17).

On a alors la possibilité d’ajouter une ou plusieurs unités en cliquant sur lebouton Sélectionner les unités. On obtient alors une boîte de dialogue quipermet de sélectionner les unités à ajouter (figure 5–18).

En cliquant sur le bouton Ajouter, on choisit une unité existante ou l’on pointesur un fichier ou un lecteur de bande.

Attention ! Le titre de cette boîte de dialogue est erroné et devrait êtreSélectionnez l’unité source de la restauration (figure 5–19).

Une fois l’information saisie et validée deux fois par OK, la nouvelle unitéapparaît dans la liste des unités disponibles (figure 5–20).

Figure 5–18Choix d’une unité

Figure 5–19Sélection de l’unité contenant la sauvegarde

Administration et maintenancePARTIE II

242

Il est possible à partir de cette fenêtre de visualiser le contenu de l’unité afinde sélectionner la sauvegarde à restaurer (figure 5–21). La sélection de lasauvegarde entraîne le choix du numéro et du type de la sauvegarde.

Par exemple, si l’on coche la deuxième case, on sélectionne en fait l’optionFILE = 2 et un journal des transactions. Une fois le choix fait, il ne reste qu’àsélectionner les options nécessaires 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 sonen-tête. Il est possible de le faire soit directement depuis SQL EnterpriseManager, en demandant le contenu d’une unité sélectionnée, comme dans les

Figure 5–20Restauration à partir d’une unité

Figure 5–21Choix de la sauvegarde dans l’unité

Sauvegarde et restaurationCHAPITRE V

243

manipulations précédentes, soit à l’aide de l’instruction RESTORE

HEADERONLY étudiée plus loin : voir « Chargement d’un en-tête », page 249.

Restaurer avec Transact-SQL

Comme pour la sauvegarde, l’instruction de restauration présente quelquesoptions intéressantes qui méritent d’être mentionnées.

Syntaxe

Les noms d’unités de sauvegarde sont identiques à ceux qui figurent dans lesinstructions BACKUP mais nous ne retrouvons pas toutes les options :

• FILE = numéro_de_fichier : spécifie l’emplacement de la sauvegarde dansle cas où l’unité contient plusieurs sauvegardes séquentielles ;

• KEEP_REPLICATION : indique que les paramètres de réplication d’une basede données publiés sont conservés lors de sa restauration ;

• MEDIAPASSWORD : indique le mot de passe protégeant le support desauvegarde ;

• MOVE : permet de changer l’emplacement des fichiers de base de donnéespendant la restauration. Pour utiliser cette option, il ne faut pas que la baserestaurée existe sur le système. L’opération de restauration se charge de lacréation des fichiers aux emplacements indiqués dans l’option MOVE ;

RESTORE DATABASE {nom_base_de_données | @var_nom_base_de_données}[FROM <unité_de_sauvegarde> [,...n]][WITH

[RESTRICTED_USER][[,] FILE = numéro_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_système_d’exploitation']

[,...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 l’unité Sauvebase.

Administration et maintenancePARTIE II

244

• NORECOVERY : indique au système que d’autres sauvegardes vont êtrerestaurées à la suite de la base. Il est impératif de stipuler cette option dansle cas où l’on doit restaurer les journaux des transactions ou une sauve-garde différentielle ;

• NOREWIND | REWIND : permet d’indiquer de libérer et de rembobiner ounon la bande après restauration. Si vous ne libérez pas la bande à l’issue dela restauration, elle ne pourra pas être utilisée pas un autre processus.NOREWIND implique NOUNLOAD ;

• PASSWORD : indique le mot de passe protégeant la sauvegarde ;

• RECOVERY : indique que la sauvegarde à restaurer est la dernière du jeu desauvegarde. Cette option (par défaut) est à stipuler pour laisser la base enétat cohérent et empêcher la restauration des journaux des transactions ;

• REPLACE : indique à SQL Server qu’il doit remplacer la base si elle existesur le système ;

• RESTART : indique à SQL Server que la restauration précédente s’est inter-rompue (par exemple, à la suite d’un crash système) et qu’il faut reprendrela restauration à son point d’arrêt (ne concerne que les restaurations àpartir de bandes) ;

• RESTRICTED_USER : remplace l’option DBO_ONLY des versions précéden-tes et permet de restreindre l’accès de la base de données restaurée auxmembres des rôles db_owner, dbcreator et sysadmin ;

• UNLOAD | NOUNLOAD (voir l’instruction BACKUP DATABASE, page 230).

Si l’on restaure une base sauvegardée sur plusieurs unités en parallèle, il fautsélectionner l’ensemble de ces unités.

La base de données master est un cas particulier dans les opérations de restau-ration. Voir le chapitre 14, « Tolérance aux pannes et arrêts système ».

Restauration du journal des transactionsLa restauration du journal des transactions est une opération qui consiste àréappliquer les transactions sauvegardées. Pour pouvoir restaurer un journal,il faut que celui-ci ait été sauvegardé indépendamment de la base de données,donc qu’il ait fait l’objet d’une instruction BACKUP LOG. Si l’on applique unestratégie de sauvegarde incrémentale, on dispose de plusieurs sauvegardes dujournal depuis la dernière sauvegarde de la base. Pour restaurer les journaux,il faut d’abord restaurer la base avec l’option NORECOVERY, puis réappliquerles transactions enregistrées dans les journaux, dans l’ordre. Si l’on tente deles réappliquer dans un ordre différent, le système indique que la sauvegardeutilisée n’est pas à sa place dans la séquence.

Sauvegarde et restaurationCHAPITRE V

245

Restaurer avec SQL Enterprise Manager

La démarche de restauration d’un journal est identique à celle d’une base dedonnées. On peut en plus indiquer la date et l’heure à laquelle on souhaitearrêter la restauration : par exemple, restaurer le journal sauvegardé mardisoir, jusqu’à mardi 12 h 45 (voir, dans le paragraphe suivant, l’exemple illus-trant l’option STOPAT).

Restaurer avec Transact-SQL

Syntaxe

Les noms d’unités de sauvegarde obéissent aux mêmes règles que les instruc-tions BACKUP et RESTORE DATABASE. Les options sont identiques à celles deRESTORE DATABASE, à l’exception de STOPAT, STOPATMARK et STOPBEFORE-MARK qui sont propres aux journaux de transactions.

STOPAT existait déjà en version 7, les deux autres sont nouvelles dans SQLServer 2000.Supposons, par exemple, que vous ayez fait une sauvegarde dujournal le mardi à 21h00 ; vous souhaitez revenir à l’état dans lequel était la

RESTORE LOG {nom_base | @var_nom_base}[FROM <unité_de_sauvegarde> [,...n]][ WITH

[RESTRICTED_USER] [[,] FILE = {numéro_fichier | @variable_numéro_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_système_d’exploitation'][,...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

réapplique les transactions du journal de la base mabase, sauvegardé dans l’unitéSauvelog.

Administration et maintenancePARTIE II

246

base à 12h45 le mardi 21 septembre 2001 ; vous allez donc restaurer la sauve-garde de base du dimanche par un BACKUP DATABASE simple, restaurer lejournal du lundi par un BACKUP LOG simple et enfin, restaurer celui du mardiavec l’option : WITH STOPAT '21/09/01 12:45:00'.

En fin d’exécution, le système indique le nombre de transactions validées(rolled forward) et le nombre de transactions annulées (rolled back). Les tran-sactions annulées sont celles qui sont dotées d’un ROLLBACK explicite, oucelles qui n’ont pas fait l’objet d’un COMMIT. Généralement, il s’agit des tran-sactions en cours lors de la sauvegarde du journal et dont il a été impossiblede sauvegarder les ordres COMMIT.

STOPATMARK et STOPBEFOREMARK permettent de restaurer le journal destransactions jusqu'à une marque nommée placée spécialement dans une tran-saction par l’instruction BEGIN TRANSACTION nom_transaction WITH MARK.Supposons que vous souhaitiez exécuter une transaction dont vous n’êtes pascertain à 100%. Vous « marquez » cette transaction de façon à pouvoir, lors dela restauration du journal, revenir à l’état dans lequel était la base juste avantla transaction (STOPBEFOREMARK). L’existence de l’option AFTER est justifiéepar le fait qu’il peut exister plusieurs marques portant le même nom dans unesauvegarde 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 vaavoir lieu jusqu’à la première occurrence de la marque, c’est-à-dire celle du12 juillet à 20 heures. En revanche, avec WITH STOPATMARK marque1 AFTER

'07/13/01 13h00', la sauvegarde va se poursuivre jusqu’à la seconde marquemarque1 car elle est postérieure à la date et à l’heure indiquées dans lapremière.

STOPATMARK rejoue toutes les transactions jusqu’à celle qui est marquéeincluse. STOPBEFOREMARK s’arrête à la dernière transaction précédant cellequi est marquée. Ces deux options pallient en fait les limites intrinsèques del’option STOPAT. Il est en effet plus simple de laisser une marque dans le jour-nal des transactions pour permettre de retrouver une transaction particulièreque de noter l’heure et la date auxquelles elle a eu lieu.

Sauvegarde et restaurationCHAPITRE V

247

Restauration d’une sauvegarde différentielleLa restauration d’une sauvegarde différentielle suit immédiatement celled’une sauvegarde complète de la base de données faite avec l’optionNORECOVERY. Plus rapide qu’une restauration d’un ensemble de sauvegardede journal des transactions, son but est le même : restaurer l’activité de la basede données depuis la sauvegarde complète.

Restaurer avec SQL Enterprise Manager

Avec SQL Enterprise Manager, la démarche est identique à la restaurationd’une base ou d’un journal.

Restaurer avec Transact-SQL

La syntaxe de la restauration différentielle est celle de l’instruction RESTORE

DATABASE. Il n’y a donc aucune différence syntaxique entre une restaurationcomplète et une restauration différentielle. La différence réside dans le jeu desauvegarde et dans l’option NORECOVERY appliquée à la restaurationcomplète.

Restauration d’un fichier ou d’un groupe de fichiersLa restauration d’un fichier ou d’un groupe de fichiers peut s’effectuer àpartir d’une sauvegarde de fichier/groupe de fichiers ou de base de données.Elle n’est pas sans poser de problèmes de cohérence. En effet, si vous restau-rez un fichier à une version antérieure, vous perdez toutes les modificationsapportées aux données depuis leur sauvegarde et prenez donc le risqued’avoir une base incohérente.

Pour garantir le retour à une cohérence totale, il suffit de restaurer les sauve-gardes du journal des transactions faites depuis la sauvegarde du fichier. Larestauration du fichier est faite avec l’option NORECOVERY, et celle des jour-naux ne rejouent que les transactions s’appliquant aux données du fichier/groupe de fichiers restauré.

Restaurer avec SQL Enterprise Manager

L’opération est identique à la restauration d’une base de données ou d’unjournal des transactions à l’exception du choix de l’option Groupe de fichiersou fichiers (figure 5–22).

SQL Enterprise Manager sélectionne automatiquement les journaux à appli-quer au fichier/groupe à la suite de sa restauration.

Administration et maintenancePARTIE II

248

Restaurer avec Transact-SQL

Comme pour la sauvegarde, l’ordre indique le nom d’une base de données etdésigne le fichier ou le groupe de fichier.

Syntaxe

Restauration partielle d’une base de donnéesNous venons de voir qu’il était possible de restaurer un seul fichier ou groupede fichier ; on peut encore restaurer une base de données partiellement, enmettant certains de ses fichiers ou de ses groupes de fichiers offline. L’intérêtd’une restauration partielle réside dans la possibilité de ne pas restaurer l’inté-gralité d’une base de données si l’on ne souhaite accéder qu’à un sous-ensem-ble de ses données, par exemple, des données archivées.

Figure 5–22Restauration d’un fichier

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]

Sauvegarde et restaurationCHAPITRE V

249

Syntaxe

La granularité d’une restauration partielle est le fichier ou le groupe defichier. Si donc on souhaite accéder aux données d’une table précise, il faudrarestaurer son fichier ou son groupe en totalité. Il est à noter que la restaurationpartielle n’est possible que depuis Transact-SQL.

Pour en savoir plus

Pour consulter des exemples complets et avoir de plus amples informations sur larestauration partielle, consultez la documentation en ligne à Administration deSQL Server/Sauvegarde et restauration de base de données/Opérations de sauve-garde et de restauration/Opérations de restauration d’une base de donnéespartielle.

Chargement d’un en-têteIl faut charger l’en-tête pour avoir un aperçu du contenu d’une unité. L’intérêten est la vérification du contenu d’une bande, avant de la charger ; par exem-ple, lorsque la bande vient d’un site distant. Cette opération peut être faitedepuis l’interface graphique ou par une commande Transact-SQL.

Syntaxe

Le tableau 5–3 explique les paramètres du résultat obtenu.

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]

RESTORE HEADERONLY FROM unité_de_sauvegarde[ WITH { NOUNLOAD | UNLOAD }

[[,] FILE = numéro_fichier][[,] PASSWORD = {mot_de_passe | @variable_mot_de_passe} ] [[,] MEDIAPASSWORD = {mdp_media | @variable_mdp_media} ]

]

Administration et maintenancePARTIE II

250

Tableau 5–3Liste des colonnes obtenues avec RESTORE HEADERONLY

OptionType de données

Valeurs possibles

BackupName nvarchar(128) Nom du jeu de sauvegarde.

BackupDescription nvarchar(255) Description du jeu de sauvegarde.

BackupType smallint Si la sauvegarde est réalisée par SQL Server : base de données (1), journal des transactions (2), fichier (4), base de données différentielle (5).Si la sauvegarde est réalisée par un logiciel tiers : normale (1), différentielle (5).

ExpirationDate datetime Date d’expiration du jeu de sauvegarde.

Compressed tinyint Compressé (1), non compressé(0), (SQL Server ne prend pas en compte, seul, la compression logicielle).

Position smallint Position du jeu de sauvegarde dans le volume (FILE =).

Devicetype tinyint Disque (2, 102), bande (5, 105) ou canal de communication (6, 106), Périphérique virtuel (7, 107).

UserName nvarchar(128) Nom de l’utilisateur ayant lancé la sauvegarde.

ServerName nvarchar(128) Nom du serveur qui a créé la sauvegarde.

DatabaseName nvarchar(128) Nom de base de données sauvegardée.

DatabaseVersion int Version de la base de données sauvegardée.

DatabaseCreationDate datetime Date et heure de création de la base de données.

BackupSize numeric(20,0) Taille de la sauvegarde en octets.

FirstLSN numeric(25,0) Numéro de séquence du journal des transactions correspondant à la première transaction sauvegardée.

LastLSN numeric(25,0) Numéro de séquence du journal des transactions correspondant à la dernière transaction sauvegardée.

CheckpointLSN numeric(25,0) Numéro de séquence du journal des transactions correspondant au point de synchronisation le plus proche du moment de la sauvegarde.

DatabaseBackupLSN numeric(25,0) Numéro de séquence du journal des transactions correspondant à la sauvegarde.

BackupStartDate datetime Date et heure du début de la sauvegarde.

BackupFinishDate datetime Date et heure de la fin de la sauvegarde.

SortOrder smallint Ordre de tri du serveur.

CodePage smallint Jeu de caractères du serveur.

Sauvegarde et restaurationCHAPITRE V

251

UnicodeLocaleId int Identifiant du style Unicode (langue) du serveur.

UnicodeComparisonStyle int Ordre de comparaison Unicode.

CompatibilityLevel tinyint Niveau de compatibilité de la base (60, 65 ou 70).

SoftwareVendorId int Numéro de l’éditeur du logiciel de sauvegarde (4608 pour Microsoft SQL Server).

SoftwareVersionMajor int Numéro principal de version du logiciel de sauvegarde.

SoftwareVersionMinor int Numéro secondaire de version du logiciel de sauvegarde.

SoftwareVersionBuild int Numéro de build de version du logiciel de sauvegarde.

Machine_name nvarchar(128) Nom de l’ordinateur qui a effectué la sauvegarde.

Flags int Indique si les données insérées en bloc (bcp ou BULK INSERT) sont contenues dans la sauvegarde du journal.

BindingID uniqueidentifier ID de la base de données.

RecoveryForkID uniqueidentifier ID de fourchette de récupération de cette sauvegarde. Utilisé conjointement avec BindingID pour vérifier qu’une sauvegarde peut être restaurée sur un serveur particulier.

Collation nvarchar(128) Classement de la base de données.

Tableau 5–3Liste des colonnes obtenues avec RESTORE HEADERONLY

OptionType de données

Valeurs possibles

Administration et maintenancePARTIE II

252

RésuméLes nombreux mécanismes de sauvegarde et de restauration peuvent engen-drer une certaine confusion. Voici un résumé rapide des diverses situationsnécessitant la restauration d’une ou plusieurs bases de données.

Restauration suite à corruption de la base de données

Crash des disques de la base de données

1. Faire d’urgence 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 l’instructionDROP DATABASE ;

3. Restaurer la base de données depuis SQL Enterprise Manager ou avecl’instruction RESTORE DATABASE :

RESTORE DATABASE mabase FROM unité_sauvegarde WITH NORECOVERYRESTORE LOG mabase FROM unité_sauvegarde WITH FILE = 1, NORECOVERY…RESTORE LOG mabase FROM unité_sauvegarde WITH FILE = n, RECOVERY

4. Accéder à la base depuis SQL Enterprise Manager.

1. Faire une sauvegarde d’urgence du journal des transactions :

BACKUP LOG mabase TO unité_sauvegarde WITH NO_TRUNCATE

2. Remplacer et formater les disques incriminés ;

3. Supprimer la base depuis SQL Enterprise Manager ou avec l’instructionDROP DATABASE ;

4. Restaurer la base de données depuis SQL Enterprise Manager ou avecl’instruction RESTORE DATABASE :

RESTORE DATABASE mabase FROM unité_sauvegarde WITH NORECOVERYRESTORE LOG mabase FROM unité_sauvegarde WITH FILE = 1, NORECOVERY…RESTORE LOG mabase FROM unité_sauvegarde WITH FILE = n, RECOVERY

5. Accéder à la base depuis SQL Enterprise Manager.

Sauvegarde et restaurationCHAPITRE V

253

Crash des disques du journal des transactions

En cas de crash des disques du journal des transactions, le système recréeautomatiquement un journal à l’emplacement du fichier .MDF permettantl’exploitation de la base.

Saturation du journal des transactions

Crash des bases système

Nous reviendrons sur les problèmes de crash système et sur les moyens des’en protéger au chapitre 14, « Tolérance aux pannes et arrêts système ».Voici cependant les procédures à suivre si le support contenant les bases dedonnées système est endommagé.

Restauration de bases de données système depuis une sauvegarde

Si le service SQL Server peut être lancé, vous pouvez utiliser l’instructionRESTORE DATABASE ou SQL Enterprise Manager pour restaurer les bases dedonnées système à partir d’une sauvegarde valide :

1. Changer le disque défectueux ;

2. Détacher la base incriminée :

sp_detach_db mabase

3. Déplacer le fichier journal que le système a créé automatiquement et lerenommer avec l’ancien nom ;

4. Rattacher la base :

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

1. Faire d’urgence un vidage du journal des transactions :

BACKUP LOG mabase WITH NO_LOG

2. Exécuter une instruction CHECKPOINT sur la base de production ;

3. Faire immédiatement une sauvegarde de la base de données :

BACKUP DATABASE mabase TO unité_sauvegarde

4. Augmenter la taille du journal des transactions pour éviter le phénomène.

RESTORE DATABASE master FROM unité_sauvegarde_masterRESTORE DATABASE msdb FROM unité_sauvegarde_msdb

Administration et maintenancePARTIE II

254

Reconstruction et restauration des bases de données système

Si la base de données master est endommagée et que vous ne pouvez paslancer SQL Server, suivez la procédure ci-après :

Rattachement ou restauration des bases de données de production

Si vous avez pu restaurer la base master, aucune autre opération n’est néces-saire, car cette base contient les informations suffisantes à la récupération desbases utilisateur. Si la restauration de master a échoué, vous devez rattacherles bases de données de production ou les restaurer si l’attache échoue.

Crash du disque système

Si le support contenant SQL Server est endommagé, il faut réinstallerSQL Server et les bases système.

1. Reconstruire les bases de données système avec l’utilitaire REBUILDM.EXE

qui se trouve dans le répertoire \Program Files\Microsoft SQLServer\80\Tools\Binn ;

2. Redémarrer normalement le service SQL Server ;

3. Restaurer la base master à partir de sa sauvegarde la plus récente :

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 échéant :

RESTORE DATABASE model FROM unité_sauvegarde_model

6. Restaurer la base distribution si la machine est distributeur de réplication :

RESTORE DATABASE distribution FROM unité_sauvegarde_distribution

1. Réinstaller SQLServer en installation par défaut, à moins que vousn’ayez fait et noté des choix d’installation particuliers ;

2. Démarrer SQL Server en mode monoutilisateur, avec l’applet Servicesdu Panneau de configuration, en utilisant le commutateur –m dans leparamètre du service SQL Server ;

3. Restaurer master à partir de la sauvegarde la plus récente, depuisSQL Enterprise Manager :

RESTORE DATABASE master FROM unité_sauvegarde_master

Sauvegarde et restaurationCHAPITRE V

255

Problèmes courants et précautions d’usage

Une sauvegarde ne peut jamais être fiable à 100%, ne serait-ce qu’à cause dusupport sur lequel elle est faite et de son mode de stockage. Même si toutesles précautions sont prises à ce niveau, il peut arriver que la sauvegarde nepuisse être récupérée, essentiellement à cause des problèmes de cohérence dela base.

De plus, pour assurer une stratégie de sauvegarde parfaite, il est préférable dela faire alors que le trafic sur la base est faible, voire nul. Pour cela, il est inté-ressant d’automatiser le processus de sauvegarde, pour qu’il ait lieu la nuit oule week-end, sans intervention d’un opérateur.

Vérification de cohérenceDans les versions précédentes de SQL Server, les structures de donnéesn’étaient pas d’une fiabilité à toute épreuve dans la mesure où il n’existait pasde mécanisme de vérification des allocations. Dans les versions 7 et 2000, lespages des tables qui possèdent un index clustered sont chaînées et référencéesdans l’IAM (Index Allocation Map). Dans le cas, improbable, de suppressiond’un pointeur avant ou arrière entre pages, le système peut facilement retrou-ver les allocations correctes en examinant l’IAM. Cependant, si un problèmed’allocation existe, il peut entraîner une instabilité du système et une corrup-tion des sauvegardes ou des restaurations.

4. Restaurer la base msdb à partir de sa sauvegarde la plus récente depuisSQL 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 NORECOVERYRESTORE LOG mabase FROM unité_sauvegarde WITH FILE = 1, NORECOVERY…RESTORE LOG mabase FROM unité_sauvegarde WITH FILE = n, RECOVERY

Administration et maintenancePARTIE II

256

Résultat : il faut vérifier et, le cas échéant, réparer ces incohérences avant delancer une sauvegarde ! Pour cela, nous avons trois armes : la défragmenta-tion (voir chapitre 12, « Optimisation des performances »), l’utilitaireSQLMAINT (voir « Outil de maintenance », page 259) ou le Database Consis-tency Checker (DBCC). Cependant ces vérifications sont moins nécessairesqu’en version 6.x et, par ailleurs, elles ont été optimisées et sont beaucoupplus rapides.

Database Consistency Checker (DBCC)

Voici quatre de ses instructions.

• DBCC CHECKDB : vérifie que les pages d’index et de tables sont correcte-ment liées. Si cette instruction renvoie des erreurs, il va falloir demanderune réparation des allocations et l’on va au devant de pertes potentielles dedonnées. Il convient d’arrêter l’exploitation de la base, de sauvegarderd’urgence le journal de transactions, de faire les réparations avec l’optionREPAIR_REBUILD (qui n’engendre pas de perte de données, mais est limitédans ses réparations) ou REPAIR_ALLOW_DATA_LOSS (qui peut entraînerdes pertes de données), de faire les vérifications de fonctionnement et, lecas échéant, de reconstruire la base depuis sa dernière sauvegarde3.

• DBCC CHECKALLOC : vérifie les allocations de pages par rapport auxextensions. Elle est implicitement contenue dans DBCC CHECKDB et n’estdonc pas utile en sus.

• DBCC CHECKTABLE : vérifie la cohérence d’une table et éventuellement deses index. Comme CHECKALLOC, elle est contenue dans DBCC CHECKDB.

• DBCC CHECKCATALOG : vérifie la cohérence des tables système. Si on nedonne pas de nom de base de données, elle s’applique à la base en cours.Si cette instruction renvoie des erreurs, il s’agira vraisemblablement demodifications apportées aux tables sans que ces modifications aient étérépercutées dans les tables système, mais ce cas est très peu probable.

Et puis si après tout, nous laissions faire le système... Microsoft nous donneune boîte à outils complète, à nous de mettre en place les stratégies gagnantes.

3. Rassurez-vous ! ces cas sont rarissimes et même si nous n’avons que peu de recul sur les systèmesSQL Server 2000 en production, je n’ai pas eu connaissance de corruption ayant entraîné des pertes dedonnées.

Sauvegarde et restaurationCHAPITRE V

257

AutomatisationSQL Server met à notre disposition un gestionnaire de tâches automatisées.Parmi ces tâches, celles qui concernent la sauvegarde occupent une placeprépondérante.

Il y a deux moyens d’automatiser la sauvegarde :

• créer un travail qui exécute un BACKUP DATABASE ou BACKUP LOG, soitdepuis la fenêtre Sauvegarder la base de données, soit directement depuisle gestionnaire de travaux ;

• créer un travail qui s’appuie sur l’utilitaire SQLMAINT, soit avec l’AssistantPlan de maintenance de base de données, soit depuis la fenêtre du Gestion-naire de travaux.

Automatiser une sauvegarde

En ce qui concerne le premier moyen, il ne s’agit que de l’automatisationd’instructions que nous avons déjà étudiées, mise en place directement grâceau gestionnaire de travaux ou depuis la boîte de dialogue Sauvegarder la basede données.

Dans SQL Enterprise Manager, ouvrir le dossier Gestion, puis Agent SQLServer, enfin sélectionner Travaux (figure 5–23). Pour créer un nouveautravail, choisir Nouveau travail dans le menu contextuel du dossier Travauxou utiliser l’Assistant Création de travail en sélectionnant Planification detravail dans le menu Outils.

Tout travail planifié se compose de trois éléments essentiels : un nom (et,accessoirement, une catégorie), une ou plusieurs étapes et une ou plusieursplanifications. Une étape appartient à l’un de ces quatre types : Transact-SQL(une ou plusieurs commandes SQL), CmdExec (une commande du système

Figure 5–23Liste des travaux définis

Administration et maintenancePARTIE II

258

d’exploitation), script ActiveX (Visual Basic Script ou Javascript) et réplica-tion (que nous verrons plus tard).

Voici les étapes pour créer un travail de sauvegarde, depuis la boîte de dialo-gue Propriétés du nouveau travail :

1. donner un nom et une catégorie au nouveau travail ;

2. sélectionner l’onglet Étapes, cliquer sur le bouton Nouvelle et définir lescaractéristiques de l’étape, à savoir son nom et la commande SQL àexécuter, puis valider en cliquant sur le bouton OK (figure 5–25) ;

3. de retour dans la boîte de dialogue Propriétés du nouveau travail, sélec-tionner l’onglet Planification et cliquer sur le bouton Nouvelle planifica-tion, définir les paramètres de la planification, puis valider en cliquant surle bouton OK (figure 5–26) :

Figure 5–24Définition du nom et de la catégorie du travail

Figure 5–25Définition d’une étape de type Transact-SQL

Sauvegarde et restaurationCHAPITRE V

259

Il est possible de définir plusieurs planifications : par exemple, l’une char-gée de la sauvegarde tous les jours ouvrés à 22h00 et l’autre chargée decelle du dimanche à 04h00 ;

4. Valider la création du travail en cliquant sur le bouton OK.

Nous reverrons toutes les options de création et de planification d’un travailau chapitre 13, « Automatisation des tâches ».

Outil de maintenance

L’utilitaire SQLMAINT est apparu avec la version 6.5. Il a été conçu commesupport de l’Assistant Plan de maintenance de base de données. Néanmoins,personne ne vous empêche de l’utiliser pour mettre en place des stratégies desauvegarde automatisée.

Le but ici n’est pas de détailler tous les paramètres de cet utilitaire, maissimplement d’en présenter les options intéressant cette partie du livre.

Syntaxe

Figure 5–26Définition d’une planification

sqlmaint [

[-S serveur][-U nom_d’accès [-P mot_de_passe]]{

[ -D nom_base | -PlanName nom | -PlanID guid ][-Rpt fichier_texte [-DelTxtRpt <période>] ][-To nom_opérateur][-HtmlRpt fichier_html [-DelHtmlRpt <période>] ][-RmUnusedSpace pourcentage_seuil pourcentage_libre][-CkDB | -CkDBNoldx][-CkAl | -CkAlNoIdx][-CkTxtAl][-CkCat]

Administration et maintenancePARTIE II

260

Les options de la commande ont presque toutes une correspondance avecl’une des commandes que nous avons vues dans les sections précédentes.

• Rpt : indique le fichier avec son chemin complet dans lequel sera inscrit lerapport d’exécution ;

• HtmlRpt : indique le fichier HTML avec son chemin complet dans lequelsera inscrit le rapport d’exécution ;

• RmUnusedSpace : stipule de récupérer l’espace libre en fin de fichier, si labase est à croissance automatique et qu’elle a crû ;

• CkDB, CkDBNoIdx : équivalent de DBCC CHECKDB, avec ou sans l’optionNOINDEX ;

• CkAl, CkAlNoIdx : équivalent de DBCC NEWALLOC, avec ou sans l’optionNOINDEX ;

• CkTxtAl : équivalent de DBCC TEXTALL ;

• CkCat : équivalent de DBCC CHECKCATALOG ;

• WriteHistory : indique que chaque opération de maintenance est consignéedans la table msdb.dbo.sysdbmaintplan_history.

• BkUpDB : indique le chemin dans lequel faire la sauvegarde. Dans le casd’une sauvegarde sur bande, indiquer son nom sous la forme \\.\TAPEn,où n représente le numéro du lecteur de bande. Le fichier généré sera de laforme : NOMBASE_DB_AAAAMMJJHHMM.BAK, où aaaammjjhhmm repré-sente la date et l’heure de sauvegarde ;

• BkUpLog : identique à BkUpDB pour les journaux de transactions. Lefichier s’appellera NOMBASE_LOG_AAAAMMJJHHMM.BAK ;

• BkUpMedia : spécifie le type de l’unité de sauvegarde. Pour le type DISK,DelBkUps permet de donner un délai de rétention ;

[-UpdOptiStats pourcentage_échantillonage][-RebldIdx espace_libre][-WriteHistory][

[-BkUpDB chemin | -BkUpLog chemin]{-BkUpMedia

{DISK [[-DelBkUps <période>] [-CrBkSubDir ] [ -UseDefDir ]]

| TAPE}}

[-BkUpOnlyIfClean][-VrfyBackup]

]}

]

Sauvegarde et restaurationCHAPITRE V

261

• BkUpOnlyIfClean : ne fait la sauvegarde que si les opérations de vérifica-tion (CkDB et CkCat) ne renvoient aucune erreur ;

• VrfyBackup : vérifie la sauvegarde à son issue.

Attention

Les paramètres sont sensibles aux différences majuscule/minuscule. Respectezbien leur casse sous peine de ne pas voir votre commande s’exécuter.

Si vous exécutez l’instruction suivante le 23 septembre 2001 à une invite decommande :

vous faites une sauvegarde de la base pubs dans le fichierPUBS_DB_200109232315.BAK sur disque, à condition que les rapports de véri-fication de cohérence ne renvoient pas d’erreurs. Vous pourrez alors lire lerésultat de l’opération dans le fichier de rapportPUBS_MAINT_200109232315.RPT.

Quand une commande est bien paramétrée, sauvegardez-la et planifiez-laavec le gestionnaire de tâches.

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

Administration et maintenancePARTIE II

262

Points clés

• Mettez en place dès le début de la mise en production de votre base une straté-gie de sauvegarde.

• Sauvegardez toutes les bases de données, y compris master, msdb et distribu-tion (si vous utilisez de la réplication).

• Une unité de sauvegarde peut être créée sur disque, disque réseau, bande ou canal nommé.

• Toute sauvegarde est faite à destination d’une unité de sauvegarde explicite-ment créée ou définie au moment de la sauvegarde.

• Les unités de sauvegarde sur bande s’appuient sur le gestionnaire de bande de Windows 2000.

• Toutes les informations sur les unités de sauvegarde se trouvent dans la table sysdevices dans master.

• On peut sauvegarder une base de données complète, une base de données en mode différentiel, un journal des transactions, un fichier ou un groupe de fichiers.

• Le mécanisme de sauvegarde dynamique permet de sauvegarder une base ou son journal alors même que les utilisateurs travaillent sur la base.

• La sauvegarde d’un 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 précise avec le paramètre STOPAT.

• Vérifiez de temps en temps la cohérence de la base de données avec les instructions DBCC.

• Planifier vos sauvegardes avec SQLMAINT vous permet de mettre en place simplement et rapidement une stratégie de sauvegarde de vos informations, avec les vérifications de cohérence nécessaires.

Pour en savoir plus sur les sujets abordés dans ce chapitre

Documentation en ligne de SQL Server, livre « Administration deSQL Server », chapitre « Sauvegarde et restauration de base de données ».