2013-03-05 2 views
3

Я создавал несколько сценариев оболочки оболочки, и 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.

ответ

2

Все три имеют свои применения.

Мне нравится invoke-sqlcmd для быстрого & грязных запросов или запросов, которые уже существуют в других файлах (так как вы можете передать параметр файла). Мне никогда не приходилось иметь дело с ошибкой, которая у вас была, что вызвало этот вопрос.

Я использую SQLConnection & SQLCommand, когда мне нужно больше безопасности - параметризованные запросы, например - или хотите поддерживать более стойкое соединение - когда я бегу много запросов в быстрой последовательности - так что я не молоток сервер с большим количеством подключений за короткий промежуток времени.

SMO Я не использовал, но я хотел бы зарезервировать, что для управления в «системе» уровень - рабочие места, резервного копирования и т.д. Вы можете делать почти все, что с SMO - Уэйн Шеффилд были примеры добавления & таблицы изменений & хранимых процедур в his blog в прошлом месяце (я не могу ссылаться на сообщения, так как мой брандмауэр блокирует его по неизвестным причинам). Обычно я делаю это с помощью запроса T-SQL, но он работает в обоих направлениях, и я уверен, что должно быть какое-то преимущество в том, чтобы делать это с SMO.

+0

90% того, над чем я работаю, основано на файлах сценариев патчей, поэтому я бы предположил, что использование invoke-sqlcmd было бы лучшим для этого использования? – Lewis

+0

Если вам просто нужно бросить кучу предварительно написанных файлов сценариев на сервере, я бы начал с 'invoke-sqlcmd' точно. Возможно, вы тоже можете это сделать с SMO, но, как я уже сказал, у меня нет опыта. – alroc