4.6. Экспортируемая схема Oracle #

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

SCHEMA #

Директива используется для указания имени схемы, используемой во время экспорта. Например, с указанием SCHEMA APPS будут выгружены объекты, связанные со схемой APPS.

Если включить EXPORT_SCHEMA и не задать имя схемы, ora2pgpro экспортирует все объекты из всех схем экземпляра Oracle, добавляя к именам объектов имя схемы в виде префикса.

EXPORT_SCHEMA #

По умолчанию схема Oracle не экспортируется в БД Postgres Pro, а все объекты создаются в пространстве имён Postgres Pro по умолчанию. Если необходимо и экспортировать схему, и создать все объекты в этом пространстве имён, задайте для EXPORT_SCHEMA значение 1. При этом в пути к схеме (search_path) в начале SQL-файла для экспорта будет записана схема, указанная в директиве SCHEMA (по умолчанию pg_catalog). Если вы хотите изменить путь, используйте директиву PG_SCHEMA.

CREATE_SCHEMA #

Директива включает/отключает команду CREATE SCHEMA в начале выходного файла. По умолчанию включена, используется с типом экспорта TABLE.

COMPILE_SCHEMA #

По умолчанию ora2pgpro экспортирует только рабочий код PL/SQL. Можно перекомпилировать нерабочий код в Oracle, чтобы добиться корректности и в дальнейшем экспортировать его.

Чтобы схема компилировалась в Oracle перед экспортом кода, включите эту директиву. В этом случае, если в SCHEMA задано определённое имя схемы, только нерабочие объекты в этой схеме будут перекомпилированы. Если директива SCHEMA не задана, все схемы будут перекомпилированы. Чтобы принудительно перекомпилировать нерабочие объекты в определённой схеме, укажите в COMPILE_SCHEMA имя этой схемы.

При этом в Oracle отправится запрос на перекомпиляцию кода PL/SQL, который мог стать нерабочим, например, после экспорта/импорта. В результате для функций, процедур, пакетов и пользовательских типов проставляется статус VALID или INVALID. Кроме того, это распространяется на отключённые триггеры.

EXPORT_INVALID #

Если предыдущей директивы недостаточно для проверки корректности кода PL/SQL, включите эту директиву, чтобы разрешить экспорт всего кода PL/SQL, даже если он помечен как нерабочий. В результате для функций, процедур, пакетов и пользовательских типов проставляется статус VALID или INVALID.

PG_SCHEMA #

Позволяет указать / принудительно использовать схему Postgres Pro. По умолчанию, если для EXPORT_SCHEMA задано значение 1, для параметра search_path в Postgres Pro будет задано имя схемы, указанной в SCHEMA.

Значением может быть список имён схем, разделённых запятыми, но не с типом экспорта TABLE, потому что в этом случае создаётся оператор CREATE SCHEMA, не поддерживающий несколько имён схем. Например, если для PG_SCHEMA указать user_schema, public, путь поиска задаётся следующим образом:

SET search_path = user_schema, public;

В этом случае используется схема (здесь user_schema), отличная от схемы Oracle, которая указана в директиве SCHEMA.

Кроме того, для пользователя Postgres Pro, под именем которого вы подключаетесь к целевой базе данных, можно задать значение search_path по умолчанию следующим образом:

ALTER ROLE username SET search_path TO user_schema, public;

Тогда задавать PG_SCHEMA не понадобится.

SYSUSERS #

Если не задать схему явным образом, ora2pgpro экспортирует все объекты, не принадлежащие системной схеме или роли:

SYSTEM,CTXSYS,DBSNMP,EXFSYS,LBACSYS,MDSYS,MGMT_VIEW,
OLAPSYS,ORDDATA,OWBSYS,ORDPLUGINS,ORDSYS,OUTLN,
SI_INFORMTN_SCHEMA,SYS,SYSMAN,WK_TEST,WKSYS,WKPROXY,
WMSYS,XDB,APEX_PUBLIC_USER,DIP,FLOWS_020100,FLOWS_030000,
FLOWS_040100,FLOWS_010600,FLOWS_FILES,MDDATA,ORACLE_OCM,
SPATIAL_CSW_ADMIN_USR,SPATIAL_WFS_ADMIN_USR,XS$NULL,PERFSTAT,
SQLTXPLAIN,DMSYS,TSMSYS,WKSYS,APEX_040000,APEX_040200,
DVSYS,OJVMSYS,GSMADMIN_INTERNAL,APPQOSSYS,DVSYS,DVF,
AUDSYS,APEX_030200,MGMT_VIEW,ODM,ODM_MTR,TRACESRV,MTMSYS,
OWBSYS_AUDIT,WEBSYS,WK_PROXY,OSE$HTTP$ADMIN,
AURORA$JIS$UTILITY$,AURORA$ORB$UNAUTHENTICATED,
DBMS_PRIVILEGE_CAPTURE,CSMIG,MGDSYS,SDE,DBSFWUSER

В зависимости от инсталляции Oracle, могут быть определены несколько системных ролей. Чтобы добавить этих пользователей в список исключений схемы, укажите их через запятую в директиве SYSUSERS. Например:

SYSUSERS        INTERNAL,SYSDBA,BI,HR,IX,OE,PM,SH

В результате пользователи INTERNAL и SYSDBA будут добавлены в список исключений.

FORCE_OWNER #

По умолчанию владельцем объектов БД будет пользователь, используемый для подключения к БД Postgres Pro в psql. Если используется другой пользователь (например, postgres), можно указать ora2pgpro назначать владельцем объектов пользователя, используемого в БД Oracle, задав для этой директивы значение 1. Если в значении указать имя пользователя, он и будет назначен владельцем.

FORCE_SECURITY_INVOKER #

Для экспорта функций ora2pgpro использует права из Oracle (чаще всего SECURITY DEFINER). Включите эту директиву, если необходимо переопределить права для всех функций на SECURITY INVOKER.

USE_TABLESPACE #

Когда директива включена, ora2pgpro экспортирует все таблицы, ограничения и индексы, используя имя пространства имён, указанное в БД Oracle. Не работает с пространствами имён TEMP, USERS и SYSTEM.

WITH_OID #

Когда директива включена, при создании таблиц или представлений как таблиц ora2pgpro добавляет указание WITH OIDS. По умолчанию отключена, как и в Postgres Pro.

NO_FUNCTION_METADATA #

Отключает поиск объявления функции для ora2pgpro. Обратите внимание, что при этом ora2pgpro не будет перезаписывать вызов функции. Включайте эту директиву, только если поиск функции нарушает экспорт.

4.6.1. Тип экспорта #

Директива TYPE определяет выполняемые во время экспорта действия, другие директивы позволяют только уточнить детали экспорта.

TYPE #

Для директивы TYPE можно задать следующие значения (по умолчанию TABLE):

  • TABLE: извлекать все таблицы с индексами, первичными ключами, ограничениями уникальности, внешними ключами и ограничениями-проверками.
  • VIEW: извлекать только представления.
  • GRANT: извлекать роли, преобразуемые в группы Postgres Pro, пользователей и права для все объектов.
  • SEQUENCE: извлекать все последовательности и их текущие значения.
  • TABLESPACE: извлекать пространства для таблиц и индексов.
  • TRIGGER: извлекать событийные триггеры.
  • FUNCTION: извлекать функции.
  • PROCEDURE: извлекать процедуры.
  • PACKAGE: извлекать пакеты и тела пакетов.
  • INSERT: извлекать данные через оператор INSERT.
  • COPY: извлекать данные через оператор COPY.
  • PARTITION: извлекать секции по диапазонам и спискам с подсекциями.
  • TYPE: извлекать пользовательские типы Oracle.
  • FDW: извлекать таблицы Oracle как сторонние таблицы для oracle_fdw.
  • MVIEW: эскпортировать материализованные представления.
  • QUERY: автоматически преобразовывать SQL-запросы Oracle.
  • DBLINK: создать сервер обёртки сторонних данных Oracle, чтобы использовать его как dblink.
  • SYNONYM: экспортировать синонимы Oracle как представления на базе других объектов схемы.
  • DIRECTORY: экспортировать каталоги Oracle как объекты расширения external_file.
  • LOAD: отправлять набор запросов с использованием нескольких соединений с Postgres Pro.
  • TEST: выполнить сравнение БД Oracle и Postgres Pro.
  • TEST_COUNT: выполнить сравнение количества строк в таблицах Oracle и Postgres Pro.
  • TEST_VIEW: подсчитать число строк, возвращаемых представлениями на обеих сторонах.
  • TEST_DATA: выполнить проверку корректности строк на обеих сторонах.
  • SHOW_VERSION: показать версию Oracle.
  • SHOW_SCHEMA: вывести список доступных схем.
  • SHOW_TABLE: вывести список доступных таблиц.
  • SHOW_COLUMN: вывести список доступных столбцов таблиц и тип, используемый ora2pgpro при преобразовании из Oracle в Postgres Pro. Кроме того, выводится предупреждение, если в именах объектов Oracle есть зарезервированные слова Postgres Pro.
  • SHOW_REPORT: вывести подробный отчёт о содержимом БД Oracle, который помогает оценить размер объектов базы данных и стоимость миграции.

Только один тип экспорта можно выполнить за один раз, поэтому директива TYPE должна быть уникальной. Если указать директиву несколько раз, будет использоваться последнее обнаруженное значение.

