Глава 4. Настройка

Настройка 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:

ora2pgpro [-dhpqv --estimate_cost --dump_as_html] [--параметр	значение]
-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, чтобы импортировать файлы интерактивно. Если миграция не выполняется сразу, рекомендуется использовать эти скрипты.