Migration OraToPG » История » Версия 5
BEA, 06.06.2025 15:12
1 | 1 | BEA | h1. Миграция с Oracle на PostgreSQL |
---|---|---|---|
2 | |||
3 | 4 | BEA | {{>toc}} |
4 | |||
5 | 1 | BEA | h2. Миграция на операционной системе Windows |
6 | |||
7 | 3 | BEA | h3. Подготовка к миграции: установка необходимого ПО |
8 | |||
9 | 1 | BEA | # Установка Perl |
10 | Скачайте и установите "Strawberry Perl":https://strawberryperl.com/. После установки убедитесь, что Perl добавлен в переменную среды *@PATH@*. |
||
11 | Проверьте установку выполнив команду: |
||
12 | <pre><code class="shell"> |
||
13 | perl -v |
||
14 | </code></pre> |
||
15 | # Установка Oracle Client. Уже описан процесс в нашей инструкции: [[OracleInstall|ссылка]] |
||
16 | # Установка зависимостей Perl |
||
17 | 3 | BEA | ## Откройте командную строку (cmd.exe) от имени администратора и выполните: |
18 | 1 | BEA | <pre><code class="perl"> |
19 | cpan DBI |
||
20 | cpan DBD::Oracle |
||
21 | cpan DBD::Pg |
||
22 | cpan XML::Simple |
||
23 | cpan DateTime |
||
24 | cpan JSON |
||
25 | cpan Term::ReadKey |
||
26 | cpan Test::Simple |
||
27 | </code></pre> |
||
28 | *Для установки модулей может потребоваться доступ в интернет и права администратора.* |
||
29 | 3 | BEA | ## Проверьте установленные зависимости при помощи команд: |
30 | <pre><code class="shell"> |
||
31 | perl -e "use DBI;" |
||
32 | perl -e "use DBD::Oracle;" |
||
33 | perl -e "use DBD::Pg;" |
||
34 | perl -e "use XML::Simple;" |
||
35 | perl -e "use DateTime;" |
||
36 | perl -e "use JSON;" |
||
37 | perl -e "use Term::ReadKey;" |
||
38 | perl -e "use Test::Simple;" |
||
39 | </code></pre> |
||
40 | 1 | BEA | # Установка ora2pg |
41 | 2 | BEA | ## 2 варианта для скачивания |
42 | ### Перейдите на их "оффициальный сайт":https://ora2pg.darold.net/. Найдите на сайте и перейлите по ссылке "GitHub Download v<version>". Скачиваем архив с исходниками: |
||
43 | !clipboard-202506060714-uwsux.png! |
||
44 | ### Если у вас установлен git то откройте консоль и перейдите в то местоположение куда хотите скачать. Выполните команду: |
||
45 | <pre><code class="shell"> |
||
46 | git clone https://github.com/darold/ora2pg.git |
||
47 | </code></pre> |
||
48 | ## Перейдите в папку с исходниками: |
||
49 | <pre><code class="shell"> |
||
50 | cd ora2pg |
||
51 | </code></pre> |
||
52 | Установите: |
||
53 | <pre><code class="shell"> |
||
54 | perl Makefile.PL |
||
55 | dmake |
||
56 | dmake install |
||
57 | </code></pre> |
||
58 | *Примечание:* Если dmake не найден, используйте gmake или nmake (входит в Strawberry Perl). |
||
59 | ## Проверка установки |
||
60 | <pre><code class="shell"> |
||
61 | ora2pg --version |
||
62 | </code></pre> |
||
63 | 1 | BEA | Если команда возвращает версию — установка прошла успешно. |
64 | # Скопируйте @tnsnames.ora@ из вашего рабочего клиента или сервера базы данных Oracle. Подробнее что за файл и откуда брать: [[Oracle|ссылка]] |
||
65 | # Проверка подключения к Oracle |
||
66 | 3 | BEA | ## Создайте конфигурационный файл ora2pg.conf используя файл шаблон который можно найти по пути где установлен ora2pg. |
67 | 1 | BEA | Пример минимальной конфигурации: |
68 | <pre> |
||
69 | # Set the Oracle home directory |
||
70 | 3 | BEA | ORACLE_HOME <путь ORACLE_HOME куда установлен Oracle клиент> |
71 | 1 | BEA | |
72 | # Set Oracle database connection (datasource, user, password) |
||
73 | ORACLE_DSN dbi:Oracle:host=<имя ПК в сети или его IP адрес>;service_name=<TNS имя вашего сервера>;port=<порт> |
||
74 | 3 | BEA | ORACLE_USER <имя пользователся администратора Омеги> |
75 | ORACLE_PWD <пароль пользователся администратора Омеги> |
||
76 | 1 | BEA | </pre> |
77 | 3 | BEA | ## Проверьте соединение с помощью команды: |
78 | <pre><code class="shell"> |
||
79 | 1 | BEA | ora2pg -t SHOW_VERSION -c /путь/к/вашему/ora2pg.conf |
80 | 3 | BEA | </code></pre> |
81 | 1 | BEA | или |
82 | 3 | BEA | <pre><code class="shell"> |
83 | ora2pg -c <путь к вашему ora2pg.conf> -e "SELECT * FROM dual;" |
||
84 | </code></pre> |
||
85 | 1 | BEA | Если соединение успешно, вы увидите ответ или версию базы данных. |
86 | |||
87 | 3 | BEA | h3. Подготовка к миграции: развёртывание PostgreSQL и приведение к одинаковой версии с Oracle |
88 | 1 | BEA | |
89 | 3 | BEA | # Установить PostgreSQL. Инструкция по установке: [[PostgreInstall|ссылка]] |
90 | # Произвести импорт стартовой версии БД Omega Production: |
||
91 | ## Дамп БД брать из нашего фтп сервера: ftp://demo:demo@internal.omp-system.ru/ServerDistr/DB/omp/dmp/postgres/omp_adm.sql |
||
92 | ## Рекомендуется переименовать базу данных в содержимом дампа на ту же что у вас сейчас на оракл. |
||
93 | То есть к примеру если у вас пользователь администратор омеги именуется как test_adm то ваша база данных именуется как test_adm. |
||
94 | В таком примере необходимо открыть дамп как текстовый файл и заменить по всему файлу OMP_ADM на TEST_ADM. (именно заглавными но в поиске/замене отключаем учитывание регистра) |
||
95 | ## Произвести импорт дампа при помощи консольных скриптов описанные в инструкции импорта/экспорта дампа: [[PostgreImportExport|ссылка]] |
||
96 | # Выслать отделу сопровождения текущую версию скриптов указанную в окне "О программе" внутри приложения Omega Production и написать чтобы прислали набор скриптов для обновления версии скриптов базы данных |
||
97 | # Проверить подключение к базе данных на устройстве на котором ранее устанавливали ora2pg |
||
98 | ## Используйте следующую команду для подключения: |
||
99 | <pre><code class="shell"> |
||
100 | psql -h <имя ПК в сети или его IP адрес> -p <порт> -U <пользователь> -d <имя_базы> |
||
101 | </code></pre> |
||
102 | Где: |
||
103 | - <пользователь> - имя пользователя администратора базы данных |
||
104 | - <имя_базы> - такое же как и имя пользователя администратора базы данных |
||
105 | При подключении вас попросят ввести пароль. |
||
106 | ## Проверка соединения |
||
107 | После успешного подключения вы увидите приглашение вида: |
||
108 | <pre> |
||
109 | <имя базы>=# |
||
110 | </pre> |
||
111 | Это означает, что соединение установлено. |
||
112 | ## Выполнение простых команд для проверки базы |
||
113 | ##* Проверка версий PostgreSQL: |
||
114 | <pre><code class="sql"> |
||
115 | SELECT version(); |
||
116 | </code></pre> |
||
117 | ##* Проверка содержимого OMP_PROPERTIES: |
||
118 | <pre><code class="sql"> |
||
119 | SELECT * FROM omp_properties op order by op.code LIMIT 10; |
||
120 | </code></pre> |
||
121 | ##* Выйти из psql: |
||
122 | <pre><code class="sql"> |
||
123 | \q |
||
124 | </code></pre> |
||
125 | # Дождаться ответа от нашего отдела сопровождения и получить набор скриптов для обновления базы данных. |
||
126 | ## В наборе скриптов должен присутствовать @run.bat@. Открыть его для редактирования и подправить параметры подключения к базе данных. |
||
127 | Содержимое данного скрипта будет из себя представлять уже ранее указанный в этой инструкции @psql ....@ |
||
128 | ## Дождаться конца выполнения. Проверить созданный лог на наличие ошибок. |
||
129 | Стандартный формат ошибок у PostgreSQL: :ERROR: на английском или :ОШИБКА: на русском в зависимости от выбранного языка при установке СУБД. |
||
130 | Если ошибки присутствуют то связаться с нами по вопросу их устранений |
||
131 | 2 | BEA | |
132 | 3 | BEA | *ВНИМАНИЕ: после данного этапа необходимо приостановить установку обновлений* |
133 | 2 | BEA | |
134 | 1 | BEA | h3. Миграция: выгрузка из Oracle |
135 | |||
136 | 4 | BEA | # Скачайте указанные ниже файлы из этого вики на ПК где установлен ora2pg и сложите их по одному пути: |
137 | 5 | BEA | #* attachment:conv_obj_attrs.cmd |
138 | #* attachment:ora2pg_OBJ_ATTRS_TBLS.conf |
||
139 | #* attachment:conv_other_tbls.cmd |
||
140 | #* attachment:ora2pg_OTHER_TBLS.conf |
||
141 | #* attachment:conv_data.cmd |
||
142 | #* attachment:ora2pg_DATA.conf |
||
143 | 3 | BEA | # Отредактируйте файлы указав свои настройки в ниже перечисленных местах |
144 | 5 | BEA | #* Исполняемые @.cmd@ скрипты: |
145 | 1 | BEA | <pre> |
146 | 5 | BEA | ora2pg -d -o OTHER_TBLS.pgsql -b <путь к файлам> -c <путь к файлам>\ora2pg_OTHER_TBLS.conf -l <путь к файлам>\OTHER_TBLS.log |
147 | </pre> |
||
148 | Где: |
||
149 | <путь к файлам> - путь куда вы скачали данные файлы. |
||
150 | # Файлы настроек для ora2pg. Файлы формата @.conf@ |
||
151 | <pre> |
||
152 | 3 | BEA | # Set the Oracle home directory |
153 | ORACLE_HOME <путь ORACLE_HOME куда установлен Oracle клиент> |
||
154 | |||
155 | # Set Oracle database connection (datasource, user, password) |
||
156 | ORACLE_DSN dbi:Oracle:host=<имя ПК в сети или его IP адрес>;service_name=<TNS имя вашего сервера>;port=<порт> |
||
157 | ORACLE_USER <имя пользователся администратора Омеги> |
||
158 | ORACLE_PWD <пароль пользователся администратора Омеги> |
||
159 | </pre> |
||
160 | <pre> |
||
161 | # Oracle schema/owner to use |
||
162 | 1 | BEA | SCHEMA <имя пользователя администратора> |
163 | </pre> |
||
164 | 5 | BEA | # *ВНИМАНИЕ: Если у вас есть свои таблицы внутри нашей схемы которые не заложены в поддерживаемый функционал Omega Production то этот пункт обязателен* |
165 | ## Открываем @ora2pg_OTHER_TBLS.conf@ и находим там длинный перечень как на скриншоте ниже: |
||
166 | !clipboard-202506061413-jh690.png! |
||
167 | ## Добавляем перечень ваших таблиц в этот список разделяя между собой проблемали |
||
168 | # *ВНИМАНИЕ: начиная с этого момента запуска база уже должна быть заблокирована и на ней никто в том числе пользователя администратора сидеть не должен!!!* |
||
169 | Запускаем @.cmd@ скрипты в порядке указанный ниже. |
||
170 | ## @conv_obj_attrs.cmd@ |
||
171 | ## @conv_other_tbls.cmd@ |
||
172 | ## @conv_data.cmd@ |
||
173 | 3 | BEA | |
174 | 1 | BEA | h3. Миграция: загрузка в PostgreSQL |
175 | |||
176 | 5 | BEA | В этом разделе все команды однообразны и представляют из себя запуск скриптов через psql |
177 | <pre><code class="shell"> |
||
178 | psql -h <имя ПК в сети или его IP адрес> -p <порт> -U <пользователь админимтратор омеги> -d <пользователь админимтратор омеги> -f <файл .pgsql> 1>>import_data.log 2>&1 |
||
179 | </code></pre> |
||
180 | 1 | BEA | |
181 | 5 | BEA | # Пускаем все скрипты *кроме @DATA.pgsql@* через @psql@ как показано выше. После пуска скрипта проверяем лог на наличие ошибок (формата PostgreSQL). |
182 | Если не хватает какого то объекта из Оракл который не экспортировался - возвращаемся к [[#Миграция:-выгрузка-из-Oracle|Миграция: выгрузка из Oracle]] и повторяем выгрузку с включением недостающего объекта |
||
183 | # Скачиваем файл @data_wrap.pgsql@ на ПК где установлен ora2pg. |
||
184 | # Пускаем @data_wrap.pgsql@ через @psql@ как показано выше. После пуска скрипта проверяем лог на наличие ошибок (формата PostgreSQL). |
||
185 | Если не хватает какого то объекта из Оракл который не экспортировался - возвращаемся к [[#Миграция:-выгрузка-из-Oracle|Миграция: выгрузка из Oracle]] и повторяем выгрузку с включением недостающего объекта |
||
186 | |||
187 | h3. Миграция: функции, процедуры и прочее |
||
188 | |||
189 | Мы не производим миграцию функций, процедур и прочего по причинам: |
||
190 | * Оптимизация времени миграции: базовый макет БД Omega Production предоставляется заранее что позволяет меньше времени затратить на критический сегмент этого процесса где блокируется БД |
||
191 | * На момент того когда мы сами мигрировали БД для создания стартового макета на POstgreSQL утилита ora2pg не может полностью корректно конвертировать данные объекты. |
||
192 | |||
193 | Если возникнут сложности — пишите нам. Поможем |