Проект

Общее

Профиль

Действия

Migration OraToPG » История » Редакция 18

« Предыдущее | Редакция 18/19 (Разница(diff)) | Следующее »
PMG, 04.03.2026 17:12


Миграция с Oracle на PostgreSQL

Краткое описание процесса:

  1. Подготавливаемся
    1. Создаём сервер с СУБД PostgreSQL на котором будет будущая база
    2. На любой из серверов устанавливаем ora2pg - инструмент для миграции из Oracle в PostgreSQL
    3. На сервер СУБД PostgreSQL импортируем дамп чистой базы Omega Production для PostgreSQL. Он будет выступать в качестве макета
    4. Синхронизируем данные базы по версиям.
      1. Проверяем текущую версию Omega Production
      2. Проверяем версию базы данных PostgreSQL
      3. Запрашиваем скрипты у наших сотрудников для того чтобы эти значения стали одинаковыми
      4. При получении скриптов пускаем их согласно приложенным к ним инструкциям
  2. Выполняем миграцию
    1. Выгружаем объекты и данные из Oracle в файлы
    2. Загружаем объекты и данные из файлов в PostgreSQL

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

Миграция на операционной системе Windows

Подготовка к миграции: установка необходимого ПО

  1. Установка Perl
    Скачайте и установите Strawberry Perl. После установки убедитесь, что Perl добавлен в переменную среды PATH.
    Проверьте установку выполнив команду:
    perl -v
    
  2. Установка Oracle Client. Уже описан процесс в нашей инструкции: ссылка
  3. Установка зависимостей Perl
    1. Откройте командную строку (cmd.exe) от имени администратора и выполните:
      cpan DBI
      cpan DBD::Oracle
      cpan DBD::Pg
      cpan XML::Simple
      cpan DateTime
      cpan JSON
      cpan Term::ReadKey
      cpan Test::Simple
      

      Для установки модулей может потребоваться доступ в интернет и права администратора.
    2. Проверьте установленные зависимости при помощи команд:
      perl -e "use DBI;" 
      perl -e "use DBD::Oracle;" 
      perl -e "use DBD::Pg;" 
      perl -e "use XML::Simple;" 
      perl -e "use DateTime;" 
      perl -e "use JSON;" 
      perl -e "use Term::ReadKey;" 
      perl -e "use Test::Simple;" 
      
  4. Установка ora2pg
    1. 2 варианта для скачивания
      1. Перейдите на их оффициальный сайт. Найдите на сайте и перейлите по ссылке "GitHub Download v<version>". Скачиваем архив с исходниками:
      2. Если у вас установлен git то откройте консоль и перейдите в то местоположение куда хотите скачать. Выполните команду:
        git clone https://github.com/darold/ora2pg.git
        
    2. Перейдите в папку с исходниками:
      cd ora2pg
      

      Установите:
      perl Makefile.PL
      dmake
      dmake install
      

      Примечание: Если dmake не найден, используйте gmake или nmake (входит в Strawberry Perl).
    3. Проверка установки
      ora2pg --version
      

      Если команда возвращает версию — установка прошла успешно.
  5. Скопируйте tnsnames.ora из вашего рабочего клиента или сервера базы данных Oracle. Подробнее что за файл и откуда брать: ссылка
  6. Проверка подключения к Oracle
    1. Создайте конфигурационный файл ora2pg.conf используя файл шаблон который можно найти по пути где установлен ora2pg.
      Пример минимальной конфигурации:
      # Set the Oracle home directory
      ORACLE_HOME    <путь ORACLE_HOME куда установлен Oracle клиент>
      
      # Set Oracle database connection (datasource, user, password)
      ORACLE_DSN    dbi:Oracle:host=<имя ПК в сети или его IP адрес>;service_name=<TNS имя вашего сервера>;port=<порт>
      ORACLE_USER    <имя пользователся администратора Омеги>
      ORACLE_PWD    <пароль пользователся администратора Омеги>
      
    2. Проверьте соединение с помощью команды:
      ora2pg -t SHOW_VERSION -c /путь/к/вашему/ora2pg.conf
      

      или
      ora2pg -c <путь к вашему ora2pg.conf> -e "SELECT * FROM dual;" 
      

      Если соединение успешно, вы увидите ответ или версию базы данных.

