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_database triggers 'drop'' 时发生故障。返回的错误为 15517:'无法作为数据库主体执行,因为主体“dbo”不存在,无法模拟此类主体,或者您没有权限'*

再往下一点...

*数据库已离线。请参阅 SQL Server 联机丛书中的主题 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 回答