Нижеописанные директивы напрямую влияют на процесс экспорта и дают возможность оптимально настроить его.
SKIP
Если с типом экспорта
TABLE
не нужно экспортировать все ограничения схемы, укажите в директивеSKIP
список ненужных ограничений, разделённых пробелами или запятыми. Возможные значения:fkeys
: исключить ограничения внешнего ключа.pkeys
: исключить первичные ключи.ukeys
: исключить ограничения уникальности столбцов.indexes
: исключить все остальные типы индексов.checks
: исключить ограничения-проверки.
SKIP indexes,checks
В примере выше из экспорта исключаются индексы и ограничения-проверки.
PKEY_IN_CREATE
Включите эту директиву, если необходимо добавить определение первичного ключа в оператор CREATE TABLE. Если директива отключена (по умолчанию), определение первичного ключа добавляется в оператор ALTER TABLE.
KEEP_PKEY_NAMES
По умолчанию имена первичных и уникальных ключей в исходной БД Oracle игнорируются, они генерируются автоматически в целевой БД Postgres Pro по соответствующим правилам именования. Если необходимо сохранить имена первичных и уникальных ключей из Oracle, задайте для этой директивы значение 1.
FKEY_ADD_UPDATE
Эта директива позволяет добавить параметр
ON UPDATE CASCADE
для внешнего ключа, когда естьON DELETE CASCADE
или всегда. Oracle не поддерживает эту функциональность, для добавленияON UPDATE CASCADE
необходимо использовать триггер. Поскольку в Postgres Pro эта функциональность есть, можно выбрать метод добавления действия внешнего ключа. Для директивы доступны следующие значения:never
: внешние ключи объявляются так, как в Oracle.delete
: действиеON UPDATE CASCADE
добавляется только, если для внешних ключей естьON DELETE CASCADE
.always
: внешние ключи определяются во время изменения.
FKEY_DEFERRABLE
При экспорте таблиц ora2pgpro, как правило, экспортирует ограничения как есть: если они неоткладываемые, то экспортируются как неоткладываемые. Однако неоткладываемые ограничения могут вызвать проблемы при попытке импорта данных в Postgres Pro. Задайте для директивы
FKEY_DEFERRABLE
значение 1, чтобы все ограничения внешнего ключа экспортировались как откладываемые.DEFER_FKEY
Когда для директивы
DEFER_FKEY
задано значение 1, добавляется команда для откладывания всех ограничений внешнего ключа во время экспорта, а импорт выполняется в одной транзакции. Это будет работать, только если внешние ключи экспортируются как откладываемые и данные не импортируются в Postgres Pro напрямую (не задана директиваPG_DSN
). Ограничения проверяются в конце транзакции.Кроме того, директиву можно включить, чтобы принудительно создавать все внешние ключи как откладываемые и изначально отложенные во время экспорта схемы (тип экспорта
TABLE
).DROP_FKEY
Если откладывание внешних ключей не представляется возможным из-за большого объёма данных в одной транзакции, внешние ключи не были экспортированы как откладываемые или импорт в Postgres Pro осуществляется напрямую, можно использовать директиву
DROP_FKEY
, чтобы удалить все внешние ключи до импорта данных и создать их заново в конце импорта.DROP_INDEXES
Эта директива позволяет значительно увеличить скорость импорта данных путём удаления всех индексов, не являющихся автоматическими (индексы по первичным ключам), и создания их заново в конце импорта. Рекомендуется не импортировать индексы и ограничения до импорта всех данных.
DISABLE_TRIGGERS
Директива используется для отключения триггеров для всех таблиц при типе экспорта
COPY
илиINSERT
. Возможные значения:USER
(отключение только пользовательских триггеров) иALL
(включая системные триггеры для ссылочной целостности). Значение по умолчанию 0 — для отключения триггера до импорта данных SQL-операторы не добавляются.Если необходимо отключить триггеры во время миграции данных, при подключении под именем суперпользователя Postgres Pro задайте значение
ALL
, в противном случае —USER
. Значение 1 равняетсяUSER
.DISABLE_SEQUENCE
Со значением 1 директива отключает изменение последовательностей для всех таблиц, если указан тип экспорта
COPY
илиINSERT
. Полезно во избежание изменения последовательности во время миграции данных. Значение по умолчанию — 0, то есть последовательности меняются.NOESCAPE
По умолчанию все данные типов, отличных от даты или времени, должны экранироваться. Если с этим возникают проблемы, задайте для данной директивы значение 1, чтобы отключить экранирование символов во время экспорта данных. Эта директива используется только с типом экспорта
COPY
. Включить/отключить экранирование символов для операторов INSERT можно с помощью директивыSTANDARD_CONFORMING_STRINGS
.STANDARD_CONFORMING_STRINGS
Эта директива определяет, будет ли обратная косая черта в обычных строковых константах (
'...'
) восприниматься буквально, как того требует стандарт SQL. По умолчанию директива включена, то есть при её ненулевом значении ora2pgpro использует синтаксис спецпоследовательностей(E'...')
. Директива работает точно так же, как аналогичный параметр в Postgres Pro, и используется во время экспорта только для операторовINSERT
. Включить/отключить экранирование символов для операторов COPY можно с помощью директивыNOESCAPE
.TRIM_TYPE
Если для преобразования CHAR(n) из Oracle в varchar(n) или text в Postgres Pro задана директива
DATA_TYPE
, может потребоваться усечение данных. Если задать данную директиву, по умолчанию ora2pgpro автоматически находит и удаляет пробельные символы в начале и конце строки (значениеBOTH
). Если необходимо удалять пробелы только в начале строк, задайте значениеLEADING
. Если необходимо удалять пробелы только в конце строк, задайте значениеTRAILING
.TRIM_CHAR
По умолчанию директива закомментирована, усекаются пробелы. Используйте директиву, чтобы поменять удаляемый символ: например, на
-
, чтобы усекать-
в начале поля типа char(n).PRESERVE_CASE
Если необходимо сохранить регистр имён объектов Oracle, задайте для этой директивы значение 1. По умолчанию ora2pgpro преобразует все имена объектов Oracle в нижний регистр. Не рекомендуется включать эту директиву, поскольку в таком случае придётся заключать в кавычки все имена объектов во всех SQL-скриптах.
ORA_RESERVED_WORDS
Разрешает экранировать имена столбцов с использованием зарезервированных слов Oracle. В значении указывается список зарезервированных слов, разделённых запятыми. По умолчанию:
audit,comment,references
.USE_RESERVED_WORDS
Включите эту директиву, если есть имена таблиц или столбцов, являющиеся зарезервированными словами Postgres Pro. ora2pgpro заключит имена таких объектов в кавычки.
GEN_USER_PWD
Задайте для этой директивы значение 1, чтобы заменить пароль по умолчанию случайным паролем для всех пользователей во время экспорта
GRANT
.PG_SUPPORTS_MVIEW
В Postgres Pro материализованные представления создаются с помощью SQL-синтаксиса CREATE MATERIALIZED VIEW. Используйте эту директиву (по умолчанию включена), чтобы в ora2pgpro использовалась встроенная поддержка Postgres Pro. Отключите директиву, чтобы использовать старый вариант синтаксиса с таблицей и набором функций.
PG_VERSION
Задаёт номер мажорной версии целевой БД Postgres Pro. Например: 11 или 16. Значение по умолчанию — последняя мажорная версия на момент релиза.
BITMAP_AS_GIN
Включает использование расширения btree_gin для создания индексов со сканированием битовой карты. Расширение должно быть создано. По умолчанию создаются индексы GIN, когда директива отключена — индексы B-деревья.
LONGREADLEN
Используйте эту директиву, чтобы задать предполагаемый размер самого большого объекта в Oracle по свойству
LongReadLen
. Значение по умолчанию — 1 МБ, чего может быть недостаточно для извлечения файлов BLOB или CLOB. Если размер LOB превышаетLONGREADLEN
,DBD::Oracle
возвращает ошибку «ORA-24345: A Truncation» (Усечение). По умолчанию: 1023*1024 байт.Важно
Если увеличить значение этой директивы, по всей вероятности нужно уменьшить значение
DATA_LIMIT
. Даже если размер файла BLOB составляет 1МБ, при попытке прочитать 10000 таких файлов (значениеDATA_LIMIT
по умолчанию) понадобится 10 ГБ памяти. Попробуйте извлекать данные из таких таблиц по очереди и задать дляDATA_LIMIT
значение 500 или ниже, в противном случае может произойти нехватка памяти.LONGTRUNKOK
Если необходимо обойти ошибку «ORA-24345: A Truncation», задайте для этой директивы значение 1, чтобы данные усекались до значения
LONGREADLEN
. По умолчанию директива отключена, то есть будет выводиться предупреждение, если дляLONGREADLEN
задано недостаточно большое значение.USE_LOB_LOCATOR
Отключите эту директиву, если необходимо загрузить содержимое файлов BLOB и CLOB полностью без использования указателей на LOB. Для этого необходимо выставить подходящее значение
LONGREADLEN
. Обратите внимание, что при этом скорость экспорта BLOB не увеличится, поскольку большая часть времени уходит на экранирование значений bytea и экспорт происходит построчно, а не блоками поDATA_LIMIT
строк. По умолчанию директива включена, используются указатели на LOB.LOB_CHUNK_SIZE
Oracle рекомендует чтение и запись LOB порциями величиной, кратной размеру блоков LOB. Размер блока по умолчанию составляет 8КБ (8192). Последние тесты показывали улучшение производительности при более высоких значениях, таких как 512KБ или 4МБ.
Результаты быстрого теста на 30120 строках с файлами BLOB разного размера (200x5МБ, 19800x212КБ, 10000x942КБ, 100x17МБ, 20x156МБ) при DATA_LIMIT=100, LONGREADLEN=170МБ и общим размером таблицы 20 ГБ:
no lob locator : 22m46,218s (1365 sec., avg: 22 recs/sec) chunk size 8k : 15m50,886s (951 sec., avg: 31 recs/sec) chunk size 512k : 1m28,161s (88 sec., avg: 342 recs/sec) chunk size 4Mb : 1m23,717s (83 sec., avg: 362 recs/sec)
Таким образом, со значением
LOB_CHUNK_SIZE
в 4 МБ можно получить ускорение более чем в 10 раз. В этой директиве можно подбирать подходящее значение в зависимости от размера большинства объектов BLOB. Например, если размер большинства объектов LOB меньше 8KБ, достаточно задать для директивы значение 8192 для экономии памяти. ЗначениеLOB_CHUNK_SIZE
по умолчанию — 512000.XML_PRETTY
Указывает использовать функцию
getStringVal()
вместоgetClobVal()
для экспорта данных XML. По умолчанию 1, функциональность включена для обратной совместимости. Задайте значение 0, чтобы извлекать данные как CLOB. Обратите внимание, что значение XML, извлекаемое с помощью withgetStringVal()
не должно превышать заданный в VARCHAR2 предел (4000), в противном случае выдаётся ошибка.ENABLE_MICROSECOND
Задайте для директивы значение O, если необходимо отключить экспорт миллисекунд из столбцов типа timestamp Oracle. По умолчанию миллисекунды экспортируются с использованием следующего формата:
'YYYY-MM-DD HH24:MI:SS.FF'
При отключенной директиве будет использоваться такой формат:
to_char(..., 'YYYY-MM-DD HH24:MI:SS')
По умолчанию миллисекунды экспортируются.
DISABLE_COMMENT
Задайте для директивы значение 1, чтобы не экспортировать комментарии к таблицам и столбцам. По умолчанию директива включена.