Сначала я бы рекомендовал дважды проверить, если вы не можете использовать одно из существующих средств управления, например Управление на основе политик или Центральные серверы управления . В частности, PBM, он охватывает многие операции, которые традиционно требовали что-то вроде «запустить этот скрипт в каждой базе данных». Есть также много статей, описывающих PBM в действии, например. Серверы управления и централизованного управления на основе политик .
Еще одна вещь, которую следует учитывать, - это использовать PowerShell вместо C # / ADO / SMO. Результаты PS - это скрипты, которые легко изменяются / поддерживаются в производстве, в отличие от скомпилированных исполняемых файлов. Кроме того, объектная модель PS облегчает выполнение многих задач в PS, чем в необработанном C #. PS можно использовать многопоточное исполнение. См. Обзор SQL Server PowerShell .
Посмотрите, какие еще проекты существуют, кроме как для решения аналогичных задач. У меня сам есть проект dbUtilSqlcmd , который обрабатывает выполнение файлов .SQL в среде ADO.Net (обработка пакетного разделителя GO
, обработка переменных sqlcmd :setvar
и $(variable)
, обработка :connect
команд и так далее).
Наконец, если вы в конечном итоге будете писать код вместо PBM, ваши большие проблемы будут связаны с многопоточностью и сообщениями об ошибках. Не запускайте поток для каждого сервера / базы данных, 5000 потоков нежизнеспособны. Вместо этого используйте ThreadPool.QueueUserWorkItem
. Более того, по возможности используйте Parallel Library , если это возможно.