ora2pgpro

ora2pgpro — перенести базу данных из Oracle в Postgres Pro

Синтаксис

ora2pgpro [ параметр ...]

ora2pgpro [ -c файл_конфигурации ] [ -t тип_экспорта ] [ -o выходной_файл ]

ora2pgpro [ -s dsn ] [ -u пользователь ] [ -w пароль ]

ora2pgpro -i входной_файл [ -p ]

ora2pgpro --project_base каталог --init_project имя_проекта

ora2pgpro { -h | --help | -v | --version }

Конфигурация

Настройка ora2pgpro заключается в выборе экспортируемой БД Oracle и типа экспорта.

Используя один файл конфигурации ora2pgpro.conf, можно полностью управлять процессом миграции БД Oracle. В файле записывается имя директивы заглавными буквами и её значение после символа табуляции. Строки, начинающиеся с #, представляют собой комментарии. Директивы можно задавать в любом порядке, а включаются они при считывании значения в файле конфигурации.

Директивы, принимающие одно значение, можно задавать в файле конфигурации несколько раз, при этом будет использоваться последнее вхождение. Директивы, принимающие список значений, также можно задавать несколько раз, и значения из последующих вхождений будут добавляться в список. Если для загрузки пользовательского файла конфигурации используется директива IMPORT, директивы из этого файла будут сохраняться в файле конфигурации после директивы IMPORT, поэтому рекомендуется задавать её в конце файла конфигурации.

Значения, переданные в командой строке, переопределяют значения из файла конфигурации.

Сначала необходимо убедиться, что пути ко всем библиотекам и двоичным файлам включают каталог установки Oracle Instant Client:

export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
export PATH="/usr/lib/oracle/11.2/client64/bin:$PATH"

По умолчанию ora2pgpro выполняет поиск файла конфигурации /etc/ora2pgpro/ora2pgpro.conf, и если этот файл существует, достаточно выполнить команду:

/usr/local/bin/ora2pgpro

Если необходимо вызвать другой файл конфигурации, задайте путь в командной строке:

/usr/local/bin/ora2pgpro -c /etc/ora2pgpro/new_ora2pgpro.conf

Параметры командной строки

Утилита ora2pgpro поддерживает следующие параметры командной строки:

-a
--allow

Задать список экспортируемых объектов, разделённых запятыми. Параметр может также использоваться с типом SHOW_COLUMN.

-b
--basedir

Задать выходной каталог для файлов, полученных в результате экспорта.

-c
--conf

Указать файл конфигурации, отличный от используемого по умолчанию /etc/ora2pgpro/ora2pgpro_scanner.conf.

-C
--cdc_file

Указать файл для хранения/чтения SCN таблиц во время экспорта. По умолчанию: TABLES_SCN.log в текущем каталоге. Для создания этого файла используйте параметр --cdc_ready.

-d
--debug

Выводить подробные сообщения.

-D
--data_type

Разрешить использование пользовательских типов в командной строке.

-e
--exclude

Исключить из экспорта список указанных объектов, разделённых запятыми. Может использоваться с типом SHOW_COLUMN.

-h
--help

Выводить краткую справку.

-g
--grant_object

Извлекать права для данного типа объектов. Возможные значения даны в описании конфигурации GRANT_OBJECT.

-i
--input

Указать файл, содержащий код PL/SQL для портирования, когда подключение к БД Oracle отсутствует.

-j
--jobs

Задать число параллельных процессов при передаче данных в Postgres Pro.

-J
--copies

Задать число параллельных соединений для извлечения данных из Oracle.

-l
--log

Указать файл журнала. По умолчанию: stdout.

-L
--limit

Задать количество кортежей, извлекаемых из Oracle и сохраняемых в памяти до записи, по умолчанию 10000.

-n
--namespace

Указать схему Oracle для извлечения данных.

-N
--pg_schema

Задать search_path для Postgres Pro.

-o
--out

Указать путь к выходному файлу, в который записываются команды SQL. По умолчанию: output.sql в текущем каталоге.

-p
--plsql

Включить преобразование кода PL/SQL в код PL/pgSQL.

-P
--parallel

Задать число таблиц для параллельного извлечения данных.

-q
--quiet

Отключить вывод индикатора выполнения.

-r
--relative

Использовать параметр \ir вместо \i в создаваемых скриптах psql.

-s
--source

Задать источник данных DBI для Oracle.

-S
--scn

Задать системный номер изменения Oracle (System Change Number, SCN) для экспорта данных. Он используется в предложениях WHERE для получения данных с типами экспорта COPY или INSERT.

-t
--type

Задать тип экспорта. Параметр переопределяет значение, заданное в файле конфигурации (TYPE).

-T
--temp_dir

Указать отдельный временный каталог для одновременного запуска двух или более экземпляров ora2pgpro.

-u
--user

Указать пользователя для подключения к БД Oracle. Вместо этого параметра можно использовать переменную окружения ORA2PG_USER.

-v
--version

Показать версию ora2pgpro и прервать выполнение.

-w
--password

Указать пароль для пользователя БД Oracle. Вместо этого параметра можно использовать переменную окружения ORA2PG_PASSWD.

-W
--where

Задать предложение WHERE, добавляемое к запросу Oracle для получения данных. Параметр можно указывать несколько раз.

--forceowner

Принудительно назначать владельца таблиц и последовательностей, как в Oracle. Если в значении указать имя пользователя, он будет назначен владельцем. По умолчанию владельцем будет пользователь, используемый для подключения к БД Postgres Pro.

--nls_lang

Задать кодировку клиента Oracle в NLS_LANG.

--client_encoding

Задать кодировку клиента Postgres Pro.

--view_as_table

