2016-03-03 92 views
0

作为我自动化过程的一部分,我需要附加一些脏数据库。我说脏,因为它们来自磁盘卷的时间点快照。当拍摄快照时,数据库仍在积极撰写。Powershell无法附加SQL Server数据库

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

我试过两种不同的方法来将数据库与Powershell连接起来。

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

这两种方法都可以成功地运行数据库B,但数据库A失败。

该错误消息我得到很烂......

异常调用 “AttachDatabase” 和 “4” 的说法(S): “连接数据库失败,服务器 'DB01'”
在行:17焦炭:1
+ $ srv.AttachDatabase( “databaseA”,$ DBFILES, “SA”, “无”)
+ ~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo:NotSpecified:(:) [],ParentContainsErrorRecordException
+ FullyQualifiedErrorId:FailedOperationE xception

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

我很困惑,为什么管理工作室工作,我的脚本没有。这也令人讨厌,脚本没有提供更好的错误信息。

有没有其他人遇到过这个问题或有任何想法如何我可以得到一些更好的错误反馈?

+0

您的powershell命令是否仅针对这些dbs或任何/所有dbs失败?我建议重试你的命令并捕获一个分析器跟踪来查看它是否连接到服务器,以及正在执行什么值。如果您发布精确的PowerShell命令,它也会有所帮助。 – Greg

+0

这只是失败的大事件。 – wimnat

+0

好的,当你运行profiler时你发现了什么? – Greg

回答

0

原来是一个纯粹的超时问题。

当我运行带有-Timeout值为0的Invoke-Sqlcmd的东西开始工作。

我不确定为什么Management Studio可以在大约5分钟内连接数据库,但使用Invoke-Sqlcmd时需要很多时间。尽管如此,它的工作。

相关问题