我已經閱讀了十幾個不同的博客,並閱讀了msdn示例,他們只是不適合我。SMO:恢復到不同的數據庫
最終,我試圖做的是將數據庫從我們的生產實例自動移動到我們的開發實例或其他方向。
我採取的方法是這樣的:
- 備份/
- 分離臨時DB
- 複製MDF和LDF文件恢復到一個臨時DB到其他實例
- 重新掛接。
我被困在1,我不明白爲什麼。我讀過的所有東西都聲稱這應該是有效的。
注意:我已將dbName
設置爲要恢復到的分貝。我還設置了restore.Database = dbName
,其中restore
是smo
命名空間中的Restore
類的實例。
mdf.LogicalFileName = dbName;
mdf.PhysicalFileName = String.Format(@"{0}\{1}.mdf", server.Information.MasterDBPath, dbName);
ldf.LogicalFileName = dbName + "_log";
ldf.PhysicalFileName = String.Format(@"{0}\{1}.ldf", server.Information.MasterDBPath, dbName);
restore.RelocateFiles.Add(mdf);
restore.RelocateFiles.Add(ldf);
restore.SqlRestore(server);
這是我收到的例外:
文件 'd:\ MSSQL.MIQ_Dev \ MSSQL.2 \ MSSQL \ DATA \ MIQDesign2Detach.mdf' 不能被覆蓋。它正在被數據庫'MIQDesignTest2'使用。
文件'MIQDesign'無法恢復爲'D:\ MSSQL.MIQ_Dev \ MSSQL.2 \ MSSQL \ Data \ MIQDesign2Detach.mdf'。使用WITH MOVE標識文件的有效位置。
文件'D:\ MSSQL.MIQ_Dev \ MSSQL.2 \ MSSQL \ Data \ MIQDesign2Detach.ldf'不能被覆蓋。它正在被數據庫'MIQDesignTest2'使用。
文件'MIQDesign_log'無法恢復到'D:\ MSSQL.MIQ_Dev \ MSSQL.2 \ MSSQL \ Data \ MIQDesign2Detach.ldf'。使用WITH MOVE標識文件的有效位置。
規劃RESTORE語句時發現問題。先前的消息提供了細節
RESTORE DATABASE正在異常終止。
爲什麼這會試圖覆蓋原來的mdf?是不是RelocateFiles
的東西應該指定,你希望它被保存到不同的物理文件名?
謝謝伯博爾,我從來沒有能夠解決這個問題,因爲我已經移動到更大更好的東西,但我一定會記住這一點,如果我發現自己通過SMO再次自動化的事情: ) – Fred 2010-11-25 21:27:17
死鏈接。這是LINK ONLY答案的問題。如果您不打算複製該信息,則應該在答案中發佈信息,並將該信息與「深入」建議關聯起來。 – StarPilot 2014-07-14 21:53:53