Подготовка к миграции: развёртывание PostgreSQL и приведение к одинаковой версии с Oracle

  1. Установить PostgreSQL. Инструкция по установке: ссылка
  2. Произвести импорт стартовой версии БД Omega Production:
    1. Дамп БД брать из нашего фтп сервера: ftp://demo:demo@internal.omp-system.ru/ServerDistr/DB/omp/dmp/postgres/omp_adm.sql
    2. Рекомендуется переименовать базу данных в содержимом дампа на ту же что у вас сейчас на оракл.
      То есть к примеру если у вас пользователь администратор омеги именуется как test_adm то ваша база данных именуется как test_adm.
      В таком примере необходимо открыть дамп как текстовый файл и заменить по всему файлу OMP_ADM на TEST_ADM. (именно заглавными но в поиске/замене отключаем учитывание регистра)
    3. Произвести импорт дампа при помощи консольных скриптов описанные в инструкции импорта/экспорта дампа: ссылка
  3. Выслать отделу сопровождения текущую версию скриптов указанную в окне "О программе" внутри приложения Omega Production и написать чтобы прислали набор скриптов для обновления версии скриптов базы данных
  4. Проверить подключение к базе данных на устройстве на котором ранее устанавливали ora2pg
    1. Используйте следующую команду для подключения:
      psql -h <имя ПК в сети или его IP адрес> -p <порт> -U <пользователь> -d <имя_базы>
      

      Где:
      - <пользователь> - имя пользователя администратора базы данных
      - <имя_базы> - такое же как и имя пользователя администратора базы данных
      При подключении вас попросят ввести пароль.
    2. Проверка соединения
      После успешного подключения вы увидите приглашение вида:
      <имя базы>=#
      

      Это означает, что соединение установлено.
    3. Выполнение простых команд для проверки базы
      • Проверка версий PostgreSQL:
        SELECT version();
        
      • Проверка содержимого OMP_PROPERTIES:
        SELECT * FROM omp_properties op order by op.code LIMIT 10;
        
      • Выйти из psql:
        \q
        
  5. Дождаться ответа от нашего отдела сопровождения и получить набор скриптов для обновления базы данных.
    1. В наборе скриптов должен присутствовать run.bat. Открыть его для редактирования и подправить параметры подключения к базе данных.
      Содержимое данного скрипта будет из себя представлять уже ранее указанный в этой инструкции psql ....
    2. Дождаться конца выполнения. Проверить созданный лог на наличие ошибок.
      Стандартный формат ошибок у PostgreSQL: :ERROR: на английском или :ОШИБКА: на русском в зависимости от выбранного языка при установке СУБД.
      Если ошибки присутствуют то связаться с нами по вопросу их устранений

ВНИМАНИЕ: после данного этапа необходимо приостановить установку обновлений

Миграция: выгрузка из Oracle

  1. Скачайте указанные ниже файлы из этого вики на ПК где установлен ora2pg и сложите их по одному пути:
  2. Отредактируйте файлы указав свои настройки в ниже перечисленных местах
    • Исполняемые .cmd скрипты:
      ora2pg -d -o OTHER_TBLS.pgsql -b <путь к файлам> -c <путь к файлам>\ora2pg_OTHER_TBLS.conf -l <путь к файлам>\OTHER_TBLS.log
      

      Где:
      <путь к файлам> - путь куда вы скачали данные файлы.
    • Файлы настроек для ora2pg. Файлы формата .conf
      # Set the Oracle home directory
      ORACLE_HOME    <путь ORACLE_HOME куда установлен Oracle клиент>
      
      # Set Oracle database connection (datasource, user, password)
      ORACLE_DSN    dbi:Oracle:host=<имя ПК в сети или его IP адрес>;service_name=<TNS имя вашего сервера>;port=<порт>
      ORACLE_USER    <имя пользователся администратора Омеги>
      ORACLE_PWD    <пароль пользователся администратора Омеги>
      

      # Oracle schema/owner to use
      SCHEMA        <имя пользователя администратора>
      
  3. ВНИМАНИЕ: Если у вас есть свои таблицы внутри нашей схемы которые не заложены в поддерживаемый функционал Omega Production то этот пункт обязателен
    1. Открываем ora2pg_OTHER_TBLS.conf и находим там длинный перечень как на скриншоте ниже:
    2. Добавляем перечень ваших таблиц в этот список разделяя между собой проблемали
  4. ВНИМАНИЕ: начиная с этого момента запуска база уже должна быть заблокирована и на ней никто в том числе пользователя администратора сидеть не должен!!!
    Запускаем .cmd скрипты в порядке указанный ниже.
    1. conv_obj_attrs.cmd
    2. conv_other_tbls.cmd
    3. conv_data.cmd
    4. conv_seq.cmd
    5. ВНИМАНИЕ: при работе conv_seq.cmd образуется файл sequences_sync.sql который нужно открыть (он небольшой) и заменить все START WITH на RESTART WITH

