<refentry id="app-ora2pgpro">
 <indexterm zone="app-ora2pgpro"><primary>ora2pgpro</primary></indexterm>

 <refmeta>
  <refentrytitle><application>ora2pgpro</application></refentrytitle>
  <manvolnum>1</manvolnum>
  <refmiscinfo>Приложение</refmiscinfo>
 </refmeta>

 <refnamediv>
  <refname>ora2pgpro</refname>
  <refpurpose>перенести базу данных из Oracle в Postgres Pro</refpurpose>
 </refnamediv>

 <refsynopsisdiv>
  <cmdsynopsis>
   <command>ora2pgpro</command>
   <arg choice="opt" rep="repeat">
    <replaceable class="parameter">параметр</replaceable>
   </arg>
  </cmdsynopsis>

  <cmdsynopsis>
   <command>ora2pgpro</command>
   <arg choice="opt">
    <option>-c</option> <replaceable class="parameter">файл_конфигурации</replaceable>
   </arg>
   <arg choice="opt">
    <option>-t</option> <replaceable class="parameter">тип_экспорта</replaceable>
   </arg>
   <arg choice="opt">
    <option>-o</option> <replaceable class="parameter">выходной_файл</replaceable>
   </arg>
  </cmdsynopsis>

  <cmdsynopsis>
   <command>ora2pgpro</command>
   <arg choice="opt">
    <option>-s</option> <replaceable class="parameter">dsn</replaceable>
   </arg>
   <arg choice="opt">
    <option>-u</option> <replaceable class="parameter">пользователь</replaceable>
   </arg>
   <arg choice="opt">
    <option>-w</option> <replaceable class="parameter">пароль</replaceable>
   </arg>
  </cmdsynopsis>

  <cmdsynopsis>
   <command>ora2pgpro</command>
   <arg choice="plain">
    <option>-i</option> <replaceable class="parameter">входной_файл</replaceable>
   </arg>
   <arg choice="opt">
    <option>-p</option>
   </arg>
  </cmdsynopsis>

  <cmdsynopsis>
   <command>ora2pgpro</command>
   <arg choice="plain">
    <option>--project_base</option> <replaceable class="parameter">каталог</replaceable>
   </arg>
   <arg choice="plain">
    <option>--init_project</option> <replaceable class="parameter">имя_проекта</replaceable>
   </arg>
  </cmdsynopsis>

  <cmdsynopsis>
   <command>ora2pgpro</command>
   <group choice="req">
    <arg choice="plain"><option>-h</option></arg>
    <arg choice="plain"><option>--help</option></arg>
    <arg choice="plain"><option>-v</option></arg>
    <arg choice="plain"><option>--version</option></arg>
   </group>
  </cmdsynopsis>
 </refsynopsisdiv>

 <refsect1>
  <title>Конфигурация</title>

  <para>Настройка <application>ora2pgpro</application> заключается в выборе экспортируемой БД Oracle и типа экспорта.</para>
  <para>Используя один файл конфигурации <filename>ora2pgpro.conf</filename>, можно полностью управлять процессом миграции БД Oracle. В файле записывается имя директивы заглавными буквами и её значение после символа табуляции. Строки, начинающиеся с <literal>#</literal>, представляют собой комментарии. Директивы можно задавать в любом порядке, а включаются они при считывании значения в файле конфигурации.</para>
  <para>Директивы, принимающие одно значение, можно задавать в файле конфигурации несколько раз, при этом будет использоваться последнее вхождение. Директивы, принимающие список значений, также можно задавать несколько раз, и значения из последующих вхождений будут добавляться в список. Если для загрузки пользовательского файла конфигурации используется директива <xref linkend="ora2pgpro-import"/>, директивы из этого файла будут сохраняться в файле конфигурации после директивы <varname>IMPORT</varname>, поэтому рекомендуется задавать её в конце файла конфигурации.</para>
  <para>Значения, переданные в командой строке, переопределяют значения из файла конфигурации.</para>
  <para>Сначала необходимо убедиться, что пути ко всем библиотекам и двоичным файлам включают каталог установки <application>Oracle Instant Client</application>:</para>
<programlisting>export LD_LIBRARY_PATH=/usr/lib/oracle/11.2/client64/lib
export PATH="/usr/lib/oracle/11.2/client64/bin:$PATH"</programlisting>
    <para>По умолчанию <application>ora2pgpro</application> выполняет поиск файла конфигурации <filename>/etc/ora2pgpro/ora2pgpro.conf</filename>, и если этот файл существует, достаточно выполнить команду:</para>
<programlisting>/usr/local/bin/ora2pgpro</programlisting>
    <para>Если необходимо вызвать другой файл конфигурации, задайте путь в командной строке:</para>
