Переписать PK и связанный FK на основе последовательности оракула

Я хочу перенести подмножество данных клиентов из одной среды общих баз данных в другую среду общих баз данных. Я использую hibernate и имею довольно много столбцов ID и FK_ID, которые автоматически генерируются из последовательности оракула.

У меня есть журнал изменений в liquibase, который я экспортировал из тюремщика, в котором есть данные, специфичные для клиента.

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

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

Кто-нибудь знает что-нибудь в жидкости, что может быть хорошим местом для начала.

Я хотел бы сделать это на жидкой базе XML, прежде чем передавать ее команде update, или как часть самой команды update. В идеале, как часть самой команды обновления.

Я знаю, что мне нужно было бы узнать, какие столбцы являются столбцами последовательности PK и соответствующими столбцами FK. Структура базы данных имеет все это четко определено, поэтому я должен быть в состоянии прочитать это в процессе обновления.

В качестве альтернативы я думал, что могу использовать модель извлечения CSV из тюремщика

Тюремщик - http://jailer.sourceforge.net/

2 ответа

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

Мне действительно удалось выяснить это для себя с помощью команды обновления "командной строки" liquibase с помощью специального прослушивателя exec изменений.

1) Я выдвинул MR к liquibase, чтобы разрешить регистрацию прослушивателя exec изменений

2) Я реализовал свой собственный прослушиватель изменений exec, который перехватывает каждую инструкцию вставки и переписывает каждое поле FK и PK в поле, которое еще не выделено в целевой базе данных. Я достигаю этого, используя последовательность оракула. Чтобы избежать необходимости каждый раз возвращаться в базу данных для новой последовательности, я реализовал свою собственную версию кэширования последовательности гибернации.

https://github.com/liquibase/liquibase/pull/505

https://github.com/pellcorp/liquibase-extensions

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

Основной рабочий процесс:

1) Экспорт подмножества данных из базы данных источника с помощью jailer в liquibase xml

2) Запустите команду обновления liquibase с настраиваемым прослушивателем изменений exec для цели.

3) TODO Запустите экспорт jailer на целевой базе данных и сравните с исходными исходными данными.

Другие вопросы по тегам