Powershell SQL Server 数据库还原(使用 CDC)



我正在尝试创建一个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_database触发"下降"。返回的错误为 15517:"无法作为数据库主体执行,因为主体"dbo"不存在,无法模拟这种类型的主体,或者您没有权限"*

再往下一点...

*数据库已脱机。请参阅 SQL Server 联机丛书中的主题MSSQL_ENG003165。

再往下...

将数据库"xxxxx"从版本 655 转换为当前版本 661.
数据库 'xxxxx' 运行从版本 655 到版本 660

.

当我必须在还原脚本中设置显式 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

最新更新