Миграция: загрузка в PostgreSQL

В этом разделе все команды однообразны и представляют из себя запуск скриптов через psql

psql -h <имя ПК в сети или его IP адрес> -p <порт> -U <пользователь админимтратор омеги> -d <пользователь админимтратор омеги> -f <файл .pgsql> 1>>import_data.log 2>&1

  1. Пустить скрипт для удаления текущих аттрибутов СО:
    do $$ declare
        r record;
    begin
        for r in (select tablename from pg_tables where tablename like 'obj_attr_values_%') loop
            execute 'drop table if exists ' || quote_ident(r.tablename) || ' cascade';
        end loop;
    end $$;
    
  2. Пускаем все скрипты кроме DATA.pgsql через psql как показано выше. ( Эти скрипты были образованы при пуске .cmd из Миграция: выгрузка из Oracle )
    После пуска скрипта проверяем лог на наличие ошибок (формата PostgreSQL).
    Если не хватает какого то объекта из Оракл который не экспортировался - возвращаемся к Миграция: выгрузка из Oracle и повторяем выгрузку с включением недостающего объекта ( требуется редактирование ora2pg_OTHER_TBLS.conf )
  3. Скачиваем файл data_wrap.pgsql на ПК где установлен ora2pg.
  4. Пускаем скрипт с удалением всех имеющихся данных. При повторном импорте данных этот скрипт надо пустить снова до импорта данных:
    do $$
    DECLARE
        statements CURSOR FOR
            SELECT tablename FROM pg_tables
            WHERE tableowner = user AND schemaname = 'public';
    BEGIN
        FOR stmt IN statements LOOP
            EXECUTE 'TRUNCATE TABLE ' || quote_ident(stmt.tablename) || ' CASCADE;';
        END LOOP;
    END;
    $$ LANGUAGE plpgsql;
    
  5. Пускаем data_wrap.pgsql через psql как показано выше. После пуска скрипта проверяем лог на наличие ошибок (формата PostgreSQL).
    Если не хватает какого то объекта из Оракл который не экспортировался - возвращаемся к Миграция: выгрузка из Oracle и повторяем выгрузку с включением недостающего объекта

Миграция: функции, процедуры и прочее

Мы не производим миграцию функций, процедур и прочего по причинам:
  • Оптимизация времени миграции: базовый макет БД Omega Production предоставляется заранее что позволяет меньше времени затратить на критический сегмент этого процесса где блокируется БД
  • На момент того когда мы сами мигрировали БД для создания стартового макета на PostgreSQL выяснилось что утилита ora2pg не может полностью корректно конвертировать данные объекты.

Окончание миграции: тестирование

  1. Специальные файлы приложения не нужны. Клиентское приложение уже работает с возможностью взаимодействовать с PostgreSQL.
  2. В файлах омеги редактируем OMP_DB.ini. Необходимо добавить строку подключения для PostgreSQL. Формат строки такой:
    ;Schema<порядковый номер> =<адрес сервера>:<порт>|POSTGRESQL@OMP_ADM@<Полное название для вашей базы>
    
  3. Открываем омегу и пытаемся войти в пользователя администратора. После успешного логина в пользователя администратора проверяем логин в обычного пользователя.
    Если у вас на данном этапу возникли ошибки то:
    • Если ошибка конфликт версий то это вероятнее всего значит что ошибки были допущены где то ранее.
    • Проверьте всё ли вы правильно сделали при установке PostgreSQL. Инструкция: ссылка. Особенно обратить внимание на конец инструкции где устаналиваются плагины необходимые для нашей базы данных
    • Проверьте корректно ли прописался search_path при установке PostgreSQL вот таким запросом:
      select 1 from dual;
      

      Так как dual в постгре по умолчанию нет он должен задействовать его из схемы oracle. Если будет ошибка что dual не найден то вероятнее всего search_path прописан не корректно

Обновлено PMG 6 дня назад · 18 изменени(я, ий)