デスクトップからラップトップにデータベースを復元するためのPowershellスクリプトを作成しようとしています。バックアップファイルを作成するスクリプトがあり、CDC対応データベースで発生する奇妙なエラーを除けば、復元スクリプトがほぼ機能しています。最終的には、オフラインのシングルユーザーデータベースになります。オンラインに戻し、手動でマルチユーザーに戻す必要があります。これが私のPowerShellコードの関連ビットです...
$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_databasetriggers'drop''の実行中にエラーが発生しました。返されたエラーは15517でした:'プリンシパル"dbo"が存在しないか、このタイプのプリンシパルを偽装できないか、権限がないため、データベースプリンシパルとして実行できません' *
そしてもう少し下に..。
*データベースはオフラインのままです。SQL ServerBooksOnlineのトピックMSSQL_ENG003165を参照してください。*
さらに下に..。
データベース「xxxxx」をバージョン655から現在のバージョン661に変換しています。データベース「xxxxx」はバージョン655
からバージョン660へのアップグレードステップを実行しています。
データベース「xxxxx」はバージョン660から661へのアップグレードステップを実行しています。
データベースを使用可能な状態に戻すことはできますが、理想的には完全にスクリプト化したいと思います。これは、デスクトップでバックアップスクリプトを実行してから、ラップトップで復元スクリプトを実行できるという考え方です。これにより、ラップトップでデータベースが復元されるため、リモートで作業する必要がある場合に備えて、同じデータベースの作業コピーを用意できます。 。
誰かが同じ問題に出くわして解決した場合は、どんな洞察も素晴らしいでしょう。