<programlisting>/usr/local/bin/ora2pgpro -c /etc/ora2pgpro/new_ora2pgpro.conf</programlisting>

  <refsect2>
  <title>Параметры командной строки</title>

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

  <variablelist>
    <varlistentry>
      <term><option>-a</option></term>
      <term><option>--allow</option></term>
      <listitem>
      <para>Задать список экспортируемых объектов, разделённых запятыми. Параметр может также использоваться с типом <literal>SHOW_COLUMN</literal>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-b</option></term>
      <term><option>--basedir</option></term>
      <listitem>
      <para>Задать выходной каталог для файлов, полученных в результате экспорта.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-c</option></term>
      <term><option>--conf</option></term>
      <listitem>
      <para>Указать файл конфигурации, отличный от используемого по умолчанию <filename>/etc/ora2pgpro/ora2pgpro_scanner.conf</filename>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-C</option></term>
      <term><option>--cdc_file</option></term>
      <listitem>
      <para>Указать файл для хранения/чтения SCN таблиц во время экспорта. По умолчанию: <filename>TABLES_SCN.log</filename> в текущем каталоге. Для создания этого файла используйте параметр <option>--cdc_ready</option>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-d</option></term>
      <term><option>--debug</option></term>
      <listitem>
      <para>Выводить подробные сообщения.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-D</option></term>
      <term><option>--data_type</option></term>
      <listitem>
      <para>Разрешить использование пользовательских типов в командной строке.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-e</option></term>
      <term><option>--exclude</option></term>
      <listitem>
      <para>Исключить из экспорта список указанных объектов, разделённых запятыми. Может использоваться с типом <varname>SHOW_COLUMN</varname>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-h</option></term>
      <term><option>--help</option></term>
      <listitem>
      <para>Выводить краткую справку.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-g</option></term>
      <term><option>--grant_object</option></term>
      <listitem>
      <para>Извлекать права для данного типа объектов. Возможные значения даны в описании конфигурации <xref linkend="ora2pgpro-grant-object"/>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-i</option></term>
      <term><option>--input</option></term>
      <listitem>
      <para>Указать файл, содержащий код <application>PL/SQL</application> для портирования, когда подключение к БД Oracle отсутствует.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-j</option></term>
      <term><option>--jobs</option></term>
      <listitem>
      <para>Задать число параллельных процессов при передаче данных в Postgres Pro.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-J</option></term>
      <term><option>--copies</option></term>
      <listitem>
      <para>Задать число параллельных соединений для извлечения данных из Oracle.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-l</option></term>
      <term><option>--log</option></term>
      <listitem>
      <para>Указать файл журнала. По умолчанию: <systemitem>stdout</systemitem>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-L</option></term>
      <term><option>--limit</option></term>
      <listitem>
      <para>Задать количество кортежей, извлекаемых из Oracle и сохраняемых в памяти до записи, по умолчанию 10000.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-n</option></term>
      <term><option>--namespace</option></term>
      <listitem>
      <para>Указать схему Oracle для извлечения данных.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-N</option></term>
      <term><option>--pg_schema</option></term>
      <listitem>
      <para>Задать <varname>search_path</varname> для Postgres Pro.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-o</option></term>
      <term><option>--out</option></term>
      <listitem>
      <para>Указать путь к выходному файлу, в который записываются команды SQL. По умолчанию: <filename>output.sql</filename> в текущем каталоге.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-p</option></term>
      <term><option>--plsql</option></term>
      <listitem>
      <para>Включить преобразование кода <application>PL/SQL</application> в код <application>PL/pgSQL</application>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-P</option></term>
      <term><option>--parallel</option></term>
      <listitem>
      <para>Задать число таблиц для параллельного извлечения данных.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-q</option></term>
      <term><option>--quiet</option></term>
      <listitem>
      <para>Отключить вывод индикатора выполнения.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-r</option></term>
      <term><option>--relative</option></term>
      <listitem>
      <para>Использовать параметр <option>\ir</option> вместо <option>\i</option> в создаваемых скриптах <application>psql</application>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-s</option></term>
      <term><option>--source</option></term>
      <listitem>
      <para>Задать источник данных DBI для Oracle.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-S</option></term>
      <term><option>--scn</option></term>
      <listitem>
      <para>Задать системный номер изменения Oracle (System Change Number, SCN) для экспорта данных. Он используется в предложениях <literal>WHERE</literal> для получения данных с типами экспорта <literal>COPY</literal> или <literal>INSERT</literal>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-t</option></term>
      <term><option>--type</option></term>
      <listitem>
      <para>Задать тип экспорта. Параметр переопределяет значение, заданное в файле конфигурации (<literal>TYPE</literal>).</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-T</option></term>
      <term><option>--temp_dir</option></term>
      <listitem>
      <para>Указать отдельный временный каталог для одновременного запуска двух или более экземпляров <application>ora2pgpro</application>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-u</option></term>
      <term><option>--user</option></term>
      <listitem>
      <para>Указать пользователя для подключения к БД Oracle. Вместо этого параметра можно использовать переменную окружения <envar>ORA2PG_USER</envar>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-v</option></term>
      <term><option>--version</option></term>
      <listitem>
      <para>Показать версию <application>ora2pgpro</application> и прервать выполнение.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-w</option></term>
      <term><option>--password</option></term>
      <listitem>
      <para>Указать пароль для пользователя БД Oracle. Вместо этого параметра можно использовать переменную окружения <envar>ORA2PG_PASSWD</envar>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>-W</option></term>
      <term><option>--where</option></term>
      <listitem>
      <para>Задать предложение <literal>WHERE</literal>, добавляемое к запросу Oracle для получения данных. Параметр можно указывать несколько раз.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--forceowner</option></term>
      <listitem>
      <para>Принудительно назначать владельца таблиц и последовательностей, как в Oracle. Если в значении указать имя пользователя, он будет назначен владельцем. По умолчанию владельцем будет пользователь, используемый для подключения к БД Postgres Pro.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--nls_lang</option></term>
      <listitem>
      <para>Задать кодировку клиента Oracle в <varname>NLS_LANG</varname>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--client_encoding</option></term>
      <listitem>
      <para>Задать кодировку клиента Postgres Pro.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--view_as_table</option></term>
      <listitem>
      <para>Указать список представлений, разделённых запятыми, для экспорта в виде таблиц.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--estimate_cost</option></term>
      <listitem>
      <para>Включить <literal>SHOW_REPORT</literal> для помощи в оценке стоимости миграции.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--cost_unit_value</option></term>
      <listitem>
      <para>Задать число минут для оценки стоимости. По умолчанию 5 минут, что соответствует скорости миграции, выполняемой специалистом Postgres Pro. Для первой миграции установите значение 10.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--dump_as_html</option></term>
      <listitem>
      <para>Выгружать отчёт в формате HTML. Параметр используется только с <literal>SHOW_REPORT</literal>. По умолчанию отчёт выгружается в формате простого текста.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--dump_as_csv</option></term>
      <listitem>
      <para>Аналогично предыдущему, но отчёт выгружается в формате <acronym>CSV</acronym>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--dump_as_sheet</option></term>
      <listitem>
      <para>Выводить отчёт по оценке миграции с отдельной строкой в формате <acronym>CSV</acronym> для каждой БД.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--init_project</option></term>
      <listitem>
      <para>Инициализировать стандартное дерево проекта <application>ora2pgpro</application>. Каталог верхнего уровня создаётся в базовом каталоге проекта.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--project_base</option></term>
      <listitem>
      <para>Указать базовый каталог для деревьев проекта <application>ora2pgpro</application>. По умолчанию это текущий каталог.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--print_header</option></term>
      <listitem>
      <para>Выводить заголовок <acronym>CSV</acronym>, что особенно полезно при первом запуске <application>ora2pgpro</application>. Параметр используется вместе с параметром <option>--dump_as_sheet</option>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--human_days_limit</option></term>
      <listitem>
      <para>Задать предел человеко-дней, по достижении которого уровень оценки миграции меняется с B на C. По умолчанию 5 человеко-дней.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--audit_user</option></term>
      <listitem>
      <para>Указать список имён пользователей для фильтрации запросов в таблице <xref linkend="ora2pgpro-audit-user"/>. Используется только с типами экспорта <literal>SHOW_REPORT</literal> и <literal>QUERY</literal>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--pg_dsn</option></term>
      <listitem>
      <para>Указать источник данных для прямого импорта в Postgres Pro.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--pg_user</option></term>
      <listitem>
      <para>Указать пользователя Postgres Pro.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--pg_pwd</option></term>
      <listitem>
      <para>Указать пароль пользователя Postgres Pro.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--count_rows</option></term>
      <listitem>
      <para>Принудительно подсчитывать действительное количество строк при выполнении <literal>TEST</literal>, <literal>TEST_COUNT</literal> и <literal>SHOW_TABLE</literal>.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--no_header</option></term>
      <listitem>
      <para>Не выводить заголовок <application>ora2pgpro</application> в выходной файл.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--oracle_speed</option></term>
      <listitem>
      <para>Узнать скорость, с которой могут передаваться данные из Oracle. Данные не обрабатываются и не записываются.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--ora2pg_speed</option></term>
      <listitem>
      <para>Узнать скорость, с которой <application>ora2pgpro</application> может отправлять преобразованные данные. Данные не записываются.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--blob_to_lo</option></term>
      <listitem>
      <para>Экспортировать BLOB в виде больших объектов. Параметр может использоваться только при выполнении <literal>SHOW_COLUMN</literal>, <literal>TABLE</literal> и <literal>INSERT</literal>.</para>
      </listitem>
    </varlistentry>

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

    <varlistentry>
      <term><option>--lo_import</option></term>
      <listitem>
      <para>Использовать команду <application>psql</application> <command>\lo_import</command> для импорта BLOB в виде больших объектов. Параметр можно использовать для импорта с типом <literal>COPY</literal> и последующим импортом большого объекта вручную. Необходим для импорта BLOB размером более 1 ГБ.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--mview_as_table</option></term>
      <listitem>
      <para>Указать список материализованных представлений, разделённых запятыми, для экспорта в виде обычных таблиц.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--drop_if_exists</option></term>
      <listitem>
      <para>Удалить объект перед созданием, если он уже существует.</para>
      </listitem>
    </varlistentry>

    <varlistentry>
      <term><option>--offline</option></term>
      <listitem>
      <para>Преобразовывать экспортируемые данные без подключения к БД Oracle.</para>
      </listitem>
    </varlistentry>
  </variablelist>

  <para>В случае успеха <application>ora2pgpro</application> возвращает 0, а в случае ошибки 1. Если дочерний процесс прерывается, возвращается 2 и выводится следующее предупреждение: <quote>WARNING: an error occurs during data export. Please check what's happen.</quote> (ПРЕДУПРЕЖДЕНИЕ: Во время экспорта данных произошла ошибка. Обратите внимание.) В большинстве случаев ошибка вызвана нехваткой памяти — попробуйте уменьшить значение <xref linkend="ora2pgpro-data-limit"/>.</para>
  <para>Обратите внимание, что производительность можно увеличить, обновив статистику в Oracle:</para>
