Необходимо запустить скрипт SQL на 5000+ баз данных.Как мне подойти? - PullRequest
2 голосов
/ 08 октября 2010

Я разрабатываю инструмент, который в конечном итоге будет использоваться для запуска сценария sql на 5000+ производственных баз данных одновременно. На данный момент он будет использоваться только для запуска скриптов в наших базах данных Dev и QA. Но я хочу разработать его максимально расширяемым образом, и у меня нет опыта, чтобы делать что-то подобное, поэтому я мог бы воспользоваться некоторыми советами.

Технология, которую я сейчас использую: C # .Net 4.0 ADO.Net SMO

РЕДАКТИРОВАТЬ: я полагаю, под расширяемым я имею в виду возможность запуска сценариев на произвольном количестве баз данных наиболее эффективным способом.

Ответы [ 3 ]

0 голосов
/ 08 октября 2010

Я бы предложил вам использовать метод «массового ввода» SQL. Это самый быстрый способ, с которым я когда-либо сталкивался в MS SQL. Приветствия

0 голосов
/ 08 октября 2010

Сначала я бы рекомендовал дважды проверить, если вы не можете использовать одно из существующих средств управления, например Управление на основе политик или Центральные серверы управления . В частности, 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 , если это возможно.

0 голосов
/ 08 октября 2010

Что вы подразумеваете под расширяемым? Ответы, которые могут быть лучшим способом найти ответ, который вы ищете. В помощь:

  1. Какие функции необходимо расширить в будущем?
  2. Хотите использовать плагины или просто изменить код основного приложения?
  3. Будет ли что-нибудь "фундаментальное" изменчивым? (Требуется осторожное использование интерфейсов.)

Конечно, если сделать его расширяемым, а затем никогда не использовать его, это значит, что ты теряешь время. Итак, подумайте, действительно ли это нужно прямо сейчас.

...