Migration OraToPG » История » Редакция 5
Редакция 4 (BEA, 06.06.2025 13:52) → Редакция 5/12 (BEA, 06.06.2025 15:12)
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>
# Пускаем все скрипты *кроме @DATA.pgsql@* через @psql@ как показано выше. После пуска скрипта проверяем лог на наличие ошибок (формата PostgreSQL).
Если не хватает какого то объекта из Оракл который не экспортировался - возвращаемся к [[#Миграция:-выгрузка-из-Oracle|Миграция: выгрузка из Oracle]] и повторяем выгрузку с включением недостающего объекта
# Скачиваем файл @data_wrap.pgsql@ на ПК где установлен ora2pg.
# Пускаем @data_wrap.pgsql@ через @psql@ как показано выше. После пуска скрипта проверяем лог на наличие ошибок (формата PostgreSQL).
Если не хватает какого то объекта из Оракл который не экспортировался - возвращаемся к [[#Миграция:-выгрузка-из-Oracle|Миграция: выгрузка из Oracle]] и повторяем выгрузку с включением недостающего объекта
h3. Миграция: функции, процедуры и прочее
Мы не производим миграцию функций, процедур и прочего по причинам:
* Оптимизация времени миграции: базовый макет БД Omega Production предоставляется заранее что позволяет меньше времени затратить на критический сегмент этого процесса где блокируется БД
* На момент того когда мы сами мигрировали БД для создания стартового макета на POstgreSQL утилита ora2pg не может полностью корректно конвертировать данные объекты.
Если возникнут сложности — пишите нам. Поможем предоставьте вывод ошибок, я помогу их интерпретировать!