У меня простая ситуация. Большая организация использует несколько разных версий некоторых (настольных) приложений, и каждая версия имеет свою собственную структуру базы данных. Есть около 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, поэтому не ожидаю слишком много проблем. И я буду обновлять только структуры таблиц, а не другие объекты базы данных.
Итак, есть ли у кого-нибудь хорошие советы и хитрости, которые можно применить при проведении такого рода сравнений? Что нужно знать? Практические советы по увеличению скорости?