Переписать 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 на целевой базе данных и сравните с исходными исходными данными.