Sauvegarde et restauration des bases de données et journaux de transactions

Dans SMO, la classe Backup et la classe Restore sont des classes utilitaires qui fournissent les outils permettant d'accomplir les tâches spécifiques de sauvegarde et restauration. Un objet Backup représente une tâche de sauvegarde spécifique requise à la place d'un objet MicrosoftSQL Server sur l'instance de serveur.

En cas de perte ou d'endommagement des données, la sauvegarde doit être restaurée, en totalité ou partiellement. La restauration partielle utilise la collection FileGroupCollection pour segmenter les données à restaurer. Si la sauvegarde concerne un journal des transactions, les données peuvent être restaurées jusqu'à un point particulier dans le temps à l'aide de la propriété ToPointInTime de l'objet Restore. Les données peuvent également être validées à l'aide de la méthode SqlVerify. La procédure de sauvegarde recommandée consiste à vérifier l'intégrité de la sauvegarde en effectuant une opération de restauration et en vérifiant régulièrement les données de la base de données.

Comme pour l'objet Backup, il n'est pas nécessaire de créer l'objet Restore en utilisant une méthode Create parce qu'il ne représente pas d'objet sur l'instance de SQL Server. L'objet Restore est constitué des méthodes et propriétés utilisées pour restaurer une base de données.

Exemples

Pour utiliser un exemple de code fourni, vous devez sélectionner l'environnement, le modèle et le langage de programmation à utiliser pour créer votre application. Pour plus d'informations, consultez Procédure : créer un projet SMO Visual Basic dans Visual Studio .NET ou Procédure : créer un projet SMO Visual C# dans Visual Studio .NET.

Sauvegarde des bases de données et des journaux des transactions en Visual Basic

Cet exemple de code montre comment sauvegarder une base de données existante dans un fichier, puis comment la restaurer.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Reference the AdventureWorks database.
Dim db As Database
db = srv.Databases("AdventureWorks")
'Store the current recovery model in a variable.
Dim recoverymod As Integer
recoverymod = db.DatabaseOptions.RecoveryModel
'Define a Backup object variable. 
Dim bk As New Backup
'Specify the type of backup, the description, the name, and the database to be backed up.
bk.Action = BackupActionType.Database
bk.BackupSetDescription = "Full backup of Adventureworks"
bk.BackupSetName = "AdventureWorks Backup"
bk.Database = "AdventureWorks"
'Declare a BackupDeviceItem by supplying the backup device file name in the constructor, and the type of device is a file.
Dim bdi As BackupDeviceItem
bdi = New BackupDeviceItem("Test_Full_Backup1", DeviceType.File)
'Add the device to the Backup object.
bk.Devices.Add(bdi)
'Set the Incremental property to False to specify that this is a full database backup.
bk.Incremental = False
'Set the expiration date.
Dim backupdate As New Date
backupdate = New Date(2006, 10, 5)
bk.ExpirationDate = backupdate
'Specify that the log must be truncated after the backup is complete.
bk.LogTruncation = BackupTruncateLogType.Truncate
'Run SqlBackup to perform the full database backup on the instance of SQL Server.
bk.SqlBackup(srv)
'Inform the user that the backup has been completed.
Console.WriteLine("Full Backup complete.")
'Remove the backup device from the Backup object.
bk.Devices.Remove(bdi)
'Make a change to the database, in this case, add a table called test_table.
Dim t As Table
t = New Table(db, "test_table")
Dim c As Column
c = New Column(t, "col", DataType.Int)
t.Columns.Add(c)
t.Create()
'Create another file device for the differential backup and add the Backup object.
Dim bdid As BackupDeviceItem
bdid = New BackupDeviceItem("Test_Differential_Backup1", DeviceType.File)
'Add the device to the Backup object.
bk.Devices.Add(bdid)
'Set the Incremental property to True for a differential backup.
bk.Incremental = True
'Run SqlBackup to perform the incremental database backup on the instance of SQL Server.
bk.SqlBackup(srv)
'Inform the user that the differential backup is complete.
Console.WriteLine("Differential Backup complete.")
'Remove the device from the Backup object.
bk.Devices.Remove(bdid)
'Delete the AdventureWorks database before restoring it.
srv.Databases("AdventureWorks").Drop()
'Define a Restore object variable.
Dim rs As Restore
rs = New Restore
'Set the NoRecovery property to true, so the transactions are not recovered.
rs.NoRecovery = True
'Add the device that contains the full database backup to the Restore object.
rs.Devices.Add(bdi)
'Specify the database name.
rs.Database = "AdventureWorks"
'Restore the full database backup with no recovery.
rs.SqlRestore(srv)
'Inform the user that the Full Database Restore is complete.
Console.WriteLine("Full Database Restore complete.")
'Remove the device from the Restore object.
rs.Devices.Remove(bdi)
'Set te NoRecovery property to False.
rs.NoRecovery = False
'Add the device that contains the differential backup to the Restore object.
rs.Devices.Add(bdid)
'Restore the differential database backup with recovery.
rs.SqlRestore(srv)
'Inform the user that the differential database restore is complete.
Console.WriteLine("Differential Database Restore complete.")
'Remove the device.
rs.Devices.Remove(bdid)
'Set the database recovery mode back to its original value.
srv.Databases("AdventureWorks").DatabaseOptions.RecoveryModel = recoverymod
'Drop the table that was added.
srv.Databases("AdventureWorks").Tables("test_table").Drop()
srv.Databases("AdventureWorks").Alter()
'Remove the backup files from the hard disk.
My.Computer.FileSystem.DeleteFile("C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\Test_Full_Backup1")
My.Computer.FileSystem.DeleteFile("C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\Test_Differential_Backup1")

