SMO学习笔记(二)——还原(恢复)篇之完整恢复
SQLSERVER2005恢复介绍:
三种恢复模式(一).简单恢复模式
事务日志被自动截断,不能使用日志文件进行恢复。
(二).完整恢复模式
保留所有操作的完整事务日志。
(三).大容量日志恢复模式
简要记录大容量操作(索引创建和大容量加载)的日志,完整记录其它事务的日志。
——摘自SQL SERVER 2005 数据备份与恢复 Microsoft TechNet
SQL Server Management Studio演示完整备份:
1.登录的步骤就省略了,选择任务:
2.这里指定数据库名,然后选择源设备
3.选择源设备后面的按钮,出现如下对话框
4.选择备份文件
5.选择完毕之后出现如下界面,选中复选框,这里可能出来多条,可以根据备份的时候不同还原不同时的备份。
6.这一步得注意了,如果数据库存在的话,需要勾上这个选项
7.确定,还原成功
SMO完整恢复:
/// <summary>
/// 恢复该数据库
/// </summary>
/// <param name="Connection"></param>
public static void DatabaseRestores(string SqlSqlConnectionString)
{
using (SqlConnection Connection = new SqlConnection(SqlSqlConnectionString))
{
Connection.Open();
Server server = new Server(new ServerConnection(Connection));
Database currentDb = server.Databases[SmoParm.DataBaseName];
//看是否数据库已经存在
if (currentDb != null)
{
Connection.ChangeDatabase("test");
//Stop all processes running on the DataBase database
server.KillAllProcesses("test");
}
BackupDeviceItem bdi = new BackupDeviceItem(string.Format(@"{0}\{1}.{2}", "D:", "DB_BACK","bak"), DeviceType.File);
Restore res = new Restore();
res.Devices.Add(bdi);
res.NoRecovery = false;
res.ReplaceDatabase = true;
res.Database = "test";
res.SqlRestore(server);
}
}
/// 恢复该数据库
/// </summary>
/// <param name="Connection"></param>
public static void DatabaseRestores(string SqlSqlConnectionString)
{
using (SqlConnection Connection = new SqlConnection(SqlSqlConnectionString))
{
Connection.Open();
Server server = new Server(new ServerConnection(Connection));
Database currentDb = server.Databases[SmoParm.DataBaseName];
//看是否数据库已经存在
if (currentDb != null)
{
Connection.ChangeDatabase("test");
//Stop all processes running on the DataBase database
server.KillAllProcesses("test");
}
BackupDeviceItem bdi = new BackupDeviceItem(string.Format(@"{0}\{1}.{2}", "D:", "DB_BACK","bak"), DeviceType.File);
Restore res = new Restore();
res.Devices.Add(bdi);
res.NoRecovery = false;
res.ReplaceDatabase = true;
res.Database = "test";
res.SqlRestore(server);
}
}
对照SQL Server Management Studio相关备份属性设置可以得到更多启示,这里只是做了简单的例子。