Académique Documents
Professionnel Documents
Culture Documents
-2-
Copyright 2006 - fadace. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de domages et intrts.
http://developpez.com/mssql/sauve/
Dplacement, sauvegardes et restauration de bases sous MS-SQL Server par Fabien Celaia
Une base de donnes MS-SQL comprend entre autre un espace logique o l'on peut crer des objets tables, vues,
procdures stockes, etc.
SQL Server gre donc, comme la plupart des autres SGBDR du march, diffrents types de fichiers
Dans sa mission initiale, la sauvegarde/restauration sert mettre en scurit des donnes sur un support
amovible, et - au besoin - remonter ces donnes sur leur emplacement d'origine.
Trs vite, les sauvegardes ont t utilises pour remonter les bases sur d'autres instances, avant tout des fins de
test, car on n'est sr qu'une sauvegarde est bonne que lorsqu'on l'a remonte... ce qui n'est pas toujours le cas en
environnement de production.
Suivant cette mme logique, il est possible de les utiliser afin de clner/renommer une base (quoique le
sp_renamedb est quand mme plus efficace si l'on reste sur une mme instance et que l'on veut simplement
renommer la base).
Depuis la version 2000 de MS-SQL Server, chaque base de donne utilsateur gre les fichiers qui lui sont
associs, et qui sont au minimum au nombre de 2
un pour le segment de donnes et le segment systme (soit pour stocker les tables )
un pour stocker le journal de transactions
-3-
Copyright 2006 - fadace. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de domages et intrts.
http://developpez.com/mssql/sauve/
Dplacement, sauvegardes et restauration de bases sous MS-SQL Server par Fabien Celaia
MS-SQL Server inclut un agent et un ordonnanceur permettant un botien de dterminer aisment une stratgie
de sauvegarde.
Dans un premier temps, il faut s'assurer que l'agent est bien dmarr. C'est aisment faisable via SQL Server
Service Manager (jusqu' la version 2000), SQL Server Configuration Manager (ds la version 2005) ou en allant
directement dans les Services Windows.
-4-
Copyright 2006 - fadace. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de domages et intrts.
http://developpez.com/mssql/sauve/
Dplacement, sauvegardes et restauration de bases sous MS-SQL Server par Fabien Celaia
Ensuite, les assistants se chargent de vous guider dans la cration des travaux de sauvegarde et leur planification.
Se connecter l'instance
Cliquer sur Maintenance
Clic droit sur Database Maintenance Plans
Choisir un nouveau plan de maintenance
Suivre l'assistant
Les version 2000 et 2005 diffrent et cela que l'assitant de la 2005 vous plonge rellement dans un environnement
de type "workflow" ou les diverses tches sont connectables souhait. Grandement complexifi pour une tche
basique, il apporte sans conteste un plus dans les traitements plus complexes.
il va de soi que toutes ces commandes peuvent tre lances la main via script T-SQL. Utilisez l'assistant en
premier et allez ensuite visualiser les scripts gnrs afin de les remettre " votre sauce".
-5-
Copyright 2006 - fadace. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de domages et intrts.
http://developpez.com/mssql/sauve/
Dplacement, sauvegardes et restauration de bases sous MS-SQL Server par Fabien Celaia
Il s'agit donc de sauvegarder indirectement la base de donnes en sauvant en fait les fichiers physiques qui la
composent.
C'est une sauvegarde "systme" faite par copie de fichiers depuis le systme d'exploitation.
from master..sysdatabases
master..sysdevices Liste des fichiers physiques select name
disponibles
from master..sysdevices
master..sysusages Table de lien pour l'alLocalisation USE master
des bases sur les fichiers
GO
AND u.dbid=b.dbid
Base..syssegments Table des segments de la base
devant mixer avec
sysusages.segmaps (masque de
bits)
Une base ne pouvant tre associe un fichier spcifique, seule la sauvegarde de l'instance entire est possible,
et ceci uniquement lorsque l'instance est arrte (shutdown). Tout autre essai vous expose corrompre votre
base, une dsynchronisation mmoire/disque tant quasi sre. La liste des fichiers sauver peut s'afficher grce
au T-SQL suivant (la condition sur status supprime les dump devices):
SELECT physname
FROM master..sysdevices
WHERE status & 16=0
-6-
Copyright 2006 - fadace. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de domages et intrts.
http://developpez.com/mssql/sauve/
Dplacement, sauvegardes et restauration de bases sous MS-SQL Server par Fabien Celaia
Il devient donc possible de dtacher et d'attacher une base de donnes en se fixant sur ses fichiers.
USE maBase
GO
SELECT filename
FROM sysfiles
GO
USE maBase
GO
EXEC sp_detach_db 'MaBase'
GO
Ds ce moment, la base n'est plus attache serveur SQL et n'est donc plus utilisable. Ses fichiers peuvent par
contre tre copis, au besoin sur un autre serveur ayant une autre instance SQL Server.
USE maBase
GO
EXEC sp_attach_db @dbname = N'MaBase',
@filename1 = N'D:\MSSQL\Data\MaBase_Data.mdf',
@filename2 = N'D:\MSSQL\Log\MaBase_log.ldf' ;
GO
-7-
Copyright 2006 - fadace. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de domages et intrts.
http://developpez.com/mssql/sauve/
Dplacement, sauvegardes et restauration de bases sous MS-SQL Server par Fabien Celaia
IV - La sauvegarde logique
L'ide est donc de sauvegarder la base, indpendament des fichiers physiques qui lui sont rattachs. L'avantage
est de ne sauver que les pages alloues de la base.
Pour des raisons de performances, on peut se crer d'autres segmetns particuliers (indexes, tables spcifiques, ...)
Jusqu'en pr-v.2000, il tait fortement recommand de dissocier le segment du journal de transactions des autres
segments, ceci afin de simplifier la rcupration lors de corruptions, mais surtout d'autoriser la sauvegardes du
journal, que l'on peut associer une sauvegarde incrmencielle. Depuis la version 2000, ceci n'est plus ncessaire
puisque le journal se trouve sur un fichier ddi (Nomdebase.ldb).
Une base de donnes se dcoupe physiquement en blocs que l'on appelle "pages". Une base peut donc tre
beraucoup plus grande que ce qu'elle contient. Elle contient alors beaucoup de pages non encore alloues un
objet. La sauvegarde complte va donc tre la sauvegarder toutes les pages alloues d'une base dans un fichier
externe. Ceci se fait l'aide de la commande BACKUP.
On peut travailler avec des dumpdevices (cibles de fichiers prdfinies), directement sur bande, etc mais ceci n'est
pas le sujet de ce didacticiel.
Relevons qu'il est tout fait possible d'excuter ce type de sauvegarde chaud = durant l'utilisation courante de la
base. Seules les performances seront sensiblement dgrades.
La rcupration se fait avec la commande RESTORE, en ayant pris soins au pralable de supprimer toute
connexion sur la base remonter. Contrairement la sauvegarde, la rcupration requiert - on peut s'en douter -
un accs exclusif la base.
USE master
GO
SELECT 'kill',spid
FROM sysprocesses
WHERE dbid=db_id('MaBase')
GO
/* Excution de l'output de la commande ci-dessus afin de librer la base */
GO
RESTORE DATABASE MaBase FROM DISK=N'D:\BACKUP\MaBase.bak'
GO
-8-
Copyright 2006 - fadace. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de domages et intrts.
http://developpez.com/mssql/sauve/
Dplacement, sauvegardes et restauration de bases sous MS-SQL Server par Fabien Celaia
Selon l'importance de la base, il est parfois prfrable de faire, entre les divers BACKUP DATABASE, des
sauvegardes incrmentielles des journaux de transactions, ceci afin de pouvoir retrouver au besoin non pas l'tat
de la base depuis la dernire sauvegarde complte (souvent la veille au soir), mais celui depuis la dernire
sauvegarde du journal de transaction (par exemple chaque heure).
Imaginons maintenant qu'un crash apparaisse 11h20 du matin. Que devez-vous faire ?
Soit, en T-SQL
USE master
GO
/* Tentative de sauvegarde du dernier journal */
BACKUP TRAN MaBase To DISK=N'D:\Backup\MaBase_crash11h30_20060518.Bak'
SELECT @@error
GO
/* Si mme arborescence disque */
RESTORE DATABASE MaBase FROM DISK=N'D:\Backup\MaBase_20h_20060517.Bak' WITH NORECOVERY
GO
/* Si arborescence disque diffrente, repositionnement sur la nouvelle arborescence */
RESTORE DATABASE MaBase FROM DISK=N'D:\Backup\MaBase_20h_20060517.Bak'
WITH MOVE 'MaBase_Data' TO DISK='C:\MaNouvelleLocalisation\Data\MaBase.mdb' ,
MOVE 'MaBase_Log' TO DISK='C:\MaNouvelleLocalisation\Log\MaBase.ldb' ,
NORECOVERY
GO
/* ... et rcupration des journaux de transactions successifs, jsute avant le crash */
RESTORE TRAN MaBase FROM DISK=N'D:\Backup\MaBase_7h_20060518.Bak' WITH NO_RECOVERY
RESTORE TRAN MaBase FROM DISK=N'D:\Backup\MaBase_8h_20060518.Bak' WITH NO_RECOVERY
RESTORE TRAN MaBase FROM DISK=N'D:\Backup\MaBase_9h_20060518.Bak' WITH NO_RECOVERY
RESTORE TRAN MaBase FROM DISK=N'D:\Backup\MaBase_10h_20060518.Bak' WITH NO_RECOVERY
RESTORE TRAN MaBase FROM DISK=N'D:\Backup\MaBase_11h_20060518.Bak' WITH NO_RECOVERY
RESTORE TRAN MaBase FROM DISK=N'D:\Backup\MaBase_crash11h30_20060518.Bak' WITH RECOVERY STOPAT =
'May 18, 2006 11:19 AM'
GO
La rcupration de la base master pose un problme particuliers compte tenu qu'il faut obtenir un accs exclusif
une base pour la restaurer, et que la base master contient des processus internes de SQL Server.
Il va donc falloir arrter le serveur et le remonter dans un mode bien particuliers, avec une base master en mode
accs exclusif.
-9-
Copyright 2006 - fadace. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de domages et intrts.
http://developpez.com/mssql/sauve/
Dplacement, sauvegardes et restauration de bases sous MS-SQL Server par Fabien Celaia
Connectez-vous ensuite via votre outil prfr (isql, sqlcmd ou un quivalent graphique) et excutez l'opraton de
restauration
N'ayez pas d'inquitude si la fin de cette commande, vous perdez votre connexion : aussitt la rcupration
effectue, le SQL Server se suicide (shutdown) afin de pouvoir tre redmarr correctement avec le nouvel tat de
sa base master.
Prcondition : quelle que soit la mthode, il n'est pas possible de remonter une version rcente sur un serveur
moins rcent (incompatibilit descendante).
Pige viter : une dsynchronisation des logins. Les logins dpendant de la base master et les utilisateurs tant
un mappage de login propre la base, le fait de remonter une base et ses utilsiateurs sur un serveur qui n'aurait
pas les bons logins risque de causer problme.
Il est donc ncessaire, dans ces cas, de sauvegarder les DDL de cration des users AVANT d'craser l'ancienne
base, via des ordre T-SQL de type
USE MaBase
GO
/* Version pr-2005 */
select 'EXEC SP_ADDUSER ' + name + ', '+ suser_sname(sid)
from sysusers
WHERE uid between 5 and 16000
AND STATUS=0 -- Suppression des application roles
/* Version 2005 */
select 'CREATE USER ' + name ' FOR LOGIN '+suser_sname(sid)
from sys.database_principals
WHERE principal_id between 5 and 16000
AND TYPE='S'
Il faudra ensuite dtecter, aprs le chargement, les utilisateurs dsynchroniser et les recrer au besoin l'aide de
la prcdure sp_change_users_login.
- 10 -
Copyright 2006 - fadace. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de domages et intrts.
http://developpez.com/mssql/sauve/
Dplacement, sauvegardes et restauration de bases sous MS-SQL Server par Fabien Celaia
V - Dplacement de bases
On dtache pralablement la base clner afin que SQL Server relche son accs en lecture sur les fichiers.
USE MASTER
GO
EXEC sp_attach_db @dbname = N'MaBase' ,
@filename1 = N'D:\MSSQL\Data\MaBase_Data.mdf',
@filename2 = N'D:\MSSQL\Log\MaBase_log.ldf'
GO
EXEC sp_attach_db @dbname = N'MonNouveauNomDeBase',
@filename1 = N'D:\MSSQL\Data\MonNouveauNomDeBase_Data.mdf',
@filename2 = N'D:\MSSQL\Log\MonNouveauNomDeBase_log.ldf'
GO
ALTER DATABASE MonNouveauNomDeBase MODIFY FILE (NAME=N'MaBase_Data',
NEWNAME=N'MonNouveauNomDeBase_Data')
ALTER DATABASE MonNouveauNomDeBase MODIFY FILE (NAME=N'MaBase_Log',
NEWNAME=N'MonNouveauNomDeBase_Log')
GO
Les bases systme de MS-SQL Server sont, via les outils graphiques, quasiment inamovibles. Pour les dplacer, il
va falloir user de subterfuges.
- 11 -
Copyright 2006 - fadace. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de domages et intrts.
http://developpez.com/mssql/sauve/
Dplacement, sauvegardes et restauration de bases sous MS-SQL Server par Fabien Celaia
USE master
GO
sp_configure 'allow updates', 1
GO
UPDATE master..sysdevices SET phyname = 'D:\MaNouvelleLocalisation\tempdb.mdf' where name =
'tempdev'
UPDATE master..sysdevices SET phyname = 'D:\MaNouvelleLocalisation\templog.ldf' where name =
'templog'
GO
SHUTDOWN with nowait
GO
Puis copie des fichiers et redmarrage du service MS-SQL Server (ici, non de l'instance = SQL2005)
Ds la version 2005, plus moyen d'influer directement sur les tables systme, donc plus moyen de modifier
manuellement les points d'entre.
Pour msdb, le dplacement se fait comme pour une base utilisateur. Dsactivez l'agent SQL afin qu'il n'y accde
pas pendant la phase de restauration qui demande, je le rappelle, un accs exclusif la base.
USE MASTER
GO
BACKUP DATABASE msdb to DISK = N'd:\backup\msdb.bak'
GO
RESTORE DATABASE msdb FROM DISK = N'd:\backup\msdb.bak'
WITH MOVE N'MSDBData' TO N'C:\MaNouvelleLocalisation\DATA\MSDBData.mdf',
MOVE N'MSDBLog' TO N'C:\MaNouvelleLocalisation\log\MSDBLog.ldf'
GO
- 12 -
Copyright 2006 - fadace. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de domages et intrts.
http://developpez.com/mssql/sauve/
Dplacement, sauvegardes et restauration de bases sous MS-SQL Server par Fabien Celaia
- 13 -
Copyright 2006 - fadace. Aucune reproduction, mme partielle, ne peut tre faite de ce site et de l'ensemble de son contenu : textes,
documents, images, etc sans l'autorisation expresse de l'auteur. Sinon vous encourez selon la loi jusqu' 3 ans de prison et jusqu' 300 000 E
de domages et intrts.
http://developpez.com/mssql/sauve/