Проект

Общее

Профиль

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

Редакция 7 (BEA, 11.06.2025 02:25) → Редакция 8/9 (BEA, 11.06.2025 02:27)

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

 {{>toc}} 

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

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

 # Установка Perl 
 Скачайте и установите "Strawberry Perl":https://strawberryperl.com/. После установки убедитесь, что Perl добавлен в переменную среды *@PATH@*. 
 Проверьте установку выполнив команду: 
 <pre><code class="shell"> 
 perl -v 
 </code></pre> 
 # Установка Oracle Client. Уже описан процесс в нашей инструкции: [[OracleInstall|ссылка]]   
 # Установка зависимостей Perl 
 ## Откройте командную строку (cmd.exe) от имени администратора и выполните: 
 <pre><code class="perl"> 
 cpan DBI 
 cpan DBD::Oracle 
 cpan DBD::Pg 
 cpan XML::Simple 
 cpan DateTime 
 cpan JSON 
 cpan Term::ReadKey 
 cpan Test::Simple 
 </code></pre> 
 *Для установки модулей может потребоваться доступ в интернет и права администратора.* 
 ## Проверьте установленные зависимости при помощи команд: 
 <pre><code class="shell"> 
 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;" 
 </code></pre> 
 # Установка ora2pg 
 ## 2 варианта для скачивания 
 ### Перейдите на их "оффициальный сайт":https://ora2pg.darold.net/. Найдите на сайте и перейлите по ссылке "GitHub Download v<version>". Скачиваем архив с исходниками: 
 !clipboard-202506060714-uwsux.png! 
 ### Если у вас установлен git то откройте консоль и перейдите в то местоположение куда хотите скачать. Выполните команду: 
 <pre><code class="shell"> 
 git clone https://github.com/darold/ora2pg.git 
 </code></pre> 
 ## Перейдите в папку с исходниками: 
 <pre><code class="shell"> 
 cd ora2pg 
 </code></pre> 
 Установите: 
 <pre><code class="shell"> 
 perl Makefile.PL 
 dmake 
 dmake install 
 </code></pre> 
 *Примечание:* Если dmake не найден, используйте gmake или nmake (входит в Strawberry Perl). 
 ## Проверка установки 
 <pre><code class="shell"> 
 ora2pg --version 
 </code></pre> 
 Если команда возвращает версию — установка прошла успешно. 
 # Скопируйте @tnsnames.ora@ из вашего рабочего клиента или сервера базы данных Oracle. Подробнее что за файл и откуда брать: [[Oracle|ссылка]]  
 # Проверка подключения к Oracle 
 ## Создайте конфигурационный файл ora2pg.conf используя файл шаблон который можно найти по пути где установлен ora2pg. 
 Пример минимальной конфигурации: 
 <pre> 
 # 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 	 <пароль пользователся администратора Омеги> 
 </pre> 
 ## Проверьте соединение с помощью команды: 
 <pre><code class="shell"> 
 ora2pg -t SHOW_VERSION -c /путь/к/вашему/ora2pg.conf 
 </code></pre> 
 или 
 <pre><code class="shell"> 
 ora2pg -c <путь к вашему ora2pg.conf> -e "SELECT * FROM dual;" 
 </code></pre> 
 Если соединение успешно, вы увидите ответ или версию базы данных. 

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

 # Установить PostgreSQL. Инструкция по установке: [[PostgreInstall|ссылка]]  
 # Произвести импорт стартовой версии БД 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. (именно заглавными но в поиске/замене отключаем учитывание регистра) 
 ## Произвести импорт дампа при помощи консольных скриптов описанные в инструкции импорта/экспорта дампа: [[PostgreImportExport|ссылка]]  
 # Выслать отделу сопровождения текущую версию скриптов указанную в окне "О программе" внутри приложения Omega Production и написать чтобы прислали набор скриптов для обновления версии скриптов базы данных 
 # Проверить подключение к базе данных на устройстве на котором ранее устанавливали ora2pg 
 ## Используйте следующую команду для подключения: 
 <pre><code class="shell"> 
 psql -h <имя ПК в сети или его IP адрес> -p <порт> -U <пользователь> -d <имя_базы> 
 </code></pre> 
 Где: 
 - <пользователь> - имя пользователя администратора базы данных 
 - <имя_базы> - такое же как и имя пользователя администратора базы данных 
 При подключении вас попросят ввести пароль. 
 ## Проверка соединения 
 После успешного подключения вы увидите приглашение вида: 
 <pre> 
 <имя базы>=# 
 </pre> 
 Это означает, что соединение установлено. 
 ## Выполнение простых команд для проверки базы 
 ##* Проверка версий PostgreSQL: 
 <pre><code class="sql"> 
 SELECT version(); 
 </code></pre> 
 ##* Проверка содержимого OMP_PROPERTIES: 
 <pre><code class="sql"> 
 SELECT * FROM omp_properties op order by op.code LIMIT 10; 
 </code></pre> 
 ##* Выйти из psql: 
 <pre><code class="sql"> 
 \q 
 </code></pre> 
 # Дождаться ответа от нашего отдела сопровождения и получить набор скриптов для обновления базы данных.  
 ## В наборе скриптов должен присутствовать @run.bat@. Открыть его для редактирования и подправить параметры подключения к базе данных.  
 Содержимое данного скрипта будет из себя представлять уже ранее указанный в этой инструкции @psql ....@ 
 ## Дождаться конца выполнения. Проверить созданный лог на наличие ошибок.  
 Стандартный формат ошибок у PostgreSQL: :ERROR: на английском или :ОШИБКА: на русском в зависимости от выбранного языка при установке СУБД. 
 Если ошибки присутствуют то связаться с нами по вопросу их устранений 

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

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

 # Скачайте указанные ниже файлы из этого вики на ПК где установлен ora2pg и сложите их по одному пути: 
 #* attachment:conv_obj_attrs.cmd 
 #* attachment:ora2pg_OBJ_ATTRS_TBLS.conf 
 #* attachment:conv_other_tbls.cmd 
 #* attachment:ora2pg_OTHER_TBLS.conf 
 #* attachment:conv_data.cmd 
 #* attachment:ora2pg_DATA.conf  
 # Отредактируйте файлы указав свои настройки в ниже перечисленных местах 
 #* Исполняемые @.cmd@ скрипты: 
 <pre> 
 ora2pg -d -o OTHER_TBLS.pgsql -b <путь к файлам> -c <путь к файлам>\ora2pg_OTHER_TBLS.conf -l <путь к файлам>\OTHER_TBLS.log 
 </pre> 
 Где: 
 <путь к файлам> - путь куда вы скачали данные файлы. 
 # Файлы настроек для ora2pg. Файлы формата @.conf@ 
 <pre> 
 # 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 	 <пароль пользователся администратора Омеги> 
 </pre> 
 <pre> 
 # Oracle schema/owner to use 
 SCHEMA 		 <имя пользователя администратора> 
 </pre> 
 # *ВНИМАНИЕ: Если у вас есть свои таблицы внутри нашей схемы которые не заложены в поддерживаемый функционал Omega Production то этот пункт обязателен* 
 ## Открываем @ora2pg_OTHER_TBLS.conf@ и находим там длинный перечень как на скриншоте ниже: 
 !clipboard-202506061413-jh690.png! 
 ## Добавляем перечень ваших таблиц в этот список разделяя между собой проблемали 
 # *ВНИМАНИЕ: начиная с этого момента запуска база уже должна быть заблокирована и на ней никто в том числе пользователя администратора сидеть не должен!!!*  
 Запускаем @.cmd@ скрипты в порядке указанный ниже.  
 ## @conv_obj_attrs.cmd@ 
 ## @conv_other_tbls.cmd@ 
 ## @conv_data.cmd@ 

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

 В этом разделе все команды однообразны и представляют из себя запуск скриптов через psql 
 <pre><code class="shell"> 
 psql -h <имя ПК в сети или его IP адрес> -p <порт> -U <пользователь админимтратор омеги> -d <пользователь админимтратор омеги> -f <файл .pgsql> 1>>import_data.log 2>&1 
 </code></pre> 

 # Пустить скрипт для удаления текущих аттрибутов СО: 
 <pre><code class="sql"> 
 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 $$; 
 </code></pre> 
 # Пускаем все скрипты *кроме @DATA.pgsql@* через @psql@ как показано выше. После пуска скрипта проверяем лог на наличие ошибок (формата PostgreSQL). 
 Если не хватает какого то объекта из Оракл который не экспортировался - возвращаемся к [[#Миграция:-выгрузка-из-Oracle|Миграция: выгрузка из Oracle]] и повторяем выгрузку с включением недостающего объекта 
 # Скачиваем файл @data_wrap.pgsql@ на ПК где установлен ora2pg. 
 # Пускаем скрипт с удалением всех имеющихся данных. При повторном импорте данных этот скрипт надо пустить снова до импорта данных: 
 <pre><code class="sql"> 
 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; 
 </code></pre> 
 # Пускаем @data_wrap.pgsql@ через @psql@ как показано выше. После пуска скрипта проверяем лог на наличие ошибок (формата PostgreSQL). 
 Если не хватает какого то объекта из Оракл который не экспортировался - возвращаемся к [[#Миграция:-выгрузка-из-Oracle|Миграция: выгрузка из Oracle]] и повторяем выгрузку с включением недостающего объекта 

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

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

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

 # Специальные файлы приложения не нужны. Клиентское приложение уже работает с возможностью взаимодействовать с PostgreSQL. 
 # В файлах омеги редактируем OMP_DB.ini. Необходимо добавить строку подключения для PostgreSQL. Формат строки такой: 
 <pre> 
 ;Schema<порядковый номер> =<адрес сервера>:<порт>|POSTGRESQL@OMP_ADM@<Полное название для вашей базы> 
 </pre> 
 # Открываем омегу и пытаемся войти в пользователя администратора. После успешного логина в пользователя администратора проверяем логин в обычного пользователя.  
 Если у вас на данном этапу возникли ошибки то: 
 #* Если ошибка конфликт версий то это вероятнее всего значит что ошибки были допущены где то ранее. 
 #* Проверьте всё ли вы правильно сделали при установке PostgreSQL. Инструкция: [[PostgreInstall|ссылка]]. Особенно обратить внимание на конец инструкции где устаналиваются плагины необходимые для нашей базы данных 
 #* Проверьте корректно ли прописался search_path при установке PostgreSQL вот таким запросом: 
 <pre><code class="sql"> 
 select 1 from dual; 
 </code></pre> 
 Так как @dual@ в постгре по умолчанию нет он должен задействовать его из схемы oracle. Если будет ошибка что @dual@ не найден то вероятнее всего search_path прописан не корректно 

 Если возникнут сложности — пишите нам. Поможем