【问题标题】:Powershell SQL Server database restore (with CDC)Powershell SQL Server 数据库还原(使用 CDC)
【发布时间】:2012-08-13 22:57:25
【问题描述】:

我正在尝试创建一个 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: 'Cannot execute as the database principal because the principal "dbo" 不存在,这种类型的主体不能被模拟,或者你没有权限'*

再往下一点...

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

再往下……

正在将数据库“xxxxx”从版本 655 转换为当前版本 661。
数据库“xxxxx”正在运行从版本 655 到版本 660 的升级步骤。
数据库“xxxxx”正在运行从版本 660 到 661。

虽然我可以将数据库恢复到可用状态,但理想情况下我希望将其完全编写脚本。这样做的想法是,我可以在我的桌面上运行备份脚本,然后在我的笔记本电脑上运行恢复脚本,然后在我的笔记本电脑上恢复数据库,这样当我需要远程工作时,我就有了同一个数据库的工作副本.

任何见解都会很棒,如果有人遇到并解决了同样的问题,那就更好了。

【问题讨论】:

  • 我认为这是一个在最近的 CU 中修复的错误。
  • 谢谢,我对 CU 不熟悉。它代表什么以及如何修复错误?我假设 U 代表更新。
  • 搜索累积更新。我现在似乎找不到相关的。如果可以,只需安装最新的。
  • 我在还原类上看到了 KeepReplication 属性,您可以尝试将其设置为 false msdn.microsoft.com/en-us/library/…
  • 我申请了 CU#14 还是有问题

标签: sql-server powershell database-restore


【解决方案1】:

当我必须在恢复脚本中设置明确的 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

【讨论】:

  • 经过一些小的修改后它工作了。我必须使用主数据库执行脚本。我是这样的... $masterDatabase = $server.Databases | Where-Object { $_.Name -eq "master" } ...然后我像这样执行脚本... $masterDatabase.ExecuteNonQuery($script)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-22
  • 1970-01-01
  • 2020-05-06
  • 2010-12-17
  • 1970-01-01
  • 1970-01-01
  • 2019-05-28
相关资源
最近更新 更多