【问题标题】:Powershell failing to attach SQL Server databasePowershell 无法附加 SQL Server 数据库
【发布时间】:2016-03-16 18:54:17
【问题描述】:

作为自动化过程的一部分,我需要附加一些脏数据库。我说脏是因为它们来自磁盘卷的时间点快照。拍摄快照时,数据库仍在主动写入。

有两个数据库。数据库 A 的 mdf 大小为 131GB。 databaseB 的 mdf 大小为 3.4GB。

我尝试了两种不同的方法来使用 Powershell 附加数据库。

第一个使用Invoke-Sqlcmd,第二个使用SQL SMO对象并调用AttachDatabase

这两种方法都对 databaseB 成功,但对 databaseA 失败。

我收到的错误消息很糟糕......

使用“4”参数调用“AttachDatabase”时出现异常:“服务器“DB01”的附加数据库失败。”
在 line:17 char:1
+ $srv.AttachDatabase("databaseA", $dbfiles, "sa", "None")
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : FailedOperationException

如果我进入 SQL Server Management Studio 而不是运行脚本,只需右键单击并以这种方式附加数据库,数据库将在大约 20 到 30 秒内毫无问题地附加。

我对为什么 Management Studio 有效而我的脚本无效感到困惑。脚本没有提供更好的错误消息也很烦人。

有没有其他人遇到过这个问题或知道如何获得更好的错误反馈?

【问题讨论】:

  • 您的 powershell 命令是否仅针对这些 dbs 或任何/所有 dbs 失败?我建议重试您的命令并捕获分析器跟踪以查看它是否甚至命中服务器,以及正在执行哪些值。如果您发布确切的 powershell 命令也会有所帮助。
  • 这只是失败的大的。
  • 好的,你在运行 profiler 时发现了什么?

标签: sql-server powershell


【解决方案1】:

原来是纯粹的超时问题。

当我以 -Timeout 值为 0 运行 Invoke-Sqlcmd 时,事情开始工作了。

我不确定为什么 Management Studio 可以在大约 5 分钟内附加数据库,但在使用 Invoke-Sqlcmd 时需要更长的时间。尽管如此,它仍然有效。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-08
    • 2012-07-21
    • 2012-04-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 1970-01-01
    相关资源
    最近更新 更多