我正在尝试创建一个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.
数据库 'xxxxx' 运行从版本 660 到 661 的升级步骤。
虽然我可以将数据库恢复到可用状态,但理想情况下,我希望将其完全编写脚本。这样做的想法是,我可以在桌面上运行备份脚本,然后在笔记本电脑上运行还原脚本,然后还原笔记本电脑上的数据库,以便我有同一数据库的工作副本,以便我需要远程工作时使用。
任何见解都会很棒,如果有人遇到并解决了同样的问题,那就更好了。
当我必须在还原脚本中设置显式 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