Сравнение и обновление SQL / Schema - PullRequest
3 голосов
/ 10 мая 2010

У меня простая ситуация. Большая организация использует несколько разных версий некоторых (настольных) приложений, и каждая версия имеет свою собственную структуру базы данных. Есть около 200 офисов, и у каждого офиса будет своя версия, которая может быть одной из 7 разных. Компания хочет обновить все приложения до последних версий, которые будут версии 8.

Проблема в том, что у них нет отдельной базы данных для каждой версии. Также у них нет отдельной базы данных для каждого офиса. У них есть одна база данных, которая обрабатывается выделенным сервером, что упрощает управление и резервное копирование. Каждый офис имеет свою собственную схему базы данных, и внутри этой схемы есть целая структура базы данных для конкретной версии приложения. В результате я имею дело с 200 различными схемами, которые необходимо обновить, каждая с 7 возможными версиями. К счастью, каждая схема знает правильную версию, поэтому проверить версию не сложно.

Но моя проблема в том, что мне нужно создать сценарии обновления, которые могут обновляться с версии 1 до версии 2 до версии 3 и т. Д. По сути, все схемы должны быть увеличены до одной версии, пока они не станут версией 8 Написание кода, который сделает это, не проблема. Задача как создать сценарий обновления с одной версии на другую? Желательно с помощью какого-либо автоматизированного инструмента. Я рассмотрел RedGate SQL Compare и Altova DatabaseSpy, но они не практичны Альтова слишком медленная. После этого RedGate требует слишком большой обработки, поскольку в сгенерированном скрипте SQL по-прежнему есть несколько ошибок, и он ссылается на имя схемы. Кроме того, код должен стать частью хранимой процедуры, а код, сгенерированный RedGate, на самом деле не помещается внутри одной процедуры. (Кроме того, он слишком много обрабатывает транзакции, а мне нужно все в одной транзакции.


Я рассматривал возможность использования другого инструмента сравнения SQL, но мне кажется, что мой случай слишком отличается от того, что могут предложить стандартные инструменты. Поэтому я собираюсь написать свой собственный инструмент сравнения. Для этого я буду использовать ADOX с Delphi для чтения каталогов для каждой версии схемы в базе данных, а затем использовать это для записи операторов SQL, которые потребуются для обновления этих схем до их следующей версии. (Сравнение 1 с 2, 2 с 3, 3 с 4 и т. Д.) Я не знаком с генерацией SQL-Script-Generators, поэтому не ожидаю слишком много проблем. И я буду обновлять только структуры таблиц, а не другие объекты базы данных.

Итак, есть ли у кого-нибудь хорошие советы и хитрости, которые можно применить при проведении такого рода сравнений? Что нужно знать? Практические советы по увеличению скорости?

Ответы [ 3 ]

2 голосов
/ 10 мая 2010

Я все еще думаю, что RedGate - это путь. Это правда, что он не всегда улавливает все зависимости, и вам, возможно, придется немного взломать его, но он продвинет вас на 95%, и это приведет к огромной экономии времени IMO.

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

Одна из возможностей, вместо того, чтобы изменять каждую базу данных на месте, сделать это:

  • создать новую базу данных версии 8 (DB_NEW)
  • перенести все данные из старой базы данных (DB) (для этого вам потребуется до 7 различных сценариев переноса данных)
  • проверить новую базу данных
  • в случае успеха переименуйте DB в DB_OLD и переименуйте DB_NEW в DB
1 голос
/ 15 мая 2010

Redgate является ответом, вы можете сравнить различные схемы, а также сгенерировать сценарии для вас на основе разницы.

1 голос
/ 12 мая 2010

Создание новой базы данных с последующим переносом данных - лучший способ. Возможно, вам потребуется создать несколько сценариев преобразования данных, но я предполагаю, что различия между структурами данных невелики. После миграции я рекомендую использовать любой инструмент сравнения данных, который позволяет сравнивать результаты SQL-запросов для проверки успешности миграции.

...