Результаты экспорта некоторых типов невозможно или не следует загружать в БД Postgres Pro напрямую — требуются дополнительные действия вручную. Это относится к типам экспорта GRANT, TABLESPACE, TRIGGER, FUNCTION, PROCEDURE, TYPE, QUERY и PACKAGE, особенно если есть код PL/SQL или SQL, специфичный для Oracle.

Для типа экспорта TABLESPACE в системе должен существовать путь к файлу, а для SYNONYM — владельцы объектов и схемы должны соответствовать новому проекту БД Postgres Pro.

Обратите внимание, что можно запустить серию операций экспорта, указав в директиве TYPE список типов, разделённых запятыми, но типы COPY и INSERT с другими типами указывать нельзя.

ora2pgpro преобразовывает секции Oracle, используя наследование, триггеры и функции. За дополнительной информацией обратитесь к разделу Секционирование таблиц.

Директива TYPE позволяет экспортировать пользовательские типы Oracle. Если не использовать параметр --plsql в командной строке, пользовательский тип Oracle выгружается как есть, в противном случае ora2pgpro попробует преобразовать его с использованием синтаксиса Postgres Pro.

Пример вывода с использованием SHOW_COLUMN:

[2] TABLE CURRENT_SCHEMA (1 rows) (Warning: 'CURRENT_SCHEMA' is a reserved word in PostgreSQL)
		CONSTRAINT : NUMBER(22) => bigint (Warning: 'CONSTRAINT' is a reserved word in PostgreSQL)
		FREEZE : VARCHAR2(25) => varchar(25) (Warning: 'FREEZE' is a reserved word in PostgreSQL)
	...
	[6] TABLE LOCATIONS (23 rows)
		LOCATION_ID : NUMBER(4) => smallint
		STREET_ADDRESS : VARCHAR2(40) => varchar(40)
		POSTAL_CODE : VARCHAR2(12) => varchar(12)
		CITY : VARCHAR2(30) => varchar(30)
		STATE_PROVINCE : VARCHAR2(25) => varchar(25)
		COUNTRY_ID : CHAR(2) => char(2)

Нижеописанные ключевые слова только показывают запрошенную информацию и прерывают выполнение. Это позволяет узнать, с чем предстоит работать.

С типом SHOW_COLUMN в командной строке разрешается передавать параметры ora2pgpro --allow relname или -a relname, чтобы ограничить выводимую информацию одной таблицей.

С типом SHOW_ENCODING отображаются значения NLS_LANG и CLIENT_ENCODING, которые будет использовать ora2pgpro, и фактическая кодировка БД Oracle с соответствующей кодировкой клиента, которая будет использоваться в Postgres Pro.

ora2pgpro может экспортировать определение таблицы Oracle для использования через обёртку сторонних данных oracle_fdw. Если задать тип FDW, таблицы Oracle экспортируются следующим образом:

CREATE FOREIGN TABLE oratab (
		id        integer           NOT NULL,
		text      character varying(30),
		floating  double precision  NOT NULL
	) SERVER oradb OPTIONS (table 'ORATAB');

Теперь таблицу можно использовать как обычную таблицу Postgres Pro.

Также можно вывести более подробный отчёт, который помогает оценить стоимость миграции, подробнее см. Раздел 5.3.

ESTIMATE_COST #

Включает функциональность, которая помогает оценить стоимость миграции. Используется только с типами экспорта SHOW_REPORT, FUNCTION, PROCEDURE, PACKAGE и QUERY. По умолчанию отключена. Эта же функциональность включается с помощью параметра --estimate_cost командной строки. Обратите внимание, что включение этой директивы активирует PLSQL_PGSQL.

COST_UNIT_VALUE #

Задаёт значение в минутах для блока оценки стоимости миграции. По умолчанию 5 минут на блок. Чтобы поменять значение в командной строке, используйте --cost_unit_value.

DUMP_AS_HTML #

Если включить эту директиву, ora2pgpro выведет отчёт о миграции в формате HTML. По умолчанию при использовании SHOW_REPORT отчёт выводится в формате простого текста.

HUMAN_DAYS_LIMIT #

Используйте эту директиву, чтобы переопределить предел человеко-дней, по достижении которого уровень оценки миграции меняется с B на C. По умолчанию 10 человеко-дней.

JOBS #

Эта директива включает поддержку многопоточности для типов экспорта COPY, FUNCTION и PROCEDURE и задаёт число используемых процессов. По умолчанию многопоточность отключена.

Эта директива используется, чтобы указать число ядер для параллельного импорта данных в Postgres Pro. С типом экспорта FUNCTION или PROCEDURE каждая функция будет переведена в PL/pgSQL в новом отдельном процессе, что может дать значительное ускорение при большом количестве функций.

Параллельная обработка ограничивается только числом ядер и производительностью ввода-вывода Postgres Pro.

Не работает с ОС Windows, директива отключена.

ORACLE_COPIES #

Эта директива включает поддержку многопоточности для извлечения данных из Oracle. Значением является число процессов для параллельного выполнения запроса. По умолчанию параллельность запросов отключена.

Параллельность построена на разделение запроса по числу ядер, переданному в качестве значения ORACLE_COPIES:

SELECT * FROM MYTABLE WHERE ABS(MOD(COLUMN, ORACLE_COPIES)) = CUR_PROC

Здесь COLUMN — это технический ключ, такой как первичный ключ или уникальный ключ, на основе которого осуществляется разделение и используется текущее ядро (CUR_PROC). В директиве DEFINED_PK можно задать имя используемого столбца.

Не работает с ОС Windows, директива отключена.

DEFINED_PK #

Эта директива используется, чтобы определить технический ключ, используемый для разделения запроса по числу ядер, которое задано в переменной ORACLE_COPIES. Например:

DEFINED_PK      EMPLOYEES:employee_id

Предположим, что в -J или ORACLE_COPIES задано значение 8, используется параллельный запрос:

SELECT * FROM EMPLOYEES WHERE ABS(MOD(employee_id, 8)) = N

Здесь N — это текущий дочерний процесс (начиная с 0).

PARALLEL_TABLES #

Эта директива используется, чтобы задать число таблиц, обрабатываемых параллельно для извлечения данных. Пределом является число ядер на машине. ora2pgpro устанавливает по одному подключению к БД для каждого параллельного процесса. Если значение этой директивы больше 1, ORACLE_COPIES отключается, но JOBS используется, так что фактическое число процессов = PARALLEL_TABLES * JOBS.

Обратите внимание, что если значение этой директивы больше 1, при экспорте в файлы автоматически активируется FILE_PER_TABLE, чтобы экспортировать таблицы и представления в разные файлы.

Используйте PARALLEL_TABLES, чтобы включить параллельность для действий COPY, INSERT и TEST_DATA. Также полезно для TEST, TEST_COUNT и SHOW_TABLE, если --count_rows используется для подсчёта действительного количества строк.

DEFAULT_PARALLELISM_DEGREE #

Если задать для этой директивы значение больше 1, ora2pgpro будет принудительно использовать указание /*+ PARALLEL(tbname, degree) */ в каждом запросе экспорта данных из Oracle. Значение 0 или 1 отключает использование указаний для параллельности. По умолчанию отключена.

FDW_SERVER #

Эта директива используется, чтобы указывать имя сервера сторонних данных для команды CREATE SERVER name FOREIGN DATA WRAPPER oracle_fdw. Затем это имя используется в командах CREATE FOREIGN TABLE и в импорте данных с помощью oracle_fdw. По умолчанию сторонний сервер не определён. Директива используется с типами экспорта FDW, COPY и INSERT. Для типа экспорта FDW значение по умолчанию — orcl.

FDW_IMPORT_SCHEMA #

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

DROP_FOREIGN_SCHEMA #

По умолчанию перед каждым новым импортом ora2pgpro удаляет временную схему ora2pg_fdw_import, используемую для импорта сторонней схемы Oracle. Отключите директиву, если необходимо сохранить существующую схему из-за внесённых изменений или использования стороннего сервера.

EXTERNAL_TO_FDW #

Эта директива (по умолчанию включена) позволяет экспортировать сторонние таблицы Oracle как сторонние таблицы file_fdw. Чтобы не экспортировать такие таблицы, задайте значение 0.

INTERNAL_DATE_MAX #

Внутренние отметки времени, получаемые из пользовательских типов, извлекаются в следующем формате: 01-JAN-77 12.00.00.000000 AM. Поскольку точное столетие неизвестно, по умолчанию каждый год меньше 49 относится к 2000, а остальные — к 1900. Эта директива используется, чтобы изменить значение по умолчанию 49. Директива имеет смысл, только если есть пользовательский тип со столбцом timestamp.

AUDIT_USER #

Задаёт список разделённых запятыми имён пользователей для фильтрации запросов к таблице DBA_AUDIT_TRAIL. По умолчанию эта таблица не сканируется, и поиск запросов не выполняется. Директива используется только с типами экспорта SHOW_REPORT и QUERY, когда не указан файл с запросами. Обратите внимание, что перед выводом выполняется нормализация текста запроса, в отличие от случаев, когда передаётся входной файл в параметре -i.

FUNCTION_CHECK #

Отключите эту директиву, чтобы отключить check_function_bodies.

SET check_function_bodies = false;

При этом отключается проверка корректности строки с телом функции, передаваемой команде CREATE FUNCTION. По умолчанию используется параметр из postgresql.conf, включающий эту функциональность.

ENABLE_BLOB_EXPORT #

Экспорт BLOB занимает время, поэтому иногда может потребоваться экспортировать все данные, кроме BLOB. В этом случае отключите эту директиву, и столбцы типа BLOB будут исключены из экспорта. Обратите внимание, что у целевого столбца типа bytea не должно быть ограничения NOT NULL.

