从联网的SQLServer进行SMO还原永远不会完成(从C#调用)
我尝试将数据库从网络SQLServer复制到本地SQLExpress:从联网的SQLServer进行SMO还原永远不会完成(从C#调用),c#,smo,database-restore,C#,Smo,Database Restore,我尝试将数据库从网络SQLServer复制到本地SQLExpress: private void DoRestore() { if (!File.Exists(fileNach)) { MessageBox.Show("Restore gescheitert " + fileNach); return; } Restore res = new Restore();
private void DoRestore()
{
if (!File.Exists(fileNach))
{
MessageBox.Show("Restore gescheitert " + fileNach);
return;
}
Restore res = new Restore();
Server srv = new Server(Environment.MachineName.ToString()+@"\SQLEXPRESS");
//MessageBox.Show("Ziel Server :"+srv.Name);
try
{
string fileName = @fileNach;
string databaseName = "Outdoor";
srv.KillAllProcesses(databaseName);
res.Database = databaseName;
res.Action = RestoreActionType.Database;
res.Devices.AddDevice(fileName, DeviceType.File);
res.ReplaceDatabase = true;
res.NoRecovery = true;
string odb;
string odblog;
odb = @"C:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Outdoor.mdf";
odblog = @"C:\Program Files (x86)\Microsoft SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\Outdoor.ldf";
res.RelocateFiles.Add(new RelocateFile("Outdoor", odb));
res.RelocateFiles.Add(new RelocateFile("Outdoor_Log", odblog));
// restore starten
res.SqlRestore(srv);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
这段代码在SQLExpress上启动一个还原过程,但从未结束。mdf和日志文件在目标目录中创建,但还原未完成
我还尝试了srv.killallprocesss(databaseName)代码>但没有结果
在C#级没有出现错误。你说它永远不会结束,你看到的是你的代码完成了,但数据库仍停留在“恢复”模式吗?如果是这样,我认为您希望使用恢复进行恢复,否则您将使数据库无法运行。尝试将NoRecovery设置为false而不是true:
res.NoRecovery = false;
从
通过回滚未提交的
交易。无法还原其他事务日志。
(恢复后恢复)
恢复数据库。此选项相当于恢复
Transact-SQL还原语句中的选项
仅当没有要删除的日志文件时,才选择此选项
恢复
使数据库保持非操作状态,并且不要回滚
未提交的交易。可以创建其他事务日志
恢复(使用NORECOVERY恢复)
使数据库处于未恢复状态。这个选项是
相当于在Transact-SQL还原中使用NORECOVERY选项
声明
选择此选项时,将保留复制设置
选项不可用