Sauvegarde des bases de données et des journaux des transactions en Visual C#

Cet exemple de code montre comment sauvegarder une base de données existante dans un fichier, puis comment la restaurer.

//Connect to the local, default instance of SQL Server. 
{ 
Server srv = default(Server); 
srv = new Server(); 
//Reference the AdventureWorks database. 
Database db = default(Database); 
db = srv.Databases("AdventureWorks"); 
//Store the current recovery model in a variable. 
int recoverymod = 0; 
recoverymod = db.DatabaseOptions.RecoveryModel; 
//Define a Backup object variable. 
Backup bk = new Backup(); 
//Specify the type of backup, the description, the name, and the database to be backed up. 
bk.Action = BackupActionType.Database; 
bk.BackupSetDescription = "Full backup of Adventureworks"; 
bk.BackupSetName = "AdventureWorks Backup"; 
bk.Database = "AdventureWorks"; 
//Declare a BackupDeviceItem by supplying the backup device file name in the constructor, and the type of device is a file. 
BackupDeviceItem bdi = default(BackupDeviceItem); 
bdi = new BackupDeviceItem("Test_Full_Backup1", DeviceType.File); 
//Add the device to the Backup object. 
bk.Devices.Add(bdi); 
//Set the Incremental property to False to specify that this is a full database backup. 
bk.Incremental = false; 
//Set the expiration date. 
System.DateTime backupdate = new System.DateTime(); 
backupdate = new System.DateTime(2006, 10, 5); 
bk.ExpirationDate = backupdate; 
//Specify that the log must be truncated after the backup is complete. 
bk.LogTruncation = BackupTruncateLogType.Truncate; 
//Run SqlBackup to perform the full database backup on the instance of SQL Server. 
bk.SqlBackup(srv); 
//Inform the user that the backup has been completed. 
Console.WriteLine("Full Backup complete."); 
//Remove the backup device from the Backup object. 
bk.Devices.Remove(bdi); 
//Make a change to the database, in this case, add a table called test_table. 
Table t = default(Table); 
t = new Table(db, "test_table"); 
Column c = default(Column); 
c = new Column(t, "col", DataType.Int); 
t.Columns.Add(c); 
t.Create(); 
//Create another file device for the differential backup and add the Backup object. 
BackupDeviceItem bdid = default(BackupDeviceItem); 
bdid = new BackupDeviceItem("Test_Differential_Backup1", DeviceType.File); 
//Add the device to the Backup object. 
bk.Devices.Add(bdid); 
//Set the Incremental property to True for a differential backup. 
bk.Incremental = true; 
//Run SqlBackup to perform the incremental database backup on the instance of SQL Server. 
bk.SqlBackup(srv); 
//Inform the user that the differential backup is complete. 
Console.WriteLine("Differential Backup complete."); 
//Remove the device from the Backup object. 
bk.Devices.Remove(bdid); 
//Delete the AdventureWorks database before restoring it. 
srv.Databases("AdventureWorks").Drop(); 
//Define a Restore object variable. 
Restore rs = default(Restore); 
rs = new Restore(); 
//Set the NoRecovery property to true, so the transactions are not recovered. 
rs.NoRecovery = true; 
//Add the device that contains the full database backup to the Restore object. 
rs.Devices.Add(bdi); 
//Specify the database name. 
rs.Database = "AdventureWorks"; 
//Restore the full database backup with no recovery. 
rs.SqlRestore(srv); 
//Inform the user that the Full Database Restore is complete. 
Console.WriteLine("Full Database Restore complete."); 
//Remove the device from the Restore object. 
rs.Devices.Remove(bdi); 
//Set te NoRecovery property to False. 
rs.NoRecovery = false; 
//Add the device that contains the differential backup to the Restore object. 
rs.Devices.Add(bdid); 
//Restore the differential database backup with recovery. 
rs.SqlRestore(srv); 
//Inform the user that the differential database restore is complete. 
Console.WriteLine("Differential Database Restore complete."); 
//Remove the device. 
rs.Devices.Remove(bdid); 
//Set the database recovery mode back to its original value. 
srv.Databases("AdventureWorks").DatabaseOptions.RecoveryModel = recoverymod; 
//Drop the table that was added. 
srv.Databases("AdventureWorks").Tables("test_table").Drop(); 
srv.Databases("AdventureWorks").Alter(); 
//Remove the backup files from the hard disk. 
My.Computer.FileSystem.DeleteFile("C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Backup\\Test_Full_Backup1"); 
My.Computer.FileSystem.DeleteFile("C:\\Program Files\\Microsoft SQL Server\\MSSQL.1\\MSSQL\\Backup\\Test_Differential_Backup1"); 
} 