DATA_EXPORT_ORDER #

По умолчанию экспорт данных выполняется в порядке имён таблиц. Если в базе есть огромные таблицы с именами в конце алфавита, при использовании многопоточности может быть полезно настроить сортировку по размеру, чтобы множество небольших таблиц были обработаны до того, как завершится обработка самых больших таблиц. В этом случае задайте для этой директивы значение size. Возможные значения: name и size. Обратите внимание, что с типами экспорта SHOW_TABLE и SHOW_COLUMN тоже можно использовать сортировку, не только с COPY или INSERT.

4.6.2. Ограничение экспорта #

Иногда может потребоваться экспортировать только часть БД Oracle. Нижеописанные директивы позволяют ограничить экспорт отдельными объектами БД.

ALLOW #

Эта директива позволяет задать список объектов, которые необходимо экспортировать, исключив все остальные объекты. Значением является список имён объектов, разделённых запятыми. В список можно добавлять регулярные выражения. Например:

ALLOW           EMPLOYEES SALE_.* COUNTRIES .*_GEOM_SEQ

С таким значением будут экспортированы объекты с именами EMPLOYEES, COUNTRIES, а также с именами, начинающимися на SALE_, и именами, заканчивающимися на _GEOM_SEQ. Типы объектов зависят от типа экспорта. Обратите внимание, что регулярные выражения не сработают в БД 8i, вместо них надо использовать местозаполнители %, чтобы утилита ora2pgpro использовала оператор LIKE.

Так задаются глобальные фильтры для текущего типа экспорта. Можно также задавать расширенные фильтры, применяемые к определённым объектам или для соответствующего типа экспорта. Например:

ora2pgpro -p -c ora2pgpro.conf -t TRIGGER -a 'TABLE[employees]'

При этом будут экспортироваться только триггеры для таблицы employees. Если нужны все триггеры, кроме некоторых INSTEAD OF:

ora2pgpro -c ora2pgpro.conf -t TRIGGER -e 'VIEW[trg_view_.*]'

Или в более сложном виде:

ora2pgpro -p -c ora2pgpro.conf -t TABLE -a 'TABLE[EMPLOYEES]' \
        -e 'INDEX[emp_.*];CKEY[emp_salary_min]'

Эта команда экспортирует определение таблицы employees, но без индексов, начинающихся с emp_, и ограничения CHECK с именем emp_salary_min.

При эскпорте секций можно исключить секционированные таблицы с помощью следующей команды:

ora2pgpro -p -c ora2pgpro.conf -t PARTITION -e 'PARTITION[PART_199.* PART_198.*]'

При этом из экспорта будут исключены секции для лет с 1980 по 1999, но не основная таблица. Кроме того, будут исключены соответствующие триггеры.

С типом экспорта GRANT можно использовать такой расширенный формат, чтобы исключить пользователей из экспорта или ограничить отдельными пользователями:

ora2pgpro -p -c ora2pgpro.conf -t GRANT -a 'USER1 USER2'
or
ora2pgpro -p -c ora2pgpro.conf -t GRANT -a 'GRANT[USER1 USER2]'

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

ora2pgpro -p -c ora2pgpro.conf -t GRANT -a 'USER1 USER2' -e 'FUNCTION[adm_.*];PROCEDURE[adm_.*]'

Oracle не допускает использование выражений с предварительным просмотром, поэтому может потребоваться исключить из экспорта некоторые объекты, соответствующие заданному в ALLOW регулярному выражению. Например, если необходимо экспортировать все таблицы, начинающиеся на E, но исключить начинающиеся на EXP, отфильтровать таблицы одним выражением невозможно. Поэтому можно начать регулярное выражением с символа !, чтобы исключить объекты, соответствующие следующему регулярному выражению. Предыдущий пример можно записать следующим образом:

ALLOW   E.* !EXP.*

В выражении поиска объекта это будет выглядеть следующим образом:

REGEXP_LIKE(..., '^E.*$') AND NOT REGEXP_LIKE(..., '^EXP.*$')
EXCLUDE #

Эта директива противоположна предыдущей — она позволяет задавать список разделённых пробелами или запятыми имён объектов, которые исключаются из экспорта. В списке можно указать регулярное выражение. Например:

EXCLUDE         EMPLOYEES TMP_.* COUNTRIES

При этом из экспорта будут исключены объекты с именами EMPLOYEES, COUNTRIESи все таблицы, начинающиеся на tmp_.

Например, с помощью этой директивы можно исключить ненужные функции:

EXCLUDE         write_to_.* send_mail_.*

В вышеприведённом примере из экспорта исключаются все функции, процедуры или функции из пакетов с именами, начинающимися как задано регулярным выражением. Обратите внимание, что регулярные выражения не сработают в БД 8i, вместо них надо использовать местозаполнители %, чтобы утилита ora2pgpro использовала оператор NOT LIKE. Расширенный синтаксис описан выше (см. директиву ALLOW).

NO_EXCLUDED_TABLE #

По умолчанию ora2pgpro исключает из экспорта «мусорные» таблицы Oracle, которые никогда не должны включаться. При этом создаётся множество выражений REGEXP_LIKE, что замедляет анализ таблиц при экспорте. Чтобы отключить это поведение, включите данную директиву, но ненужные таблицы придётся впоследствии исключать или удалять вручную. Регулярные выражения для исключения таблиц задаются в массиве @EXCLUDED_TABLES в lib/Ora2Pgpro.pm. Обратите внимание, что это поведение не зависит от директивы EXCLUDE.

VIEW_AS_TABLE #

Задаёт представления для экспорта как таблицы. По умолчанию никакие. В значении указывается регулярное выражение или список имён представлений, разделённых пробелами или запятыми. Если имя объекта — это представление и задан тип экспорта TABLE, представление экспортируется как оператор CREATE TABLE. С типом экспорта COPY или INSERT соответствующие данные экспортируются. За подробным описанием обратитесь к разделу Экспорт представлений как таблиц Postgres Pro.

MVIEW_AS_TABLE #

Задаёт материализованные представления для экспорта как таблицы. По умолчанию никакие. В значении указывается регулярное выражение или список имён материализованных представлений, разделённых пробелами или запятыми. Если имя объекта — это материализованное представление и задан тип экспорта TABLE, представление экспортируется как оператор CREATE TABLE. С типом экспорта COPY или INSERT соответствующие данные экспортируются.

NO_VIEW_ORDERING #

По умолчанию ora2pgpro пытается упорядочить представления во избежание ошибок со вложенными представлениями во время импорта. Если представлений очень много, это может занять много времени, поэтому можно отключить упорядочивание, задав эту директиву.

GRANT_OBJECT #

Можно задать список разделённых запятыми объектов, права для которых экспортируются. По умолчанию права экспортируются для всех объектов. Возможные значения: TABLE, VIEW, MATERIALIZED VIEW, SEQUENCE, PROCEDURE, FUNCTION, PACKAGE BODY, TYPE, SYNONYM, DIRECTORY. Разрешается указывать только один тип объектов. Например, для экспорта прав только для таблиц задайте значение TABLE. Значение можно переопределить параметром -g.

WHERE #

Эта директива позволяет задавать фильтр по предложению WHERE при выгрузке содержимого таблиц. Значение задаётся в формате TABLE_NAME[WHERE_CLAUSE] или только предложение WHERE при наличии только одного такого предложения на каждую таблицу. Можно задавать оба варианта одновременно. Примеры:

# Глобальное предложение WHERE применяется ко всем таблицам в экспорте
WHERE  1=1

# Предложение WHERE только для таблицы TABLE_NAME
WHERE  TABLE_NAME[ID1='001']

