我一直在创建一些power shell脚本,而且我主要使用Invoke-Sqlcmd作为查询数据库或输入.sql文件的方法,但是我在使用包含访问权限方面遇到了一些问题和杀戮过程。
我一直在使用SMO杀死进程
$SQlSvr1 = New-Object Microsoft.SqlServer.Management.Smo.Server $serverInstance
$SQlSvr1.KillAllprocesses($databaseMain)
然后使用Invoke-Sqlcmd运行我的进程,它一直运行良好,直到我开始接收诸如
之类的错误A transport-level error has occurred when sending the request to the server. (provider: TCP Provider, error: 0 - An existing connection was forcibly closed by the remote host.)
如果我没有杀死它返回的过程
由于数据库正在使用,无法获得独占访问权。
所以我的问题是,重建或保持稳定连接的最佳流程是什么?我不会将所有内容更改为SMO或SQLConnection,或者是否有办法使用Invoke-Sqlcmd建立单个连接,但是每次使用调用时都会杀死/重新排队。
有问题的脚本首先备份我的数据库,使用try / catch中的补丁脚本运行和更新如果脚本将在catch中备份错误,除了kill进程之外都使用Invoke-Sqlcmd。
答案 0 :(得分:4)
这三种都有它们的用途。
我喜欢invoke-sqlcmd
快速&脏查询或其他文件中已存在的查询(因为您可以传入文件参数)。不过,我从来没有处理过引发这个问题的错误。
我使用SQLConnection
& SQLCommand
当我需要更多安全参数化查询时,或者想要保持更持久的连接时 - 当我快速连续运行大量查询时 - 这样我就不会对服务器进行锤击在很短的时间内有很多联系。