1

デスクトップからラップトップにデータベースを復元するための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へのアップグレードステップを実行しています。

データベースを使用可能な状態に戻すことはできますが、理想的には完全にスクリプト化したいと思います。これは、デスクトップでバックアップスクリプトを実行してから、ラップトップで復元スクリプトを実行できるという考え方です。これにより、ラップトップでデータベースが復元されるため、リモートで作業する必要がある場合に備えて、同じデータベースの作業コピーを用意できます。 。

誰かが同じ問題に出くわして解決した場合は、どんな洞察も素晴らしいでしょう。

4

1 に答える 1

3

復元スクリプトで明示的な CDC 設定を設定する必要があったときは、次のようにしました。

    $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
于 2012-08-14T18:06:50.003 に答える