Я создавал несколько сценариев оболочки оболочки, и Iv'e в основном использовал Invoke-Sqlcmd в качестве способа запроса базы данных или входных файлов .sql, но я были проблемы с доступом к процессам доступа и убийства.Что лучше использовать Invoke-SQLCMD, SMO или SQLConnection
Iv'e использует SMO, чтобы убить процессы
$SQlSvr1 = New-Object Microsoft.SqlServer.Management.Smo.Server $serverInstance
$SQlSvr1.KillAllprocesses($databaseMain)
, а затем с помощью Invoke-Sqlcmd запускать мои процессы, все это работает хорошо, пока я не начал получать erorrs, такие как
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.)
и если я не убил процесс, он возвращает
Исключительный доступ не может быть получен потому, что база данных i n использование.
Так что мой вопрос, что это лучший способ, чтобы восстановить или сохранить стабильное соединение я мина не меняется все, чтобы SMO или SQLConnection или, если есть способ сделать одно соединение с использованием Invoke-Sqlcmd, но kill/requeue каждый раз, когда я использую invoke.
Сценарий, о котором идет речь, сначала создает резервные копии моих баз данных, запускает и обновляет их с помощью патч-скриптов внутри try/catch. В этом случае скрипт будет делать резервную копию внутри catch, используя Invoke-Sqlcmd, за исключением процессов kill.
90% того, над чем я работаю, основано на файлах сценариев патчей, поэтому я бы предположил, что использование invoke-sqlcmd было бы лучшим для этого использования? – Lewis
Если вам просто нужно бросить кучу предварительно написанных файлов сценариев на сервере, я бы начал с 'invoke-sqlcmd' точно. Возможно, вы тоже можете это сделать с SMO, но, как я уже сказал, у меня нет опыта. – alroc