Обновление БД

Установка базовых дистрибутивов, создание своих, распространение, установка автоматически и "вручную", файлы, необходимые для создания дистрибутивов.

Модераторы: kdv, Alexey Kovyazin

Ответить
RomanS
Сообщения: 2
Зарегистрирован: 13 дек 2005, 19:25

Обновление БД

Сообщение RomanS » 13 дек 2005, 21:28

Добрый вечер!

Появился такой вопросик. Есть БД на FB. Есть установщик серверной части, который пока только устанавливает FB если требуется и саму базу в указанный каталог. Очередная версия программы может иметь уже новую структуру БД, а у пользователя накопятся данные в установленной базе. Задача. Как произвести обновление базы у клиента. Ориентироваться на известный номер версии клиента не желательно, поскольку у клиента могут быть разные версии и обновлять придется БД с разными прошлыми версиями.

Пока вижу такой выход. Имея новую структуру и БД клиента сгенерировать скрипт, который внесет изменения в БД клиента. При этом данные клиента должны сохраниться, но добавятся например новые поля и таблицы. В таком случае КАК СГЕНЕРИРОВАТЬ СКРИПТ ДЛЯ ИЗМЕНЕНИЙ???

Можно также установить новую пустую БД, а в нее скопировать все что возможно из существующей. Но опять же ЧЕМ ПОЛЬЗОВАТЬСЯ???

Вот у меня такие вопросы или более общий — кто как решает эту проблему?

Пользуюсь InnoSetup.

Заранее благодарен!

Dimitry Sibiryakov
Заслуженный разработчик
Сообщения: 1436
Зарегистрирован: 15 сен 2005, 09:05

Сообщение Dimitry Sibiryakov » 14 дек 2005, 08:09

У меня приложение обновления базы проверяет текущую версию базы (хранится в спецтаблице) и запускает один из скриптов обновления до текущей версии. Эти скрипты сотворены ручками. Важно только иметь все констрейны поименованными чтобы можно было их дропнуть не глядя.

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Сообщение kdv » 14 дек 2005, 10:08

посмотри как делает 1С и например phpbb2. в базе всегда хранится версия метаданных. есть некий тул (собственный), который проверяет версию, и соответственно применяет нужные изменения, чтобы довести ее до требуемой. получать разницу между метаданными для такого инструмента можно при помощи dbcomparer.

RomanS
Сообщения: 2
Зарегистрирован: 13 дек 2005, 19:25

Сообщение RomanS » 14 дек 2005, 12:05

Видимо без версий нельзя. Добавил у себя таблицу и написал прогу, которая обновляет базу до последней версии. Вся история версий храниться в одном файле скрипта. Прога находит текущую и выполняет все последующее.

Ответить