Можно ограничить экспорт БД 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 не будет перезаписывать вызов функции. Включайте эту директиву, только если поиск функции нарушает экспорт.
Директива 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.
Также можно вывести более подробный отчёт с информацией о стоимости миграции, подробнее см. «Оценка стоимости миграции».
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.
Иногда может потребоваться экспортировать только часть БД 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')]
Для управления экспортом индексов для полнотекстового поиска в 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, использующие эту функцию. Для индексовFTSora2pgpro переопределит конфигурацию текстового поиска, например: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;
Гибкость 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, все таблицы будут экспортировать как таблицы обычного типа.