Миграторы базы
Система установки базы состоит из четырех частей, которые запускаются последовательно, до запуска основных сервисов. Их можно использовать для установки различных компонентов в базу. Чтобы использовать установщики, надо добавить в хост определенный набор сервисов. При запуске хоста эти сервисы будут сканировать директории, которые располагаются внутри пакета (хоста), выполнят подключение к базе через DbTransactions и совершать установку, а также зафиксируют текущее состояние установки.
OraMigrator
OraMigrator работает по принципу последовательной установки изменений (миграций, патчей) базы. Каждое изменение должно иметь определенный номер (версию), определяющую порядок их установки. Каждое изменение выполнятеся онднократно за всю историю базы. OraMigrator выполняет любые SQL запросы без изменений.
Сохранять изменения необходимо в директории ./ora-migrations.
Внутри этой директории можно расположить файлы двумя способами:
- Название файла должна соответствовать версии миграции
{№миграции}.sql. - Как альтернатива, можно создать директорию
{№миграции}, внутри которой разместить файл index.sql.
Внутри index.sql можно перечислить файлы в этой директории, которые будут выполняться последовательно. Формат index.sql принимает только имена файлов, либо комментарии:
@MY_FILE_1.sql;
-- Это комментарий
@MY_FILE_2.typ;
А формат дополнительных файлов соответствует одиночному SQL файлу. Символ \ на отдельной строке разделяет запросы:
SELECT ORA_DATABASE_NAME FROM DUAL
\
SELECT ORA_DATABASE_NAME FROM DUAL
Текущее состояние базы OraMigrator хранит внутри Oracle, в таблице MIGRATIONS
В случае успешного выполнения миграции он заполнит новую запись об успехе. Она предотвращает повторное выполнение этого измения.
В случае ошибки выполнения SQL, будет сделана запись с ошибкой, с указанием текста самой ошибки (колонка ERROR) и работа OraMigrator прервется. Повторный запуск OraMigrator найдет в таблице ошибку мигратор и сразу прервется, дабы не нарушить дальнейшую работу мигратора.
После устранения ошибки надо изменить эту запись вручную и перезапустить хост.
Чтобы не подключаться к Oracle напрямую, можно, через Админ панель, использовать сервис OraMigratorAdmin:
- fixError, если не требуется повторное выполнение миграцией с ошибкой
- delError, если требуется ее повторное выполнение
PkgInstaller
Если OraMigrator предназначен для выполненеия любых SQL-запросов, PkgInstaller устанавливает в Oracle такие сущности, как типы, пакеты, структуры, функции и процедуры, сверяя актуальность их версий, и не выполняя повторную установку, если версия актуальна. PkgInstaller сравнивает версии с помощью вычисления хэш-значения содержимого файла по установке сущности с записью в таблице PACKAGE_VERSIONS, которая осталась после предыдущей установки.
В случае необходимости принудительной переустановки сущности, необходимо удалить предыдущую запись или изменить ее хэш-значение в колонке package_hash.
Установочные SQL файлы необходимо размещать в директориях с определенным расширением в зависимости от типа сущности:
- Пакеты:
./ora-packages/*.pck - Типы:
./ora-types/*.typ
После установки всех новых пакетов PkgInstaller запустит компиляцию новых пакетов автоматически.