_____________________________________________________________________
2011 Hakim Benameurlaine 1
Table des matières
1 DISASTER RECOVERY ... 2
1.1 SAUVEGARDER ... 4
1.2 RESTAURER... 21
1.3 BASE DE DONNÉS "SUSPECT" ... 28
1 DISASTER RECOVERY
Physiquement, les bases de données sont stockées dans des fichiers.
FICHIERS
fichiers de données Filegroup primaire (.mdf) Filegroup secondaire (.ndf)
Journaux des transactions .ldf
La sauvegarde/restauration sert à mettre en sécurité des données sur un support amovible, et au besoin à restaurer ces données.
MODÈLES DE RECOUVREMENT (RECOVERY MODELS)
Simple Les journaux de transactions sont tronqués au commit
Facile à maintenir
Pas de Point-In-Time Restore
Supporte les deux types de sauvegarde Full et Différentiel
Possibilité de perte de données
Full Supporte tous les types de sauvegarde
Pas de perte de données
Bulk-logged Génération minimale de journaux de transactions
Idéal pour les chargements massifs de données
Voici les différents types de sauvegarde :
_____________________________________________________________________
2011 Hakim Benameurlaine 3
TYPES DE SAUVEGARDE
Full Sauvegarde complète.
Différentiel Sauvegarde tous les changements depuis la dernière sauvegarde complète
Transaction log Sauvegarde les journaux de transactions et fait un truncate Filegroups Sauvegarde les fichiers spécifiques à un filegroup
Les stratégies de sauvegarde sont les suivantes : STRATÉGIES DE SAUVEGARDE
Full La sauvegarde prend beaucoup de temps
Le restore est rapide
Les journaux de transactions ne sont pas tronqués Full+Diff La sauvegarde est rapide
Le restore prend beaucoup de temps
Les journaux de transactions ne sont pas tronqués Full+Log La sauvegarde est rapide
Le restore prend beaucoup de temps
Les journaux de transactions sont tronqués Full+Diff+Log La sauvegarde est rapide
Le restore est rapide
Les journaux de transactions sont tronqués Filegroup Idéal pour les VLDB (Very Large Data Base)
Les types de restore sont les suivants : TYPES DE RESTORE
Standard Utiliser l’option NO_RECOVERY lors d’un restore de plusieurs backups
Utiliser l’option RECOVERY lors du restore du dernier backup
Utiliser l’option MOVE si on restore dans une autre location physique
Point-In-Time Utiliser l’option STOPAT pour restaurer à partir de n'importe quel enregistrement ponctuel (point-in-time)
Nécessite de sauvegarder les journaux de transactions
Filegroup Permet de restaurer le Filegroup primaire et optionnellement les Filegroup secondaire.
1.1 SAUVEGARDER
1) Backup device
Le backup device est un mécanisme permanent de stockage.
_____________________________________________________________________
2011 Hakim Benameurlaine 5
En premier on va créer les trois devices suivants :
AW-Data pour le Full
AW-FileGroups
AW-log
Supprimer le device AW-Data : IF EXISTS (SELECT name
FROM master.dbo.sysdevices WHERE name = N'AW-Data')
EXEC master.dbo.sp_dropdevice @logicalname = N'AW-Data'
Supprimer le device AW-FileGroups : IF EXISTS (SELECT name
FROM master.dbo.sysdevices WHERE name = N'AW-FileGroups') EXEC master.dbo.sp_dropdevice @logicalname = N'AW-FileGroups'
Supprimer le device AW-log : IF EXISTS (SELECT name
FROM master.dbo.sysdevices WHERE name = N'AW-log')
EXEC master.dbo.sp_dropdevice @logicalname = N'AW-log'
Créer le device AW-Data :
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'AW-Data',
@physicalname = N'C:\BACKUP\AW-Data.bak'
Créer le device AW-log :
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'AW-log',
@physicalname = N'C:\BACKUP\AW-log.bak'
Créer le device AW-FileGroups
EXEC master.dbo.sp_addumpdevice
@devtype = N'disk', @logicalname = N'AW-FileGroups',
@physicalname = N'C:\BACKUP\AW-FileGroups.bak'
2) Changer le Recovery model à Full
Le Recevery model par défaut est Simple, il faut le modifier à Full.
La commande pour modifier le recovery model à FULL : USE [master]
GO
ALTER DATABASE [AdventureWorks]
SET RECOVERY FULL WITH NO_WAIT GO
_____________________________________________________________________
2011 Hakim Benameurlaine 7
3) Faire un Full backup
_____________________________________________________________________
2011 Hakim Benameurlaine 9
La commande pour faire un Full backup : BACKUP DATABASE [AdventureWorks]
TO [AW-Data]
WITH DESCRIPTION = N'Instance de production',
FORMAT, INIT, MEDIADESCRIPTION = N'AW-Media-Set', MEDIANAME = N'AW-Media',
NAME = N'AdventureWorks-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
4) Vérifier le backup
5) Changer le Recovery model à Bulk-logged
La commande pour modifier le recovery model à Bulk-logged : USE [master]
GO
ALTER DATABASE [AdventureWorks]
SET RECOVERY BULK_LOGGED WITH NO_WAIT GO
6) Exécuter le Bulk-Insert USE [AdventureWorks]
GO
Créer la table test :
IF EXISTS (SELECT * FROM sys.objects WHERE object_id
= OBJECT_ID(N'[dbo].[test]') AND type in (N'U')) DROP TABLE [dbo].[test]
CREATE TABLE dbo.test (
NUM INT,
NOM NVARCHAR(10), FAB NVARCHAR(10) )
Éxécuter le bulk insert dans la table test : BULK INSERT dbo.test
FROM 'c:\sql\test.txt'
WITH (FIELDTERMINATOR = ',') 7) Remettre le Recovery model à Full
_____________________________________________________________________
2011 Hakim Benameurlaine 11
La commande pour modifier le recovery model à FULL:
USE [master]
GO
ALTER DATABASE [AdventureWorks]
SET RECOVERY FULL WITH NO_WAIT GO
8) Faire un backup différentiel
_____________________________________________________________________
2011 Hakim Benameurlaine 13
La commande pour faire un backup différentiel : BACKUP DATABASE [AdventureWorks]
TO [AW-Data]
WITH DIFFERENTIAL ,
DESCRIPTION = N'Instance de production', NOFORMAT, NOINIT,
NAME = N'AdventureWorks-Differential Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
_____________________________________________________________________
2011 Hakim Benameurlaine 15
9) Faire des transactions Créer la table vente : USE [AdventureWorks]
GO
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[ventes]') AND type in (N'U'))
DROP TABLE [dbo].[ventes]
CREATE TABLE dbo.ventes (
NUM_TR INT IDENTITY, MONTANT MONEY,
DATE_TR DATETIME )
Faire des transactions:
-- Faire des transactions
INSERT INTO dbo.ventes VALUES (80,GETDATE()) INSERT INTO dbo.ventes VALUES (20,GETDATE()) INSERT INTO dbo.ventes VALUES (38,GETDATE()) -- Mauvaise transaction
INSERT INTO dbo.ventes VALUES (49,GETDATE())
10) Faire un backup transaction log
On va faire un backup transaction log pour sauvegarder les transactions précédentes :
_____________________________________________________________________
2011 Hakim Benameurlaine 17
La commande pour faire un backup transaction log : -- Faire Transaction log backup
BACKUP LOG [AdventureWorks]
TO [AW-log]
WITH DESCRIPTION = N'Instance de production', FORMAT, INIT,
MEDIADESCRIPTION = N'AW-Media-Set', MEDIANAME = N'AW-Media',
NAME = N'AdventureWorks-Transaction Log Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
11) Ajouter un Filegroup
La commande qui ajoute le filegroup FINANCE:
USE [master]
GO
ALTER DATABASE [AdventureWorks]
ADD FILEGROUP [FINANCE]
GO
ALTER DATABASE [AdventureWorks]
ADD FILE
( NAME = N'Finance_Data',
FILENAME = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\DATA\Finance_Data.ndf' , SIZE = 3072KB , FILEGROWTH = 1024KB )
TO FILEGROUP [FINANCE]
GO
_____________________________________________________________________
2011 Hakim Benameurlaine 19
12) Mettre la table dbo.test dans le nouveau Filegroup
On va mettre la table ventes dans le nouveau filegroup FINANCE.
13) Faire un backup Filegroups
La commande pour faire un backup des filegroups : BACKUP DATABASE [AdventureWorks]
FILEGROUP = N'PRIMARY', FILEGROUP = N'FINANCE' TO [AW-FileGroups]
WITH DESCRIPTION = N'Instance de production', NOFORMAT, NOINIT,
NAME = N'AdventureWorks-Full Filegroup Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10
GO
_____________________________________________________________________
2011 Hakim Benameurlaine 21
1.2 RESTAURER
1) Supprimer la base de données
Afin de simuler un désastre on va supprimer la base de données AdventureWorks :
--Simuler un désastre USE [master]
GO
IF EXISTS (SELECT name FROM sys.databases
WHERE name = N'AdventureWorks') DROP DATABASE [AdventureWorks]
2) Restaurer le Full backup
_____________________________________________________________________
2011 Hakim Benameurlaine 23
La commande pour faire un restore avec l’option NORECOVERY:
RESTORE DATABASE [AdventureWorks]
FROM [AW-Data]
WITH FILE = 1, NORECOVERY, NOUNLOAD, STATS = 10 GO
RESTORE DATABASE [AdventureWorks]
FROM [AW-Data]
WITH FILE = 2, NORECOVERY, NOUNLOAD, STATS = 10 GO
Une fois le restore complété, il faut appliquer les transactions log : 3) Restaurer les transactions log
_____________________________________________________________________
2011 Hakim Benameurlaine 25
La commande pour faire un restore avec des transactions log : --Restaurer les Transactions log.
RESTORE LOG [AdventureWorks]
FROM [AW-log]
WITH FILE = 1, NOUNLOAD, STATS = 10, STOPAT = N'11/28/2009 17:23:57'
GO
Les données avant la restauration :
Les données après la restauration :
_____________________________________________________________________
2011 Hakim Benameurlaine 27
4) Filegroup restore
La commande pour faire un restore avec des filegroups:
RESTORE DATABASE [AdventureWorks]
FILE = N'AdventureWorks_Data', FILE = N'Finance_Data'
FROM [AW-FileGroups]
WITH FILE = 1, NOUNLOAD, STATS = 10 GO
1.3 BASE DE DONNÉS "SUSPECT"
Voici la procédure à appliquer sur une base de données FORMATION marquée "suspect" :
Étape 1 : Faire un reset du statut de la base de données : USE master
EXEC sp_resetstatus 'FORMATION'
Étape 2 : Mettre la base de données en mode EMERGENCY : ALTER DATABASE FORMATION SET EMERGENCY
Étape 3 : Vérifier l’intégrité de la base de données:
DBCC checkdb('FORMATION')
Étape 4 : Mettre la base de données en mode SINGLE_USER:
ALTER DATABASE FORMATION SET SINGLE_USER WITH ROLLBACK IMMEDIATE
Étape 5 : Vérifier l’intégrité de la base de données:
DBCC CheckDB ('FORMATION', REPAIR_ALLOW_DATA_LOSS) Étape 6 : Mettre la base de données en mode MULTI_USER :
ALTER DATABASE FORMATION SET MULTI_USER