# Два разных предложения для таблиц TABLE_NAME и OTHER_TABLE
# и общее предложение WHERE по DATE_CREATE для всех остальных таблиц
WHERE  TABLE_NAME[ID1='001' OR ID1='002] DATE_CREATE > '2001-01-01' OTHER_TABLE[NAME='test']

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

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

WHERE   ROWNUM < 1000

Также директиву можно использовать, чтобы ограничить экспорт несколькими таблицами.

Параметр -W или --where, передаваемый в командной строке, переопределит значение этой директивы глобально и для отдельных таблиц, если имена таблиц совпадают.

TOP_MAX #

Эта директива используется, чтобы ограничить количество элементов, отображаемых в начале списков объектов с наибольшими характеристиками, например в списке таблиц с наибольшим количеством и списке самых больших таблиц по мегабайтам. По умолчанию 10 элементов.

LOG_ON_ERROR #

Включите эту директиву, если хотите продолжать импорт данных в случае ошибки. Когда ora2pgpro получает ошибку в операторах COPY или INSERT в Postgres Pro, этот оператор записывается в файл журнала TABLENAME_error.log в выходном каталоге, и работа продолжается. Можно попробовать корректировать оператор и вручную перезагрузить файл журнала ошибок. По умолчанию импорт прерывается при ошибке.

REPLACE_QUERY #

Иногда может потребоваться извлечь данные из таблицы Oracle, но для этого нужен отдельный запрос — не простой запрос SELECT * FROM table от ora2pgpro, а более сложный. Эта директива позволяет переопределить запрос, используемый ora2pgpro для извлечения данных. Формат запроса: TABLENAME[SQL_QUERY]. Если таблиц много, с заменой запроса ora2pgpro можно указать несколько строк REPLACE_QUERY.

REPLACE_QUERY   EMPLOYEES[SELECT e.id,e.fisrtname,lastname FROM EMPLOYEES e JOIN EMP_UPDT u ON (e.id=u.id AND u.cdate>'2014-08-01 00:00:00')]

4.6.3. Управление экспортом полнотекстового поиска #

Для управления экспортом индексов для полнотекстового поиска в ora2pgpro предусмотрено несколько директив. По умолчанию индексы CONTEXT экспортируются в Postgres Pro как индексы FTS, а индексы CTXCAT экспортируются с использованием расширения pg_trgm.

CONTEXT_AS_TRGM #

Принудительно переводит полнотекстовые индексы Oracle в индексы Postgres Pro с использованием расширения pg_trgm. По умолчанию индексы CONTEXT переводятся в индексы FTS, а индексы CTXCAT — с использованием расширения pg_trgm. Эта директива позволяет использовать pg_trgm, чего достаточно в большинстве случаев. Перед импортом объектов необходимо создать расширение pg_trgm в целевой базе данных.

FTS_INDEX_ONLY #

По умолчанию ora2pgpro создаёт индекс на основе функции, чтобы перенести полнотекстовые индексы Oracle.

CREATE INDEX ON t_document
  USING gin(to_tsvector('pg_catalog.french', title));

Необходимо переписать предложение CONTAIN() с использованием to_tsvector(), например:

SELECT id,title FROM t_document
  WHERE to_tsvector(title) @@ to_tsquery('search_word');

Отключите эту директиву, чтобы утилита ora2pgpro создавала дополнительный столбец типа tsvector с выделенными триггерами для индексов FTS. В этом случае ora2pgpro добавляет столбец следующим образом:

ALTER TABLE t_document ADD COLUMN tsv_title tsvector;

Затем столбец обновляется для вычисления векторов FTS, если данные были загружены до команды UPDATE t_document SET tsv_title = to_tsvector('pg_catalog.french', coalesce(title,''));. Чтобы автоматически обновлять столбец при изменении заголовка, ora2pgpro добавляет следующий триггер:

CREATE FUNCTION tsv_t_document_title() RETURNS trigger AS $$
BEGIN
       IF TG_OP = 'INSERT' OR new.title != old.title THEN
               new.tsv_title :=
               to_tsvector('pg_catalog.french', coalesce(new.title,''));
       END IF;
       return new;
END
$$ LANGUAGE plpgsql;
CREATE TRIGGER trig_tsv_t_document_title BEFORE INSERT OR UPDATE
 ON t_document
 FOR EACH ROW EXECUTE PROCEDURE tsv_t_document_title();

Если полнотекстовый индекс Oracle создан по нескольким столбцам, ora2pgpro будет использовать функцию setweight(), чтобы задать вес в порядке объявления столбцов.

FTS_CONFIG #

Используйте эту директиву, чтобы принудительно задать конфигурацию текстового поиска. Если директива не задана, ora2pgpro автоматически определяет стеммер, используемый в Oracle для каждого индекса, и pg_catalog.english, если информация не найдена.

USE_UNACCENT #

Включите эту директиву, если текстовый поиск должен выполняться без учёта символов ударения или акцента. ora2pgpro создаст вспомогательную функцию на unaccent() и индексы pg_trgm, использующие эту функцию. Для индексов FTS ora2pgpro переопределит конфигурацию текстового поиска, например:

CREATE TEXT SEARCH CONFIGURATION fr (COPY = french);
ALTER TEXT SEARCH CONFIGURATION fr
        ALTER MAPPING FOR hword, hword_part, word WITH unaccent, french_stem;

Затем задайте для директивы FTS_CONFIG в ora2pgpro.conf значение fr вместо pg_catalog.english.

Если директива включена, ora2pgpro создаёт функцию-обёртку:

CREATE OR REPLACE FUNCTION unaccent_immutable(text)
RETURNS text AS
$$
    SELECT public.unaccent('public.unaccent', $1);
$$ LANGUAGE sql IMMUTABLE
   COST 1;

Индексы экспортируются так:

CREATE INDEX t_document_title_unaccent_trgm_idx ON t_document
    USING gin (unaccent_immutable(title) gin_trgm_ops);

Чтобы использовать индекс на основе функции, в запросах необходимо использовать эту же функцию, например:

SELECT * FROM t_document
        WHERE unaccent_immutable(title) LIKE '%donnees%';
USE_LOWER_UNACCENT #

То же, что и выше, но вызывается функция lower() в функции unaccent_immutable():

CREATE OR REPLACE FUNCTION unaccent_immutable(text)
RETURNS text AS
$$
    SELECT lower(public.unaccent('public.unaccent', $1));
$$ LANGUAGE sql IMMUTABLE;

4.6.4. Изменение структуры объектов #

Гибкость ora2pgpro позволяет перенести БД Oracle в БД Postgres Pro с другой структурой или схемой. Нижеописанные директивы позволяют настроить необходимое для этого сопоставление.

REORDERING_COLUMNS #

Включите эту директиву, чтобы переупорядочить столбцы и уменьшить занимаемое место на диске. В результате на страницу поместится больше строк, что играет важную роль для увеличения скорости. По умолчанию отключена (disabled), то есть используется такой же порядок определения таблиц, как в Oracle, — для большинства случаев этого достаточно. Директива используется только с типом экспорта TABLE.

MODIFY_STRUCT #

Эта директива позволяет ограничить извлекаемые столбцы для указанной таблицы. В значении задаётся список имён таблиц, разделённых пробелами, с набором столбцов в скобках: MODIFY_STRUCT NOM_TABLE(nomcol1,nomcol2,...) .... Например:

MODIFY_STRUCT   T_TEST1(id,dossier) T_TEST2(id,fichier)

В примере выше извлекаются столбцы id и dossier из таблицы T_TEST1 и столбцы id и fichier из таблицы T_TEST2. Директива может используется только с типами экспорта TABLE, COPY или INSERT. С типом TABLE оператор CREATE TABLE создаёт столбцы по новому списку, и никакие индексы или внешние ключи, связанные с исключёнными столбцами, не экспортируются.

EXCLUDE_COLUMNS #

Вместо того, чтобы переопределять структуру таблицы с помощью MODIFY_STRUCT, можно исключить некоторые столбцы из экспорта. В значении задаётся список имён таблиц, разделённых пробелами, с набором столбцов в скобках: EXCLUDE_COLUMNS NOM_TABLE(nomcol1,nomcol2,...) .... Например:

EXCLUDE_COLUMNS T_TEST1(id,dossier) T_TEST2(id,fichier)

В примере выше из экспорта исключаются столбцы id и dossier таблицы T_TEST1 и столбцы id и fichier таблицы T_TEST2. Директива может используется только с типами экспорта TABLE, COPY или INSERT. С типом TABLE оператор CREATE TABLE создаёт столбцы по новому списку, и никакие индексы или внешние ключи, связанные с исключёнными столбцами, не экспортируются.

REPLACE_TABLES #

Эта директива позволяет соотнести список имён таблиц Oracle с именами таблиц Postgres Pro. В значении задаётся список имён таблиц, разделённых пробелами:

REPLACE_TABLES  ORIG_TBNAME1:DEST_TBNAME1 ORIG_TBNAME2:DEST_TBNAME2

Таблицы Oracle ORIG_TBNAME1 и ORIG_TBNAME2 будут переименованы в DEST_TBNAME1 и DEST_TBNAME2 соответственно.

REPLACE_COLS #

Как и имена таблиц, имена экспортируемых столбцов можно переопределить следующим образом: REPLACE_COLS ORIG_TBNAME(ORIG_COLNAME1:NEW_COLNAME1,ORIG_COLNAME2:NEW_COLNAME2). Например:

REPLACE_COLS    T_TEST(dico:dictionary,dossier:folder)

При этом столбцы Oracle dico и dossier из таблицы T_TEST будут переименованы в dictionary и folder.

REPLACE_AS_BOOLEAN #

Если во время экспорта необходимо поменять тип столбцов Oracle на boolean в Postgres Pro, можно указать в этой директиве список таблиц и столбцов, разделённых пробелами:

REPLACE_AS_BOOLEAN     TB_NAME1:COL_NAME1 TB_NAME1:COL_NAME2 TB_NAME2:COL_NAME2

Значения в столбцах типа boolean будут заменены на t и f, при этом используются значения по умолчанию и заданные в директиве BOOLEAN_VALUES.

Обратите внимание, что если имя таблицы и/или имя столбца было изменено директивой REPLACE_TABLES, необходимо использовать имя оригинальной таблицы и/или столбца.

REPLACE_COLS            TB_NAME1(OLD_COL_NAME1:NEW_COL_NAME1)
REPLACE_AS_BOOLEAN      TB_NAME1:OLD_COL_NAME1

Можно также задать тип и точность для преобразования всех полей этого типа в boolean автоматически, например:

REPLACE_AS_BOOLEAN      NUMBER:1 CHAR:1 TB_NAME1:COL_NAME1 TB_NAME1:COL_NAME2

В примере выше все поля типа number(1) или char(1) заменяются на boolean во всех экспортируемых таблицах.

BOOLEAN_VALUES #

Используйте эту директиву, чтобы дать дополнительное определение для значений типа boolean в полях Oracle. Необходимо задать список значений вида TRUE:FALSE, разделённых пробелами. По умолчанию ora2pgpro распознает следующие типы значений:

BOOLEAN_VALUES          yes:no y:n 1:0 true:false enabled:disabled

Любые значения, заданные в этой директиве, добавляются в список значений по умолчанию.

REPLACE_ZERO_DATE #

Если утилита ora2pgpro находит «нулевую» дату (0000-00-00 00:00:00), то заменяет её на NULL. Это может привести к проблемам, если в столбце есть ограничение NOT NULL. Если удалить ограничение невозможно, используйте эту директиву, чтобы указать произвольную дату для использования вместо NULL. Если фиктивные даты использовать неуместно, можно задать значение -INFINITY.

INDEXES_SUFFIX #

Добавляет заданное значение к именам индексов в виде суффикса. Полезно, если имена индексов совпадают с именами таблиц. Например:

INDEXES_SUFFIX          _idx

Ко всем именам индексов в конце добавится _idx. Не самый распространённый случай, но может быть полезно.

INDEXES_RENAMING #

Включите эту директиву, чтобы переименовать все индексы в таком формате: tablename_columns_names. Может быть очень полезно в базах данных, где имена индексов совпадают между собой или с именем таблицы, что не допускается в Postgres Pro. По умолчанию отключена.

USE_INDEX_OPCLASS #

Классы операторов text_pattern_ops, varchar_pattern_ops и bpchar_pattern_ops поддерживают индексы B-деревья соответствующих типов. Отличие от классов операторов по умолчанию заключается в том, что выполняется строгое посимвольное сравнение, а не по правилам сортировки, определяемым локалью, благодаря чему эти классы операторов удобно использовать в запросах с выражениями поиска по шаблону (регулярные выражения LIKE или POSIX), когда локаль базы данных отличается от используемой по умолчанию C. Если задать значение 1, ora2pgpro будет экспортировать все индексы, построенные по столбцам типа varchar2() и char(), с использованием этих операторов. Если задать значение больше 1, будут изменяться только индексы по столбцам с ограничением по символам больше или равным указанному значению. Например, при значении 128 будут создаваться индексы по столбцам типа varchar2(N), где N >= 128.

RENAME_PARTITION #

Включите эту директиву, если необходимо переименовывать секционированные таблица. По умолчанию отключена. При большом количестве секционированных таблиц может случиться, что у секций разных родительских таблиц совпадают имена, что недопустимо в Postgres Pro, где имена таблиц должны быть уникальными. По умолчанию применяются следующие правила переименования:

  • Секция: "tablename"_part"pos", где "pos" — это номер секции.
  • Подсекция: "tablename"_part"pos"_subpart"pos".
  • Секция/подсекция: "tablename"_part_default "tablename"_part"pos"_subpart_default.
DISABLE_PARTITION #

Включите эту директиву, если сохранять секционирование как в Oracle не требуется и достаточно экспортировать все данные секционированных таблиц в одну таблицу в Postgres Pro. По умолчанию секционирование сохраняется — ora2pgpro экспортирует данные из каждой секции и импортирует их в соответствующую секционированную таблицу в Postgres Pro.

DISABLE_UNLOGGED #

По умолчанию ora2pgpro экспортирует таблицы Oracle со свойством NOLOGGING как UNLOGGED. Можно полностью отключить эту функциональность, поскольку данные из таблиц UNLOGGED могут быть потеряны в случае сбоя Postgres Pro. Если задать для директивы значение 1, все таблицы будут экспортировать как таблицы обычного типа.

4.6. Oracle Schema to Export #

The Oracle database export can be limited to a specific schema or namespace, this can be mandatory following the database connection user.

SCHEMA #

This directive is used to set the schema name to use during export. For example, SCHEMA APPS will extract objects associated to the APPS schema.

When no schema name is provided and EXPORT_SCHEMA is enabled, ora2pgpro will export all objects from all schemas of the Oracle instance with their names prefixed with the schema name.

EXPORT_SCHEMA #

By default, the Oracle schema is not exported into the Postgres Pro database, and all objects are created under the default Postgres Pro namespace. If you also want to export this schema and create all objects under this namespace, set the EXPORT_SCHEMA directive to 1. This will set the schema search_path at the top of the export SQL file to the schema name set in the SCHEMA directive with the default pg_catalog schema. If you want to change this path, use the directive PG_SCHEMA.

CREATE_SCHEMA #

Enable/disable the CREATE SCHEMA command at starting of the output file. It is enabled by default and concerns the TABLE export type.

COMPILE_SCHEMA #

By default ora2pgpro will only export valid PL/SQL code. You can force Oracle to compile again the invalidated code to get a chance to have it obtain the valid status and then be able to export it.

Enable this directive to force Oracle to compile schema before exporting code. When this directive is enabled, and SCHEMA is set to a specific schema name, only invalid objects in this schema will be recompiled. If SCHEMA is not set, then all schemas will be recompiled. To force recompile invalid objects in a specific schema, set COMPILE_SCHEMA to the schema name you want to recompile.

This will ask to Oracle to validate the PL/SQL code that could have been invalidated after an export/import, for example. The VALID or INVALID status applies to functions, procedures, packages, and user-defined types. It also concerns disabled triggers.

EXPORT_INVALID #

If the above configuration directive is not enough to validate your PL/SQL code, enable this configuration directive to allow export of all PL/SQL code even if it is marked as invalid. The VALID or INVALID status applies to functions, procedures, packages and user-defined types.

PG_SCHEMA #

Allows you to define/force the Postgres Pro schema to use. By default, if you set EXPORT_SCHEMA to 1, the Postgres Pro search_path will be set to the schema name exported set as the value of the SCHEMA directive.

The value can be a comma-separated list of schema names but not when using the TABLE export type because in this case it will generate the CREATE SCHEMA statement, and it does not support multiple schema names. For example, if you set PG_SCHEMA to something like user_schema, public, the search path will be set like this:

SET search_path = user_schema, public;

This forces the use of another schema (here user_schema) than the one from Oracle schema set in SCHEMA directive.

You can also set the default search_path for the Postgres Pro user you are using to connect to the destination database by using:

ALTER ROLE username SET search_path TO user_schema, public;

In this case, you do not have to set PG_SCHEMA.

SYSUSERS #

Without an explicit schema, ora2pgpro will export all objects that do not belong to the system schema or role:

SYSTEM,CTXSYS,DBSNMP,EXFSYS,LBACSYS,MDSYS,MGMT_VIEW,
OLAPSYS,ORDDATA,OWBSYS,ORDPLUGINS,ORDSYS,OUTLN,
SI_INFORMTN_SCHEMA,SYS,SYSMAN,WK_TEST,WKSYS,WKPROXY,
WMSYS,XDB,APEX_PUBLIC_USER,DIP,FLOWS_020100,FLOWS_030000,
FLOWS_040100,FLOWS_010600,FLOWS_FILES,MDDATA,ORACLE_OCM,
SPATIAL_CSW_ADMIN_USR,SPATIAL_WFS_ADMIN_USR,XS$NULL,PERFSTAT,
SQLTXPLAIN,DMSYS,TSMSYS,WKSYS,APEX_040000,APEX_040200,
DVSYS,OJVMSYS,GSMADMIN_INTERNAL,APPQOSSYS,DVSYS,DVF,
AUDSYS,APEX_030200,MGMT_VIEW,ODM,ODM_MTR,TRACESRV,MTMSYS,
OWBSYS_AUDIT,WEBSYS,WK_PROXY,OSE$HTTP$ADMIN,
AURORA$JIS$UTILITY$,AURORA$ORB$UNAUTHENTICATED,
DBMS_PRIVILEGE_CAPTURE,CSMIG,MGDSYS,SDE,DBSFWUSER

Following your Oracle installation, you may have several other system roles defined. To append these users to the schema exclusion list, set the SYSUSERS configuration directive to a comma-separated list of system users to exclude. For example:

SYSUSERS        INTERNAL,SYSDBA,BI,HR,IX,OE,PM,SH

This will add users INTERNAL and SYSDBA to the schema exclusion list.

FORCE_OWNER #

By default the owner of the database objects is the one you are using to connect to Postgres Pro using psql. If you use another user (postgres, for example), you can force ora2pgpro to set the object owner to be the one used in the Oracle database by setting the directive to 1, or to a completely different username by setting the directive value to that username.

FORCE_SECURITY_INVOKER #

ora2pgpro use the function security privileges set in Oracle, and it is often defined as SECURITY DEFINER. If you want to override those security privileges for all functions and use SECURITY INVOKER instead, enable this directive.

USE_TABLESPACE #

When enabled, this directive forces ora2pgpro to export all tables, indexes constraints and indexes using the tablespace name defined in Oracle database. This works only with tablespaces that are not TEMP, USERS, and SYSTEM.

WITH_OID #

Activating this directive will force ora2pgpro to add WITH OIDS when creating tables or views as tables. Default is the same as in Postgres Pro, disabled.

NO_FUNCTION_METADATA #

Force ora2pgpro to not look for function declaration. Note that this will prevent ora2pgpro to rewrite function replacement call if needed. Do not enable it unless looking forward at function breaks other export.

4.6.1. Export Type #

The export action is performed following a single configuration directive TYPE, some others add more control on what should be really exported.

TYPE #

Here are the different values of the TYPE directive, default is TABLE:

  • TABLE: Extract all tables with indexes, primary keys, unique keys, foreign keys, and check constraints.
  • VIEW: Extract only views.
  • GRANT: Extract roles converted to Postgres Pro groups, users, and grants on all objects.
  • SEQUENCE: Extract all sequences and their last positions.
  • TABLESPACE: Extract storage spaces for tables and indexes.
  • TRIGGER: Extract triggers defined following actions.
  • FUNCTION: Extract functions.
  • PROCEDURE: Extract procedures.
  • PACKAGE: Extract packages and package bodies.
  • INSERT: Extract data as INSERT statement.
  • COPY: Extract data as COPY statement.
  • PARTITION: Extract range and list Oracle partitions with subpartitions.
  • TYPE: Extract user-defined Oracle type.
  • FDW: Export Oracle tables as foreign tables for oracle_fdw.
  • MVIEW: Export materialized views.
  • QUERY: Try to automatically convert Oracle SQL queries.
  • DBLINK: Generate Oracle foreign data wrapper server to use as dblink.
  • SYNONYM: Export Oracle synonyms as views on other schema's objects.
  • DIRECTORY: Export Oracle directories as external_file extension objects.
  • LOAD: Dispatch a list of queries over multiple Postgres Pro connections.
  • TEST: Perform a diff between Oracle and Postgres Pro database.
  • TEST_COUNT: Perform a row count diff between Oracle and Postgres Pro table.
  • TEST_VIEW: Perform a count on both sides of number of rows returned by views.
  • TEST_DATA: Perform data validation check on rows on both sides.
  • SHOW_VERSION: Display Oracle version.
  • SHOW_SCHEMA: Display the list of schemas available in the database.
  • SHOW_TABLE: Display the list of tables available.
  • SHOW_COLUMN: Display the list of tables columns available and the ora2pgpro conversion type from Oracle to Postgres Pro that will be applied. It will also warn you if there are Postgres Pro reserved words in Oracle object names.
  • SHOW_REPORT: Show a detailed report of the Oracle database content to help evaluate the content of the database to migrate, in terms of objects and cost to end the migration.

Only one type of export can be performed at the same time so the TYPE directive must be unique. If you have more than one, only the last found in the file will be registered.

Some export type can not or should not be loaded directly into the Postgres Pro database and still require little manual editing. This is the case for GRANT, TABLESPACE, TRIGGER, FUNCTION, PROCEDURE, TYPE, QUERY, and PACKAGE export types, especially if you have PL/SQL code or Oracle-specific SQL in it.

For TABLESPACE, you must ensure that the file path exists in the system and for SYNONYM, ensure that the object's owners and schemas correspond to the new Postgres Pro database design.

Note that you can chain multiple export by giving to the TYPE directive a comma-separated list of export type, but in this case you must not use COPY or INSERT with other export type.

ora2pgpro will convert Oracle partition using table inheritance, trigger, and functions. For more information, see Table Partitioning.

The TYPE export allows export of user-defined Oracle types. If you do not use the --plsql command-line parameter, it dumps Oracle user type as-is, else ora2pgpro will try to convert it to Postgres Pro syntax.

Here is an example of the SHOW_COLUMN output:

[2] TABLE CURRENT_SCHEMA (1 rows) (Warning: 'CURRENT_SCHEMA' is a reserved word in PostgreSQL)
		CONSTRAINT : NUMBER(22) => bigint (Warning: 'CONSTRAINT' is a reserved word in PostgreSQL)
		FREEZE : VARCHAR2(25) => varchar(25) (Warning: 'FREEZE' is a reserved word in PostgreSQL)
	...
	[6] TABLE LOCATIONS (23 rows)
		LOCATION_ID : NUMBER(4) => smallint
		STREET_ADDRESS : VARCHAR2(40) => varchar(40)
		POSTAL_CODE : VARCHAR2(12) => varchar(12)
		CITY : VARCHAR2(30) => varchar(30)
		STATE_PROVINCE : VARCHAR2(25) => varchar(25)
		COUNTRY_ID : CHAR(2) => char(2)

Those extraction keywords are used only to display the requested information and exit. This allows you to quickly know on what you are going to work with.

The SHOW_COLUMN allows another ora2pgpro command-line option: --allow relname or -a relname to limit the displayed information to the given table.

The SHOW_ENCODING export type will display the NLS_LANG and CLIENT_ENCODING values that ora2pgpro will use, and the real encoding of the Oracle database with the corresponding client encoding that could be used with Postgres Pro.

ora2pgpro allows you to export your Oracle table definition to be used with the oracle_fdw foreign data wrapper. By using type FDW, your Oracle tables will be exported as follows:

CREATE FOREIGN TABLE oratab (
		id        integer           NOT NULL,
		text      character varying(30),
		floating  double precision  NOT NULL
	) SERVER oradb OPTIONS (table 'ORATAB');

Now you can use the table like a regular Postgres Pro table.

There is also a more advanced report to help estimate the migration cost, see Section 5.3.

ESTIMATE_COST #

Enable functionality that helps estimate the migration cost. Must only be used with SHOW_REPORT, FUNCTION, PROCEDURE, PACKAGE, and QUERY export type. Default is disabled. You may want to use the --estimate_cost command-line option instead to activate this functionality. Note that enabling this directive will force PLSQL_PGSQL activation.

COST_UNIT_VALUE #

Set the value in minutes of the migration cost evaluation unit. Default is five minutes per unit. See --cost_unit_value to change the unit value in the command line.

DUMP_AS_HTML #

By default, when using SHOW_REPORT, the migration report is generated as simple text, enabling this directive will force ora2pgpro to create a report in HTML format.

HUMAN_DAYS_LIMIT #

Use this directive to redefine the number of man-days limit where the migration assessment level must switch from B to C. Default is set to 10 man-days.

JOBS #

This configuration directive adds multiprocess support to COPY, FUNCTION, and PROCEDURE export type, the value is the number of processes to use. By default multiprocess is disabled.

This directive is used to set the number of cores to be used to parallelize data import into Postgres Pro. During FUNCTION or PROCEDURE export type each function will be translated to PL/pgSQL using a new process, the performances gain can be very important when you have many functions to convert.

There is no limitation in parallel processing other than the number of cores and the Postgres Pro I/O performance capabilities.

Doesn't work under Windows Operating System, it is simply disabled.

ORACLE_COPIES #

This configuration directive adds multiprocess support to extract data from Oracle. The value is the number of processes to use to parallelize the select query. By default parallel query is disabled.

The parallelism is built on splitting the query following of the number of cores given as value to ORACLE_COPIES as follows:

SELECT * FROM MYTABLE WHERE ABS(MOD(COLUMN, ORACLE_COPIES)) = CUR_PROC

Here COLUMN is a technical key like a primary or unique key where split will be based and the current core used by the query (CUR_PROC). You can also force the column name to use with the DEFINED_PK configuration directive.

Doesn't work under Windows Operating System, it is simply disabled.

DEFINED_PK #

This directive is used to define the technical key to be used to split the query between number of cores set with the ORACLE_COPIES variable. For example:

DEFINED_PK      EMPLOYEES:employee_id

The parallel query that will be used supposing that -J or ORACLE_COPIES is set to 8:

SELECT * FROM EMPLOYEES WHERE ABS(MOD(employee_id, 8)) = N

Here N is the current process forked starting from 0.

PARALLEL_TABLES #

This directive is used to define the number of tables that will be processed in parallel for data extraction. The limit is the number of cores on your machine. ora2pgpro will open one database connection for each parallel table extraction. This directive, when more than 1, will invalidate ORACLE_COPIES but not JOBS, so the real number of process that will be used is PARALLEL_TABLES * JOBS.

Note that this directive when set more that 1 will also automatically enable the FILE_PER_TABLE directive if you are exporting to files. This is used to export tables and views in separate files.

Use PARALLEL_TABLES to use parallelism with COPY, INSERT, and TEST_DATA actions. It is also useful with TEST, TEST_COUNT, and SHOW_TABLE if --count_rows is used for real row count.

DEFAULT_PARALLELISM_DEGREE #

You can force ora2pgpro to use /*+ PARALLEL(tbname, degree) */ hint in each query used to export data from Oracle by setting a value more than 1 to this directive. A value of 0 or 1 disables the use of the parallel hint. Default is disabled.

FDW_SERVER #

This directive is used to set the name of the foreign data server that is used in the CREATE SERVER name FOREIGN DATA WRAPPER oracle_fdw command. This name will then be used in the CREATE FOREIGN TABLE commands and to import data using oracle_fdw. By default no foreign server is defined. This only concerns export types FDW, COPY, and INSERT. For export type FDW, the default value is orcl.

FDW_IMPORT_SCHEMA #

Schema where foreign tables for data migration will be created. If you use several instances of ora2pgpro for data migration through the foreign data wrapper, you might need to change the name of the schema for each instance. Default: ora2pg_fdw_import.

DROP_FOREIGN_SCHEMA #

By default ora2pgpro drops the temporary schema ora2pg_fdw_import used to import the Oracle foreign schema before each new import. If you want to preserve the existing schema because of modifications or the use of a third-party server, disable this directive.

EXTERNAL_TO_FDW #

This directive, enabled by default, allows to export Oracle external tables as file_fdw foreign tables. To not export these tables at all, set the directive to 0.

INTERNAL_DATE_MAX #

Internal timestamps retrieved from custom type are extracted in the following format: 01-JAN-77 12.00.00.000000 AM. It is impossible to know the exact century that must be used, so by default any year below 49 will be added to 2000 and others to 1900. You can use this directive to change the default value 49. This is only relevant if you have a user-defined type with a column timestamp.

AUDIT_USER #

Set the comma-separated list of usernames that must be used to filter queries from the DBA_AUDIT_TRAIL table. Default is to not scan this table and to never look for queries. This parameter is used only with SHOW_REPORT and QUERY export types with no input file for queries. Note that queries will be normalized before output unlike when a file is given at input using the -i option.

FUNCTION_CHECK #

Disable this directive if you want to disable check_function_bodies.

SET check_function_bodies = false;

It disables validation of the function body string during CREATE FUNCTION. Default is to use the postgresql.conf setting that enables it by default.

ENABLE_BLOB_EXPORT #

Exporting BLOB takes time, in some circumstances you may want to export all data except the BLOB columns. In this case disable this directive and the BLOB columns will not be included into data export. Take care that the target bytea column do not have a NOT NULL constraint.

DATA_EXPORT_ORDER #

By default data export order will be done by sorting on table names. If you have huge tables at the end of alphabetic order and you are using multiprocess, it can be better to set the sort order on size so that multiple small tables can be processed before the largest tables finish. In this case set this directive to size. Possible values are name and size. Note that export type SHOW_TABLE and SHOW_COLUMN will use this sort order too, not only COPY or INSERT export type.

4.6.2. Limiting Objects to Export #

You may want to export only a part of an Oracle database, here is a set of configuration directives that will allow you to control what parts of the database should be exported.

ALLOW #

This directive allows you to set a list of objects on which the export must be limited, excluding all other objects in the same type of export. The value is a space or comma-separated list of objects names to export. You can include valid regex into the list. For example:

ALLOW           EMPLOYEES SALE_.* COUNTRIES .*_GEOM_SEQ

This will export objects with name EMPLOYEES, COUNTRIES, all objects beginning with SALE_, and all objects with a name ending by _GEOM_SEQ. The object depends on the export type. Note that regex will not work with 8i database, you must use the % placeholder instead, ora2pgpro will use the LIKE operator.

This is the manner to declare global filters that will be used with the current export type. You can also use extended filters that will be applied to specific objects or only on their related export type. For example:

ora2pgpro -p -c ora2pgpro.conf -t TRIGGER -a 'TABLE[employees]'

This will limit the export of triggers to those defined on table employees. If you want to extract all triggers but not some INSTEAD OF triggers:

ora2pgpro -c ora2pgpro.conf -t TRIGGER -e 'VIEW[trg_view_.*]'

Or a more complex form:

ora2pgpro -p -c ora2pgpro.conf -t TABLE -a 'TABLE[EMPLOYEES]' \
        -e 'INDEX[emp_.*];CKEY[emp_salary_min]'

This command will export the definition of the employees table but will exclude all index beginning with emp_ and the CHECK constraint called emp_salary_min.

When exporting partition, you can exclude some partition tables by using the following command:

ora2pgpro -p -c ora2pgpro.conf -t PARTITION -e 'PARTITION[PART_199.* PART_198.*]'

This will exclude partitioned tables for years 1980 to 1999 from the export but not the main partition table. The trigger will also be adapted to exclude those tables.

With GRANT export, you can use this extended form to exclude some users from the export, or limit the export to some others:

ora2pgpro -p -c ora2pgpro.conf -t GRANT -a 'USER1 USER2'
or
ora2pgpro -p -c ora2pgpro.conf -t GRANT -a 'GRANT[USER1 USER2]'

The latter will limit export grants to users USER1 and USER2. But if you do not want to export grants on some functions for these users, for example:

ora2pgpro -p -c ora2pgpro.conf -t GRANT -a 'USER1 USER2' -e 'FUNCTION[adm_.*];PROCEDURE[adm_.*]'

Oracle does not allow the use of look-ahead expression so you may want to exclude some objects that match the ALLOW regexp you have defined. For example, if you want to export all table starting with E but not those starting with EXP, it is not possible to do that in a single expression. This is why you can start a regular expression with the ! character to exclude object matching the regexp given just after. The previous example can be written as follows:

ALLOW   E.* !EXP.*

It will be translated into the following in the object search expression:

REGEXP_LIKE(..., '^E.*$') AND NOT REGEXP_LIKE(..., '^EXP.*$')
EXCLUDE #

This directive is the opposite of the previous one, it allows you to define a space or comma-separated list of object name to exclude from the export. You can include a valid regular expression into the list. For example:

EXCLUDE         EMPLOYEES TMP_.* COUNTRIES

This will exclude objects with names EMPLOYEES, COUNTRIES, and all tables beginning with tmp_.

For example, you can ban from export unwanted functions with this directive:

EXCLUDE         write_to_.* send_mail_.*

This example will exclude all functions, procedures, or functions in a package with the name beginning with those regex. Note that regex will not work with 8i database, you must use the % placeholder instead, ora2pgpro will use the NOT LIKE operator. See above (directive ALLOW) for the extended syntax.

NO_EXCLUDED_TABLE #

By default ora2pgpro excludes from export some Oracle garbage tables that should never be part of an export. This behavior generates a lot of REGEXP_LIKE expressions which are slowing down the export when looking at tables. To disable this behavior, enable this directive, but you will have to exclude or clean up later by yourself the unwanted tables. The regexp used to exclude the table are defined in the array @EXCLUDED_TABLES in lib/Ora2Pgpro.pm. Note that this behavior is independent to the EXCLUDE configuration directive.

VIEW_AS_TABLE #

Set which view to export as a table. By default none. The value must be a list of view names or regexp separated by space or comma. If the object name is a view and the export type is TABLE, the view will be exported as a CREATE TABLE statement. If export type is COPY or INSERT, the corresponding data will be exported. See Exporting Views as Postgres Pro Tables for more details.

MVIEW_AS_TABLE #

Set which materialized view to export as a table. By default none. Value must be a list of materialized view names or regexp separated by space or comma. If the object name is a materialized view and the export type is TABLE, the view will be exported as a CREATE TABLE statement. If export type is COPY or INSERT, the corresponding data will be exported.

NO_VIEW_ORDERING #

By default ora2pgpro tries to order views to avoid error at the import time with nested views. With a huge number of views, this can take a very long time, you can bypass this ordering by enabling this directive.

GRANT_OBJECT #

When exporting grants, you can specify a comma-separated list of objects for which privileges will be exported. Default is export for all objects. Here are the possibles values TABLE, VIEW, MATERIALIZED VIEW, SEQUENCE, PROCEDURE, FUNCTION, PACKAGE BODY, TYPE, SYNONYM, DIRECTORY. Only one object type is allowed at a time. For example, set it to TABLE if you just want to export privileges on tables. You can use the -g option to overwrite it.

WHERE #

This directive allows you to specify a WHERE clause filter when dumping the contents of tables. Value constructs as follows: TABLE_NAME[WHERE_CLAUSE], or if you have only one where clause for each table just put the where clause as the value. Both are possible too. Here are some examples:

# Global where clause applying to all tables included in the export
WHERE  1=1

# Apply the where clause only on table TABLE_NAME
WHERE  TABLE_NAME[ID1='001']

# Applies two different clause on tables TABLE_NAME and OTHER_TABLE
# and a generic where clause on DATE_CREATE to all other tables
WHERE  TABLE_NAME[ID1='001' OR ID1='002] DATE_CREATE > '2001-01-01' OTHER_TABLE[NAME='test']

Any where clause not included into a table name bracket clause will be applied to all exported table including the tables defined in the WHERE clause. These WHERE clauses are very useful if you want to archive some data or to the opposite only export some recent data.

To be able to test data import quickly, it is useful to limit data export to the first thousand tuples of each table. For Oracle, define the following clause:

WHERE   ROWNUM < 1000

This can also be restricted to some tables data export.

The command-line option -W or --where will override this directive for the global part and per table if the table names are the same.

TOP_MAX #

This directive is used to limit the number of items shown in the top N lists like the top list of tables per number of rows and the top list of largest tables in megabytes. By default it is set to 10 items.

LOG_ON_ERROR #

Enable this directive if you want to continue direct data import on error. When ora2pgpro receives an error in the COPY or INSERT statement from Postgres Pro, it will log the statement to a file called TABLENAME_error.log in the output directory and continue to the next bulk of data. Like this you can try to fix the statement and manually reload the error log file. Default is disabled: abort import on error.

REPLACE_QUERY #

Sometimes you may want to extract data from an Oracle table but you need a custom query for that. Not just a SELECT * FROM table like ora2pgpro does but a more complex query. This directive allows you to overwrite the query used by ora2pgpro to extract data. The format is TABLENAME[SQL_QUERY]. If you have multiple table to extract by replacing the ora2pgpro query, you can define multiple REPLACE_QUERY lines.

REPLACE_QUERY   EMPLOYEES[SELECT e.id,e.fisrtname,lastname FROM EMPLOYEES e JOIN EMP_UPDT u ON (e.id=u.id AND u.cdate>'2014-08-01 00:00:00')]

4.6.3. Control of Full Text Search Export #

Several directives can be used to control the way ora2pgpro will export the Oracle text search indexes. By default CONTEXT indexes will be exported to Postgres Pro FTS indexes but CTXCAT indexes will be exported as indexes using the pg_trgm extension.

CONTEXT_AS_TRGM #

Force ora2pgpro to translate Oracle text indexes into Postgres Pro indexes using the pg_trgm extension. Default is to translate CONTEXT indexes into FTS indexes and CTXCAT indexes using pg_trgm. Most of the time using pg_trgm is enough, this is what this directive is for. You need to create the pg_trgm extension into the destination database before importing the objects.

FTS_INDEX_ONLY #

By default, ora2pgpro creates a function-based index to translate Oracle text indexes.

CREATE INDEX ON t_document
  USING gin(to_tsvector('pg_catalog.french', title));

You will have to rewrite the CONTAIN() clause using to_tsvector(), for example:

SELECT id,title FROM t_document
  WHERE to_tsvector(title) @@ to_tsquery('search_word');

To force ora2pgpro to create an extra tsvector column with dedicated triggers for FTS indexes, disable this directive. In this case, ora2pgpro will add the column as follows:

ALTER TABLE t_document ADD COLUMN tsv_title tsvector;

Then update the column to compute FTS vectors if the data have been loaded before UPDATE t_document SET tsv_title = to_tsvector('pg_catalog.french', coalesce(title,''));. To automatically update the column when a modification in the title column appears, ora2pgpro adds the following trigger:

CREATE FUNCTION tsv_t_document_title() RETURNS trigger AS $$
BEGIN
       IF TG_OP = 'INSERT' OR new.title != old.title THEN
               new.tsv_title :=
               to_tsvector('pg_catalog.french', coalesce(new.title,''));
       END IF;
       return new;
END
$$ LANGUAGE plpgsql;
CREATE TRIGGER trig_tsv_t_document_title BEFORE INSERT OR UPDATE
 ON t_document
 FOR EACH ROW EXECUTE PROCEDURE tsv_t_document_title();

When the Oracle text index is defined over multiple columns, ora2pgpro will use setweight() to set a weight in the order of the column declaration.

FTS_CONFIG #

Use this directive to force text search configuration to use. When it is not set, ora2pgpro will autodetect the stemmer used by Oracle for each index and pg_catalog.english if the information is not found.

USE_UNACCENT #

If you want to perform your text search in an accent-insensitive way, enable this directive. ora2pgpro will create a helper function over unaccent() and the pg_trgm indexes using this function. With FTS, ora2pgpro will redefine your text search configuration, for example:

CREATE TEXT SEARCH CONFIGURATION fr (COPY = french);
ALTER TEXT SEARCH CONFIGURATION fr
        ALTER MAPPING FOR hword, hword_part, word WITH unaccent, french_stem;

Then set the FTS_CONFIG ora2pgpro.conf directive to fr instead of pg_catalog.english.

When enabled, ora2pgpro will create the wrapper function:

CREATE OR REPLACE FUNCTION unaccent_immutable(text)
RETURNS text AS
$$
    SELECT public.unaccent('public.unaccent', $1);
$$ LANGUAGE sql IMMUTABLE
   COST 1;

The indexes are exported as follows:

CREATE INDEX t_document_title_unaccent_trgm_idx ON t_document
    USING gin (unaccent_immutable(title) gin_trgm_ops);

In your queries, you will need to use the same function in the search to be able to use the function-based index. Example:

SELECT * FROM t_document
        WHERE unaccent_immutable(title) LIKE '%donnees%';
USE_LOWER_UNACCENT #

Same as above but call lower() in the unaccent_immutable() function:

CREATE OR REPLACE FUNCTION unaccent_immutable(text)
RETURNS text AS
$$
    SELECT lower(public.unaccent('public.unaccent', $1));
$$ LANGUAGE sql IMMUTABLE;

4.6.4. Modifying Object Structure #

One of the main advantages of ora2pgpro is its flexibility to replicate Oracle database into Postgres Pro database with a different structure or schema. There are configuration directives that allow you to map those differences.

REORDERING_COLUMNS #

Enable this directive to reorder columns and minimize the footprint on disc, so that more rows fit on a data page, which is the most important factor for speed. Default is disabled, which means that the same order as in Oracle tables definition is used, that should be enough for most usages. This directive is only used with TABLE export.

MODIFY_STRUCT #

This directive allows you to limit the columns extracted for a given table. The value consists of a space-separated list of table names with a set of columns in parenthesis as follows: MODIFY_STRUCT NOM_TABLE(nomcol1,nomcol2,...) .... For example:

MODIFY_STRUCT   T_TEST1(id,dossier) T_TEST2(id,fichier)

This will only extract the columns id and dossier from the table T_TEST1 and columns id and fichier from the table T_TEST2. This directive can only be used with TABLE, COPY, or INSERT export. With TABLE export, the CREATE TABLE DDL statement will respect the new list of columns, and all indexes or foreign keys pointing to or from a column removed will not be exported.

EXCLUDE_COLUMNS #

Instead of redefining the table structure with MODIFY_STRUCT, you may want to exclude some columns from the table export. The value consists of a space-separated list of table names with a set of columns in parenthesis as follows: EXCLUDE_COLUMNS NOM_TABLE(nomcol1,nomcol2,...) .... For example:

EXCLUDE_COLUMNS T_TEST1(id,dossier) T_TEST2(id,fichier)

This will exclude from the export the columns id and dossier from the table T_TEST1 and columns id and fichier from the table T_TEST2. This directive can only be used with TABLE, COPY, or INSERT export. With TABLE export, the CREATE TABLE DDL statement will respect the new list of columns, and all indexes or foreign key pointing to or from a column removed will not be exported.

REPLACE_TABLES #

This directive allows you to remap a list of Oracle table names to Postgres Pro table names during export. The value is a list of space-separated values with the following structure:

REPLACE_TABLES  ORIG_TBNAME1:DEST_TBNAME1 ORIG_TBNAME2:DEST_TBNAME2

Oracle tables ORIG_TBNAME1 and ORIG_TBNAME2 will be respectively renamed to DEST_TBNAME1 and DEST_TBNAME2.

REPLACE_COLS #

Like table names, the names of the columns can be remapped to different ones using the following syntax: REPLACE_COLS ORIG_TBNAME(ORIG_COLNAME1:NEW_COLNAME1,ORIG_COLNAME2:NEW_COLNAME2). For example:

REPLACE_COLS    T_TEST(dico:dictionary,dossier:folder)

This renames the Oracle columns dico and dossier from table T_TEST to dictionary and folder.

REPLACE_AS_BOOLEAN #

If you want to change the type of some Oracle columns to Postgres Pro boolean during the export, you can define here a list of tables and columns separated by space as follows:

REPLACE_AS_BOOLEAN     TB_NAME1:COL_NAME1 TB_NAME1:COL_NAME2 TB_NAME2:COL_NAME2

The values set in the boolean columns list will be replaced with the t and f following the default replacement values and those additionally set in directive BOOLEAN_VALUES.

Note that if you have modified the table name with REPLACE_TABLES and/or the column name, you need to use the name of the original table and/or column.

REPLACE_COLS            TB_NAME1(OLD_COL_NAME1:NEW_COL_NAME1)
REPLACE_AS_BOOLEAN      TB_NAME1:OLD_COL_NAME1

You can also give a type and precision to convert all fields of that type as a boolean automatically. For example:

REPLACE_AS_BOOLEAN      NUMBER:1 CHAR:1 TB_NAME1:COL_NAME1 TB_NAME1:COL_NAME2

This will also replace any field of type number(1) or char(1) as a boolean in all exported tables.

BOOLEAN_VALUES #

Use this to add additional definition of the possible boolean values used in Oracle fields. You must set a space-separated list of TRUE:FALSE values. By default here are the values recognized by ora2pgpro:

BOOLEAN_VALUES          yes:no y:n 1:0 true:false enabled:disabled

Any values defined here will be added to the default list.

REPLACE_ZERO_DATE #

When ora2pgpro finds a zero date 0000-00-00 00:00:00, it is replaced by NULL. This could be a problem if your column is defined with the NOT NULL constraint. If you can not remove the constraint, use this directive to set an arbitral date that will be used instead. You can also use -INFINITY if you do not want to use a fake date.

INDEXES_SUFFIX #

Add the given value as suffix to index names. Useful, if you have indexes with same name as tables. For example:

INDEXES_SUFFIX          _idx

This will add _idx at the end of all index names. Not so common but can help.

INDEXES_RENAMING #

Enable this directive to rename all indexes in the following format: tablename_columns_names. Could be very useful for databases that have the same index name multiple times or that use the same name as a table, which is not allowed by Postgres Pro. Disabled by default.

USE_INDEX_OPCLASS #

Operator classes text_pattern_ops, varchar_pattern_ops, and bpchar_pattern_ops support B-tree indexes on the corresponding types. The difference from the default operator classes is that the values are compared strictly character by character rather than according to the locale-specific collation rules. This makes these operator classes suitable for use by queries involving pattern-matching expressions (LIKE or POSIX regular expressions) when the database does not use the standard C locale. If you enable, with value 1, this will force ora2pgpro to export all indexes defined on varchar2() and char() columns using those operators. If you set it to a value greater than 1, it will only change indexes on columns where the character limit is greater or equal than this value. For example, set it to 128 to create these kind of indexes on columns of type varchar2(N) where N >= 128.

RENAME_PARTITION #

Enable this directive if you want that your partition tables will be renamed. Disabled by default. If you have multiple partitioned tables, when exported to Postgres Pro some partitions could have the same name but different parent tables. This is not allowed, a table name must be unique, in this case enable this directive. The following rules are applied by default:

  • Partition: "tablename"_part"pos" where "pos" is the partition number.
  • Subpartition: "tablename"_part"pos"_subpart"pos".
  • Partition/subpartition: "tablename"_part_default "tablename"_part"pos"_subpart_default.

DISABLE_PARTITION #

If you do not want to reproduce the partitioning like in Oracle and want to export all partitioned Oracle data into the main single table in Postgres Pro, enable this directive. ora2pgpro will export all data into the main table. Default is to use partitioning, ora2pgpro will export data from each partition and import them into the Postgres Pro dedicated partition table.

DISABLE_UNLOGGED #

By default ora2pgpro exports Oracle tables with the NOLOGGING attribute as UNLOGGED tables. You may want to fully disable this feature because you will lose all data from unlogged tables in case of a Postgres Pro crash. Set it to 1 to export all tables as normal tables.

FAQ