在Powershell中从文件运行SQL脚本有什么限制?

时间:2013-05-07 13:05:16

标签: sql-server-2008 powershell scripting

我有一个相当复杂的SQL脚本,可以做几件事:

  • 删除现有数据库
  • 从备份重新加载数据库
  • 设置权限
  • 其他一些其他特定于db的任务

我已将此保存为.sql文件,以实现移动性和易用性,但我想将其合并到Powershell脚本中,以使其更简单地运行(并封装一些其他需要的任务)围绕同一过程完成)。以下是我在Powershell中为脚本提供的一些代码:

add-pssnapin sqlservercmdletsnapin100
invoke-sqlcmd -inputfile "D:\Scripts\loaddatabase31_Loadtest.sql" -serverinstance "PerfSQL02" -hostname "PerfSQL02"

假设serverinstance,inputfile和hostname存在并正确放入。

我正在恢复的数据库是几百GB,因此实际的丢弃和恢复过程大约需要20分钟。现在,当我尝试运行该脚本时,我收到以下错误(它是从同一网络中的工作站运行但在不同的域上运行):

invoke-sqlcmd : Timeout expired.  The timeout period elapsed prior to completion of the operation or the server is not responding.
At line:2 char:1

我已经尝试在invoke-sqlcmd上使用-connectiontimeout开关,但这似乎无法解决此问题(所以它可能不会在连接时超时)。我见过的大多数通过Powershell运行SQL的例子都不使用文件,而是在脚本中定义SQL。由于运行所需的SQL的复杂性,我不想这样做(因为它正在删除并恢复数据库,除非我使用其中一个系统数据库,否则我无法将所有这些包装在SP中)

任何人都有可能导致超时的一些想法? invoke-sqlcmd无法正常使用文件吗?

1 个答案:

答案 0 :(得分:4)

你不想要-connectiontimeout,你可能想要-QueryTimeout

http://technet.microsoft.com/en-us/library/cc281720.aspx