Действия
Migration OraToPG » История » Редакция 8
« Предыдущее |
Редакция 8/9
(Разница(diff))
| Следующее »
BEA, 11.06.2025 02:27
Миграция с Oracle на PostgreSQL¶
Миграция на операционной системе Windows¶
Подготовка к миграции: установка необходимого ПО¶
- Установка Perl
Скачайте и установите Strawberry Perl. После установки убедитесь, что Perl добавлен в переменную средыPATH
.
Проверьте установку выполнив команду:perl -v
- Установка Oracle Client. Уже описан процесс в нашей инструкции: ссылка
- Установка зависимостей Perl
- Откройте командную строку (cmd.exe) от имени администратора и выполните:
cpan DBI cpan DBD::Oracle cpan DBD::Pg cpan XML::Simple cpan DateTime cpan JSON cpan Term::ReadKey cpan Test::Simple
Для установки модулей может потребоваться доступ в интернет и права администратора. - Проверьте установленные зависимости при помощи команд:
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;"
- Откройте командную строку (cmd.exe) от имени администратора и выполните:
- Установка ora2pg
- 2 варианта для скачивания
- Перейдите на их оффициальный сайт. Найдите на сайте и перейлите по ссылке "GitHub Download v<version>". Скачиваем архив с исходниками:
- Если у вас установлен git то откройте консоль и перейдите в то местоположение куда хотите скачать. Выполните команду:
git clone https://github.com/darold/ora2pg.git
- Перейдите на их оффициальный сайт. Найдите на сайте и перейлите по ссылке "GitHub Download v<version>". Скачиваем архив с исходниками:
- Перейдите в папку с исходниками:
cd ora2pg
Установите:perl Makefile.PL dmake dmake install
Примечание: Если dmake не найден, используйте gmake или nmake (входит в Strawberry Perl). - Проверка установки
ora2pg --version
Если команда возвращает версию — установка прошла успешно.
- 2 варианта для скачивания
- Скопируйте
tnsnames.ora
из вашего рабочего клиента или сервера базы данных Oracle. Подробнее что за файл и откуда брать: ссылка - Проверка подключения к Oracle
- Создайте конфигурационный файл 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 <пароль пользователся администратора Омеги>
- Проверьте соединение с помощью команды:
ora2pg -t SHOW_VERSION -c /путь/к/вашему/ora2pg.conf
илиora2pg -c <путь к вашему ora2pg.conf> -e "SELECT * FROM dual;"
Если соединение успешно, вы увидите ответ или версию базы данных.
- Создайте конфигурационный файл ora2pg.conf используя файл шаблон который можно найти по пути где установлен ora2pg.
Подготовка к миграции: развёртывание PostgreSQL и приведение к одинаковой версии с Oracle¶
- Установить PostgreSQL. Инструкция по установке: ссылка
- Произвести импорт стартовой версии БД Omega Production:
- Дамп БД брать из нашего фтп сервера: ftp://demo:demo@internal.omp-system.ru/ServerDistr/DB/omp/dmp/postgres/omp_adm.sql
- Рекомендуется переименовать базу данных в содержимом дампа на ту же что у вас сейчас на оракл.
То есть к примеру если у вас пользователь администратор омеги именуется как test_adm то ваша база данных именуется как test_adm.
В таком примере необходимо открыть дамп как текстовый файл и заменить по всему файлу OMP_ADM на TEST_ADM. (именно заглавными но в поиске/замене отключаем учитывание регистра) - Произвести импорт дампа при помощи консольных скриптов описанные в инструкции импорта/экспорта дампа: ссылка
- Выслать отделу сопровождения текущую версию скриптов указанную в окне "О программе" внутри приложения Omega Production и написать чтобы прислали набор скриптов для обновления версии скриптов базы данных
- Проверить подключение к базе данных на устройстве на котором ранее устанавливали ora2pg
- Используйте следующую команду для подключения:
psql -h <имя ПК в сети или его IP адрес> -p <порт> -U <пользователь> -d <имя_базы>
Где:
- <пользователь> - имя пользователя администратора базы данных
- <имя_базы> - такое же как и имя пользователя администратора базы данных
При подключении вас попросят ввести пароль. - Проверка соединения
После успешного подключения вы увидите приглашение вида:<имя базы>=#
Это означает, что соединение установлено. - Выполнение простых команд для проверки базы
- Проверка версий PostgreSQL:
SELECT version();
- Проверка содержимого OMP_PROPERTIES:
SELECT * FROM omp_properties op order by op.code LIMIT 10;
- Выйти из psql:
\q
- Проверка версий PostgreSQL:
- Используйте следующую команду для подключения:
- Дождаться ответа от нашего отдела сопровождения и получить набор скриптов для обновления базы данных.
- В наборе скриптов должен присутствовать
run.bat
. Открыть его для редактирования и подправить параметры подключения к базе данных.
Содержимое данного скрипта будет из себя представлять уже ранее указанный в этой инструкцииpsql ....
- Дождаться конца выполнения. Проверить созданный лог на наличие ошибок.
Стандартный формат ошибок у PostgreSQL: :ERROR: на английском или :ОШИБКА: на русском в зависимости от выбранного языка при установке СУБД.
Если ошибки присутствуют то связаться с нами по вопросу их устранений
- В наборе скриптов должен присутствовать
ВНИМАНИЕ: после данного этапа необходимо приостановить установку обновлений
Миграция: выгрузка из Oracle¶
- Скачайте указанные ниже файлы из этого вики на ПК где установлен ora2pg и сложите их по одному пути:
- Отредактируйте файлы указав свои настройки в ниже перечисленных местах
- Исполняемые
.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 <имя пользователя администратора>
- ВНИМАНИЕ: Если у вас есть свои таблицы внутри нашей схемы которые не заложены в поддерживаемый функционал Omega Production то этот пункт обязателен
- Открываем
ora2pg_OTHER_TBLS.conf
и находим там длинный перечень как на скриншоте ниже: - Добавляем перечень ваших таблиц в этот список разделяя между собой проблемали
- Открываем
- ВНИМАНИЕ: начиная с этого момента запуска база уже должна быть заблокирована и на ней никто в том числе пользователя администратора сидеть не должен!!!
Запускаем.cmd
скрипты в порядке указанный ниже.conv_obj_attrs.cmd
conv_other_tbls.cmd
conv_data.cmd
Миграция: загрузка в PostgreSQL¶
В этом разделе все команды однообразны и представляют из себя запуск скриптов через psql
psql -h <имя ПК в сети или его IP адрес> -p <порт> -U <пользователь админимтратор омеги> -d <пользователь админимтратор омеги> -f <файл .pgsql> 1>>import_data.log 2>&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 $$;
- Пускаем все скрипты кроме
DATA.pgsql
черезpsql
как показано выше. После пуска скрипта проверяем лог на наличие ошибок (формата PostgreSQL).
Если не хватает какого то объекта из Оракл который не экспортировался - возвращаемся к Миграция: выгрузка из Oracle и повторяем выгрузку с включением недостающего объекта - Скачиваем файл
data_wrap.pgsql
на ПК где установлен ora2pg. - Пускаем скрипт с удалением всех имеющихся данных. При повторном импорте данных этот скрипт надо пустить снова до импорта данных:
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;
- Пускаем
data_wrap.pgsql
черезpsql
как показано выше. После пуска скрипта проверяем лог на наличие ошибок (формата PostgreSQL).
Если не хватает какого то объекта из Оракл который не экспортировался - возвращаемся к Миграция: выгрузка из Oracle и повторяем выгрузку с включением недостающего объекта
Миграция: функции, процедуры и прочее¶
Мы не производим миграцию функций, процедур и прочего по причинам:- Оптимизация времени миграции: базовый макет БД Omega Production предоставляется заранее что позволяет меньше времени затратить на критический сегмент этого процесса где блокируется БД
- На момент того когда мы сами мигрировали БД для создания стартового макета на PostgreSQL выяснилось что утилита ora2pg не может полностью корректно конвертировать данные объекты.
Окончание миграции: тестирование¶
- Специальные файлы приложения не нужны. Клиентское приложение уже работает с возможностью взаимодействовать с PostgreSQL.
- В файлах омеги редактируем OMP_DB.ini. Необходимо добавить строку подключения для PostgreSQL. Формат строки такой:
;Schema<порядковый номер> =<адрес сервера>:<порт>|POSTGRESQL@OMP_ADM@<Полное название для вашей базы>
- Открываем омегу и пытаемся войти в пользователя администратора. После успешного логина в пользователя администратора проверяем логин в обычного пользователя.
Если у вас на данном этапу возникли ошибки то:- Если ошибка конфликт версий то это вероятнее всего значит что ошибки были допущены где то ранее.
- Проверьте всё ли вы правильно сделали при установке PostgreSQL. Инструкция: ссылка. Особенно обратить внимание на конец инструкции где устаналиваются плагины необходимые для нашей базы данных
- Проверьте корректно ли прописался search_path при установке PostgreSQL вот таким запросом:
select 1 from dual;
Так какdual
в постгре по умолчанию нет он должен задействовать его из схемы oracle. Если будет ошибка чтоdual
не найден то вероятнее всего search_path прописан не корректно
Обновлено BEA 12 дня назад · 8 изменени(я, ий)