作为自动化过程的一部分,我需要附加一些脏数据库。我说脏,因为它们来自磁盘卷的时间点快照。拍摄快照时,数据库仍在积极地写入。
有两个数据库。 databaseA的mdf大小为131GB。 databaseB的mdf大小为3.4GB。
我尝试了两种不同的方法来使用Powershell附加数据库。
第一个是使用Invoke-Sqlcmd
,第二个是使用SQL SMO对象并调用AttachDatabase
。
两种方法对数据库B成功运行,但对于数据库A则失败。
错误消息我很糟糕......
使用“4”参数调用“AttachDatabase”的异常:“为服务器'DB01'附加数据库失败'。”
在行:17 char:1
+ $ srv.AttachDatabase(“databaseA”,$ dbfiles,“sa”,“None”)
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~
+ CategoryInfo:NotSpecified:(:) [],ParentContainsErrorRecordException
+ FullyQualifiedErrorId:FailedOperationException
如果我进入SQL Server Management Studio而不是运行脚本,只需右键单击并以这种方式附加数据库,数据库将在大约20到30秒内无问题地附加。
我很困惑为什么Management Studio可以运行而我的脚本没有。令人讨厌的是脚本没有提供更好的错误信息。
是否有其他人遇到过这个问题,或者知道如何才能获得更好的错误反馈?
答案 0 :(得分:0)
原来这是一个纯粹的超时问题。
当我使用-Timeout值为0运行Invoke-Sqlcmd时,事情开始起作用了。
我不确定为什么Management Studio可以在大约5分钟内附加数据库,但使用Invoke-Sqlcmd需要更长时间。尽管如此,它还是有效的。