Как перейти с Oracle на PostgreSQL, используя Ora2Pg

Kate

Administrator
Команда форума
Сегодня мы поговорим об актуальной задаче — миграции баз данных с Oracle на PostgreSQL с использованием Ora2Pg. Сейчас популярность PostgreSQL обоснована его мощностями и экономически выгодной альтернативы коммерческим решениям.

Установим​

Конечно, понадобятся клиенты Oracle и PostgreSQL. Кроме того, потребуется установить необходимые Perl модули, такие как DBI и DBD::Oracle, которые дадут нам возможность конектится к базам данных Oracle и PostgreSQL соответственно. Для этого может потребоваться установить perl-devel и perl-CPAN.

Далее устанавливаем Ora2Pg. Это можно сделать, скачав исходный код из официального репозитория на GitHub, распаковав архив и запустив стандартный процесс установки для Perl модулей:

  • Конфигурация с помощью perl Makefile.PL
  • Компиляция с помощью команды make
  • Установка с помощью команды make install

Конфигурация Ora2Pg и запуск​

После установки нужно настроить Ora2Pg для работы с сервером Oracle.

Вся настройка проводится в файлике конфигурации ora2pg.conf, где указываются параметры подключения к БД Oracle.

Основные параметры настройки в ora2pg.conf:

  1. Определение источника данных Oracle
    • ORACLE_DSN: строка подключения к базе данных Oracle, например, dbi:Oracle:host=192.168.1.75;sid=orcl;port=1521.
    • ORACLE_USER и ORACLE_PWD: учетные данные для доступа к базе данных Oracle.
  2. Выбор схемы и типа экспорта
    • SCHEMA: указывает, какую схему Oracle экспортировать. Это имя схемы чувствительно к регистру.
    • EXPORT_SCHEMA: если установлено в 1, схема Oracle также будет создана в PostgreSQL.
    • TYPE: определяет тип объектов для экспорта, например, TABLE, VIEW, FUNCTION.
  3. Настройка экспорта данных
    • WHERE: директива, которая позволяет задать условие для фильтрации данных при экспорте. Применяется индивидуально для каждой таблицы.
    • EXCLUDE: исключает определенные таблицы или объекты из экспорта.
  4. Управление версией PostgreSQL и настройки вывода
    • PG_VERSION: версия целевой БД PostgreSQL.
    • OUTPUT: путь и имя файла, в который будет сохранен результат экспорта.
  5. Дополнительные параметры для управления миграцией
    • FORCE_OWNER: принудительно задает владельца для объектов в PostgreSQL, совпадающего с владельцем в Oracle.
    • JOB_NAME: имя задачи миграции, которое может быть использовано для логирования и отчетности.
Три варианта конфига:

Базовый конфиг для экспорта только таблиц из определенной схемы без данных:

ORACLE_DSN dbi:Oracle:host=oracle_server;sid=orcl;port=1521
ORACLE_USER user
ORACLE_PWD password
PG_VERSION 12
SCHEMA hr
TYPE TABLE
EXPORT_SCHEMA 1
OUTPUT /exports/hr_tables.sql
Конфиг с условиями для фильтрации данных, которые экспортируются из определенных таблиц:

ORACLE_DSN dbi:Oracle:host=oracle_server;sid=orcl;port=1521
ORACLE_USER user
ORACLE_PWD password
PG_VERSION 12
SCHEMA sales
TYPE TABLE,DATA
WHERE (table_name='orders' AND order_date >= '2022-01-01')
OUTPUT /exports/sales_data_filtered.sql
Конфиг с миграцией таблиц, представлений, функций и процедур, которые присутствуют в схеме Oracle:

ORACLE_DSN dbi:Oracle:host=oracle_server;sid=orcl;port=1521
ORACLE_USER user
ORACLE_PWD password
PG_VERSION 13
SCHEMA finance
TYPE TABLE,VIEW,FUNCTION,PROCEDURE
EXPORT_SCHEMA 1
OUTPUT /exports/finance_full_migration.sql
Далее запускаем через командную строку:

ora2pg -c /path/to/your/ora2pg.conf
Во время выполнения миграции Ora2Pg предоставляет подробные логи.

Валидация данных​

Нужно обязательно проверить, совпадает ли количество записей в каждой таблице исходной базы данных Oracle с количеством записей в соответствующей таблице PostgreSQL. Это можно выполнить с помощью простого COUNT(*) в обеих БД.

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

В Ora2Pg есть функциональность TEST для проверки, что все объекты (таблицы, представления, функции и т.д.) были созданы в PostgreSQL. Можно выполнить команду:

ora2pg -t TEST -c config/ora2pg.conf > migration_diff.txt
Эта команда создаст отчет, в котором перечислены все объекты, которые должны были быть мигрированы, и их статус в новой БД.

Так как Ora2Pg автоматом конвертирует PL/SQL в PL/pgSQL, важно проверить, что все хранимые процедуры и функции выполняются без ошибок и возвращают ожидаемые результаты.

Можно юзать готовые SQL-скрипты для облегчения задачи:

Например, этот скрипт помогает проверить, что количество записей в каждой таблице одинаково в обеих базах данных:

SELECT 'EMPLOYEES' AS table_name, COUNT(*) AS total_count FROM EMPLOYEES;
Можно сделать скрипт, который проверяет проверяет, что суммарные значения по важным числовым полям, например как зарплаты или идентификационные номера, совпадают:

SELECT SUM(salary) AS total_salary FROM employees;
А с таким скриптом можно чекнуть, что все ключевые поля были перенесены без дубликаций и пропусков:

SELECT employee_id, COUNT(*) FROM EMPLOYEES GROUP BY employee_id HAVING COUNT(*) > 1;

 
Сверху