WEB开发网
开发学院数据库MSSQL Server SQL Server管理对象 阅读

SQL Server管理对象

 2010-06-16 15:43:49 来源:WEB开发网   
核心提示:恢复数据库SMO 提供了一个 Restore 类,该类可用于从文件或其他备份设备中恢复数据库,SQL Server管理对象(6),在示例应用程序中,我将恢复刚刚备份好的文件,他还经常在 VSLive 之类的行业会议上发表演讲,如果要与 John 联系,过程差不多,请注意

恢复数据库

SMO 提供了一个 Restore 类,该类可用于从文件或其他备份设备中恢复数据库。在示例应用程序中,我将恢复刚刚备份好的文件,过程差不多。请注意,我并不将文件恢复至备份该文件的数据库,而是用新的文件名和新的逻辑名称来恢复此数据库。实际上,这是使用备份方法创建一个数据库副本。当然,您也可以选择在现有数据库的基础上恢复该数据库,这一过程非常方便。

图 9 所示代码显示了我在示例应用程序中恢复数据库所使用的 RestoreDB 方法。我的第一步是创建一个 Restore 类的实例,然后设置将要恢复的备份文件的名称。

Figure9恢复数据库

public void RestoreDB(string databaseName)
{
  Restore restore = new Restore();
  string fileName = string.Format(“{0}{1}.bak”,
    testFolder, databaseName);
  restore.Devices.Add(new BackupDeviceItem(fileName, DeviceType.File));
  // Just give it a new name
  string destinationDatabaseName =
    string.Format(“{0}_newly_restored”, databaseName);
  // Go grab the current database’s logical names for the data
  // and log files. For this example, we assume there are 1 for each.
  Database currentDatabase = server.Databases[databaseName];
  string currentLogicalData =
    currentDatabase.FileGroups[0].Files[0].Name;
  string currentLogicalLog = currentDatabase.LogFiles[0].Name;
  // Now relocate the data and log files
  RelocateFile reloData =
    new RelocateFile(currentLogicalData,
    string.Format(@”{0}{1}.mdf”, testFolder,
      destinationDatabaseName));
  RelocateFile reloLog =
    new RelocateFile(currentLogicalLog,
    string.Format(@”{0}{1}_Log.ldf”, testFolder,
      destinationDatabaseName));
  restore.RelocateFiles.Add(reloData);
  restore.RelocateFiles.Add(reloLog);
  restore.Database = destinationDatabaseName;
  restore.ReplaceDatabase = true;
  restore.PercentCompleteNotification = 10;
  restore.PercentComplete += restore_PercentComplete;
  restore.Complete += restore_Complete;
  restore.SqlRestore(server);
}

第二步,我为将要恢复的数据库创建一个新的名称 (Northwind_newly_restored),然后从 FileGroups 和 Files 集合中获取逻辑数据和日志文件的名称。我需要用这些名称来将备份的物理文件重新定位至新的名称(因为我要将此数据库恢复为独立的新数据库)。随后我将一个 RelocateFile 类的实例(重新定位的每个文件都有一个)添加到恢复对象的 RelocateFiles 集合。

我设置数据库的名称以进行恢复,并指示 SMO,如果已经存在同名的数据库,则替换现有的数据库。因为我希望 ProgressBar 显示恢复操作的进度,因此相应设置了 PercentComplete 和 Complete 事件处理程序。

验证数据库备份

如果在数据库已经损坏的情况下进行备份,并无太大好处。因此验证备份是一个好主意,且验证方法很简单,只需要创建一个 Restore 类的实例,将 DeviceType 设置为相应的介质,添加设备,然后执行 SqlVerify 方法即可。它将返回一个 Boolean 值,指示备份是否通过验证。以下代码演示了如何执行此验证:

Restore restore = new Restore();
restore.DeviceType = DeviceType.File;
restore.Devices.Add(@”c:MySMOTest.bak”);
boolean verified = restore.SqlVerify(server,out msg);

结束语

SMO 使在.NET 代码中执行数据库管理操作变得简单。由于可用 T-SQL 直接在数据库上执行所有这些任务,或者通过 SQL Server Management Studio 执行所有这些任务,因此能够使用 SMO 便意味着可以非常灵活地在 .NET 应用程序中包括这些类型的操作。事实上,SQL Server Management Studio 依赖 SMO 执行其大部分管理任务。

请将您想向 John 询问的问题和提出的意见发送至 mmdata@microsoft.com.

John Papa是一名使用 Microsoft .NET 技术的专业顾问、培训师和导师。作为一名 Microsoft C# MVP,他撰写过多篇有关体系结构和数据访问技术方面的文章和书籍,这些技术包括 ADO.NET、XML 和 SQL Server。他还经常在 VSLive 之类的行业会议上发表演讲。如果要与 John 联系,请访问 www.johnpapa.net。

本文配套源码

上一页  1 2 3 4 5 6 

Tags:SQL Server 管理

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接