Exécution des contrôles d'intégrité de la base de données en Visual Basic

SQL Server propose une vérification de l'intégrité des données. Cet exemple de code exécute une vérification de type cohérence de la base de données sur la base de données spécifiée. Dans cet exemple, la méthode CheckTables est utilisée, mais les méthodes CheckAllocations, CheckCatalog ou CheckIdentityValues peuvent être utilisées de la même façon.

[!REMARQUE]

L'objet StringCollection requiert une référence à l'espace de noms à l'aide de l'instruction imports System.Collections.Specialized.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Reference the AdventureWorks database.
Dim db As Database
db = srv.Databases("AdventureWorks")
'Note, to use the StringCollection type the System.Collections.Specialized system namespace must be included in the imports statements.
Dim sc As StringCollection
'Run the CheckTables method and display the results from the returned StringCollection variable.
sc = db.CheckTables(RepairType.None)
Dim c As Integer
For c = 0 To sc.Count - 1
    Console.WriteLine(sc.Item(c))
Next

Exécution des contrôles d'intégrité de la base de données en Visual C#

SQL Server propose une vérification de l'intégrité des données. Cet exemple de code exécute une vérification de type cohérence de la base de données sur la base de données spécifiée. Dans cet exemple, la méthode CheckTables est utilisée, mais les méthodes CheckAllocations, CheckCatalog ou CheckIdentityValues peuvent être utilisées de la même façon.

[!REMARQUE]

L'objet StringCollection requiert une référence à l'espace de noms à l'aide de l'instruction imports System.Collections.Specialized.

//Connect to the local, default instance of SQL Server. 
{ 
Server srv = default(Server); 
srv = new Server(); 
//Reference the AdventureWorks database. 
Database db = default(Database); 
db = srv.Databases("AdventureWorks"); 
//Note, to use the StringCollection type the System.Collections.Specialized system namespace must be included in the imports statements. 
StringCollection sc = default(StringCollection); 
//Run the CheckTables method and display the results from the returned StringCollection variable. 
sc = db.CheckTables(RepairType.None); 
int c = 0; 
for (c = 0; c <= sc.Count - 1; c++) { 
    Console.WriteLine(sc.Item(c)); 
} 
}