2010-05-10 3 views
3

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

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

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


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

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

ответ

2

Я все еще думаю, что RedGate - это путь. Это правда, что он не всегда улавливает все зависимости, и вам может потребоваться немного взломать его, но он получит вам 95% пути и будет огромным временным ИМО.

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

Одним из возможных вариантов были бы, а не модифицировать каждую базу данных на месте, сделайте следующее:

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

Я пробовал RedGate, и это помогает мне примерно в 50% моих потребностей. Хуже того, это не позволяет мне сравнивать две схемы внутри одной базы данных. Таким образом, мне нужно сделать несколько копий базы данных, переименовать схему и затем выполнить сравнение. Это не спасает меня в любое время. –

+0

@Workshop: Посмотрите мое обновление. – RedFilter

+0

Ormnan, я мог бы создавать обновления от 1 до 8, от 2 до 8, от 3 до 8 и т. Д. Однако я предпочитаю создавать обновления от 1 до 2, от 2 до 3, от 3 до 4 и т. Д. Это позволяет обновлять приложение также можно сделать небольшими шагами, если один офис не сможет сразу перейти на новейшую версию. Существуют и другие организации, которые используют одно и то же приложение, хотя и не с этим большим количеством офисов, поэтому наличие сценариев, которые обновляются до следующей версии, более практичны, чем обновление до последней версии. (Потому что скоро последняя версия больше не будет последней, после создания версии 9). –

1

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

+0

Забыл упомянуть: я использую SQL Data Examiner из sqlaccessories.com для сравнения результатов sql-запроса. – SQLDev

1

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

Смежные вопросы