我有一个相当复杂的SQL脚本,可以做几件事:
我已将此保存为.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无法正常使用文件吗?
答案 0 :(得分:4)
你不想要-connectiontimeout,你可能想要-QueryTimeout