[英]SMO restore from networked SQLServer never finishes (called from C#)
我嘗試將數據庫從聯網的SQLServer復制到本地SQLExpress:
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.KillAllProcesses(databaseName);
但沒有結果。
在C#級別不會引發任何錯誤。
您說它永遠不會結束,您看到的代碼完成了,但是數據庫陷入了“還原”模式嗎? 如果是這樣,我認為您想通過恢復進行還原,否則您將使數據庫無法正常運行。 嘗試將NoRecovery設置為false而不是true:
res.NoRecovery = false;
從這里
回滾未提交的事務,使數據庫可供使用。 無法還原其他事務日志。 ( 恢復恢復 )
恢復數據庫。 此選項等效於Transact-SQL RESTORE語句中的RECOVERY選項。
僅當您沒有要還原的日志文件時,才選擇此選項。
使數據庫保持不可操作狀態,並且不回滾未提交的事務。 可以還原其他事務日志。 ( 恢復無恢復 )
使數據庫處於未恢復狀態。 此選項等效於在Transact-SQL RESTORE語句中使用NORECOVERY選項。
選擇此選項時,“保留復制設置”選項不可用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.