2012-08-13 157 views
1

我想創建一個Powershell腳本來從我的桌面恢復數據庫到我的筆記本電腦。我有一個創建備份文件的腳本,幾乎使恢復腳本可以工作,除了我使用啓用CDC的數據庫時發生的奇怪錯誤。我最終得到的是一個離線單用戶數據庫。我必須將其重新聯機並手動將其更改回多用戶。下面是我的PowerShell代碼中的相關位...Powershell SQL Server數據庫恢復(與CDC)

$instance = "(local)" 
$server = New-Object Microsoft.SqlServer.Management.Smo.Server $instance 

$restore = New-Object Microsoft.SqlServer.Management.Smo.Restore 
$restore.Action = "Database" 
$restore.Database = $dbname 
$restore.NoRecovery = $false 
$restore.ReplaceDatabase = $true 
$restore.Devices.AddDevice($filename, "File") 
$restore.SqlRestore($server) 

我得到一個錯誤信息說...

* System.Data.SqlClient.SqlException:無法更新元數據指示數據庫xxxxx未啓用更改數據捕獲。執行命令'[sys]。[sp_MScdc_ddl_database triggers'drop''時發生故障。錯誤返回15517:「無法執行作爲數據庫主要因爲主體‘DBO’不存在,這種類型的主體不能被冒充,或者您沒有權限」 *

和位進一步下跌...

*數據庫已離線。請參閱SQL Server聯機叢書中的主題MSSQL_ENG003165。*

進一步下跌...

轉換數據庫 '爲XXXXX' 從655版本升級到當前版本661
數據庫 '爲XXXXX' 運行從升級版655步版本660
數據庫「爲XXXXX」運行從660版本升級步驟661

雖然我可以得到數據庫恢復到一個useabl我希望完全腳本化。這樣做的想法是,我可以在桌面上運行備份腳本,然後在筆記本電腦上運行恢復腳本,然後在我的筆記本電腦上恢復數據庫,以便在需要遠程工作時擁有相同數據庫的工作副本。

如果有人遇到並解決了同樣的問題,任何見解都會很棒,甚至更好。

+1

我認爲這是一個固定在最近的CU的錯誤。 – usr 2012-08-13 23:09:40

+0

謝謝,我不熟悉CU。它代表什麼,以及如何獲得錯誤修復?我假設U代表更新。 – 2012-08-13 23:17:34

+0

搜索累積更新。我現在似乎無法找到相關的一個。如果可以,只需安裝最新的一個。 – usr 2012-08-13 23:25:41

回答

2

當我不得不設置一個恢復腳本明確的疾病預防控制中心的設置,我不喜歡的東西:

$script_lines = $restore.script($server) 
    $script_lines += ', keep_cdc' 
    $script = '' 
    foreach ($line in $script_lines) { 
      $script += $line 
    } 

    $script 
    invoke-sqlcmd -ServerInstance $server.name -Query $script -QueryTimeout 65535 
+0

它經過一些小的修改後工作。我必須使用master數據庫執行腳本。我有這樣的... $ masterDatabase = $ server.Databases | Where-Object {$ _。Name -eq「master」} ...然後執行腳本,像這樣... $ masterDatabase.ExecuteNonQuery($ script) – 2012-08-15 13:21:56

相關問題