SQL Server管理对象
2010-06-16 15:43:49 来源:WEB开发网恢复数据库
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。
本文配套源码
- ››sql server自动生成批量执行SQL脚本的批处理
- ››sql server 2008亿万数据性能优化
- ››SQL Server 2008清空数据库日志方法
- ››sqlserver安装和简单的使用
- ››SQL Sever 2008 R2 数据库管理
- ››SQL SERVER无法安装成功,sqlstp.log文件提示[未发...
- ››Sql Server中通过父记录查找出所有关联的子记录
- ››SqlServer触发器、存储过程和函数
- ››SQL Server 中的事务(含义,属性,管理)
- ››Sqlite数据库插入和读取图片数据
- ››Sql server 2005拒绝了对对象 'xx表' (数...
- ››Sql server 2005拒绝了对对象 'xx表' (数...
更多精彩
赞助商链接