<programlisting>DBMS_STATS.GATHER_SCHEMA_STATS
DBMS_STATS.GATHER_DATABASE_STATS
DBMS_STATS.GATHER_DICTIONARY_STATS</programlisting>
  <para>Если заданы параметры <option>--project_base</option> и <option>--init_project</option>, <application>ora2pgpro</application> создаёт шаблон проекта, содержащий дерево проекта, файл конфигурации и скрипт для экспорта всех объектов из БД Oracle. Пример использования команды:</para>
<programlisting>ora2pgpro --project_base /app/migration/ --init_project test_project
	Creating project test_project.
	/app/migration/test_project/
		schema/
			dblinks/
			directories/
			functions/
			grants/
			mviews/
			packages/
			partitions/
			procedures/
			sequences/
			synonyms/
			tables/
			tablespaces/
			triggers/
			types/
			views/
		sources/
			functions/
			mviews/
			packages/
			partitions/
			procedures/
			triggers/
			types/
			views/
		data/
		config/
		reports/

	Generating generic configuration file
	Creating script export_schema.sh to automate all exports.
	Creating script import_all.sh to automate all imports.</programlisting>

  <para>При этом создаётся стандартный файл конфигурации, в котором можно задать параметры подключения к БД Oracle, и скрипт оболочки <filename>export_schema.sh</filename>. Каталог <filename>sources/</filename> будет содержать код Oracle, каталог <filename>schema/</filename> — код для портирования в Postgres Pro. Каталог <filename>reports/</filename> будет содержать HTML-отчёты, которые помогают оценить стоимость миграции.</para>
  <para>Если вы хотите использовать собственный файл конфигурации, укажите путь к нему в параметре <option>-c</option>. Допишите к имени файла суффикс <literal>.dist</literal>, чтобы добавить в него стандартные параметры конфигурации <application>ora2pgpro</application>, в противном случае файл будет копирован в исходном состоянии.</para>
  <para>После установки подключения к БД Oracle можно выполнить скрипт <filename>export_schema.sh</filename>, чтобы экспортировать все типы объектов из БД Oracle и вывести файлы DDL в подкаталоги схемы. По завершении процесса, когда импортируемая схема будет проверена, будет выдана команда для последующего экспорта данных.</para>
  <para>Можно загрузить созданные файлы DDL вручную или воспользоваться скриптом <filename>import_all.sh</filename>, чтобы импортировать файлы интерактивно. Если миграция не выполняется сразу, рекомендуется использовать эти скрипты.</para>
  </refsect2>
  </refsect1>

  <refsect1 id="pbk-authors">
   <title>Авторы</title>
    <para>Postgres Professional, Москва, Россия.</para>
  </refsect1>
</refentry>