Указать список представлений, разделённых запятыми, для экспорта в виде таблиц.

--estimate_cost

Включить SHOW_REPORT для помощи в оценке стоимости миграции.

--cost_unit_value

Задать число минут для оценки стоимости. По умолчанию 5 минут, что соответствует скорости миграции, выполняемой специалистом Postgres Pro. Для первой миграции установите значение 10.

--dump_as_html

Выгружать отчёт в формате HTML. Параметр используется только с SHOW_REPORT. По умолчанию отчёт выгружается в формате простого текста.

--dump_as_csv

Аналогично предыдущему, но отчёт выгружается в формате CSV.

--dump_as_sheet

Выводить отчёт по оценке миграции с отдельной строкой в формате CSV для каждой БД.

--init_project

Инициализировать стандартное дерево проекта ora2pgpro. Каталог верхнего уровня создаётся в базовом каталоге проекта.

--project_base

Указать базовый каталог для деревьев проекта ora2pgpro. По умолчанию это текущий каталог.

--print_header

Выводить заголовок CSV, что особенно полезно при первом запуске ora2pgpro. Параметр используется вместе с параметром --dump_as_sheet.

--human_days_limit

Задать предел человеко-дней, по достижении которого уровень оценки миграции меняется с B на C. По умолчанию 5 человеко-дней.

--audit_user

Указать список имён пользователей для фильтрации запросов в таблице AUDIT_USER. Используется только с типами экспорта SHOW_REPORT и QUERY.

--pg_dsn

Указать источник данных для прямого импорта в Postgres Pro.

--pg_user

Указать пользователя Postgres Pro.

--pg_pwd

Указать пароль пользователя Postgres Pro.

--count_rows

Принудительно подсчитывать действительное количество строк при выполнении TEST, TEST_COUNT и SHOW_TABLE.

--no_header

Не выводить заголовок ora2pgpro в выходной файл.

--oracle_speed

Узнать скорость, с которой могут передаваться данные из Oracle. Данные не обрабатываются и не записываются.

--ora2pg_speed

Узнать скорость, с которой ora2pgpro может отправлять преобразованные данные. Данные не записываются.

--blob_to_lo

Экспортировать BLOB в виде больших объектов. Параметр может использоваться только при выполнении SHOW_COLUMN, TABLE и INSERT.

--cdc_ready

Использовать текущие SCN для экспорта данных из таблиц и записать их в файл под названием TABLES_SCN.log по умолчанию. Другое имя файла можно указать, используя параметр -C|--cdc_file.

--lo_import

Использовать команду psql \lo_import для импорта BLOB в виде больших объектов. Параметр можно использовать для импорта с типом COPY и последующим импортом большого объекта вручную. Необходим для импорта BLOB размером более 1 ГБ.

--mview_as_table

Указать список материализованных представлений, разделённых запятыми, для экспорта в виде обычных таблиц.

--drop_if_exists

Удалить объект перед созданием, если он уже существует.

--offline

Преобразовывать экспортируемые данные без подключения к БД Oracle.

В случае успеха ora2pgpro возвращает 0, а в случае ошибки 1. Если дочерний процесс прерывается, возвращается 2 и выводится следующее предупреждение: «WARNING: an error occurs during data export. Please check what's happen.» (ПРЕДУПРЕЖДЕНИЕ: Во время экспорта данных произошла ошибка. Обратите внимание.) В большинстве случаев ошибка вызвана нехваткой памяти — попробуйте уменьшить значение DATA_LIMIT.

Обратите внимание, что производительность можно увеличить, обновив статистику в Oracle:

DBMS_STATS.GATHER_SCHEMA_STATS
DBMS_STATS.GATHER_DATABASE_STATS
DBMS_STATS.GATHER_DICTIONARY_STATS

Если заданы параметры --project_base и --init_project, ora2pgpro создаёт шаблон проекта, содержащий дерево проекта, файл конфигурации и скрипт для экспорта всех объектов из БД Oracle. Пример использования команды:

ora2pgpro --project_base /app/migration/ --init_project test_project
	Creating project test_project.
	/app/migration/test_project/
		schema/
			dblinks/
			directories/
			functions/
			grants/
			mviews/
			packages/
			partitions/
			procedures/
			sequences/
			synonyms/
			tables/
			tablespaces/
			triggers/
			types/
			views/
		sources/
			functions/
			mviews/
			packages/
			partitions/
			procedures/
			triggers/
			types/
			views/
		data/
		config/
		reports/

	Generating generic configuration file
	Creating script export_schema.sh to automate all exports.
	Creating script import_all.sh to automate all imports.

При этом создаётся стандартный файл конфигурации, в котором можно задать параметры подключения к БД Oracle, и скрипт оболочки export_schema.sh. Каталог sources/ будет содержать код Oracle, каталог schema/ — код для портирования в Postgres Pro. Каталог reports/ будет содержать HTML-отчёты, которые помогают оценить стоимость миграции.

Если вы хотите использовать собственный файл конфигурации, укажите путь к нему в параметре -c. Допишите к имени файла суффикс .dist, чтобы добавить в него стандартные параметры конфигурации ora2pgpro, в противном случае файл будет копирован в исходном состоянии.

После установки подключения к БД Oracle можно выполнить скрипт export_schema.sh, чтобы экспортировать все типы объектов из БД Oracle и вывести файлы DDL в подкаталоги схемы. По завершении процесса, когда импортируемая схема будет проверена, будет выдана команда для последующего экспорта данных.

Можно загрузить созданные файлы DDL вручную или воспользоваться скриптом import_all.sh, чтобы импортировать файлы интерактивно. Если миграция не выполняется сразу, рекомендуется использовать эти скрипты.

Авторы #

Postgres Professional, Москва, Россия.