Migration Toolkit command options

Migration Toolkitを実行するときに移行オプションを追加して、移行の詳細を制御します。たとえば、データベース内のすべてのスキーマを移行するには、 -allSchemas オプションをコマンドに追加します。

$ ./runMTK.sh -allSchemas

注釈

  • -allSchemas パラメーターは、Oracle、 EDB Postgres Advanced Server、およびPostgreSQLソースデータベースでのみサポートされています。 Sybase、MS SQL Server、およびMySQLソースデータベースではサポートされていません。 - Migration Toolkitは、データの移行中にユーザーが作成したトリガーを無効にします。ただし、 PostgreSQL / EDB Postgres Advanced Serverは`ALTER TABLE` の`DISABLE TRIGGER USER` 句を使用して継承された子パーティショントリガーを無効にすることを許可していないため、トリガーはパーティションテーブルのデータ移行中にアクティブになり、予期しない結果を引き起こす可能性があります。

Migration Toolkitで動作するコマンドオプションは、表に示すように、動作ごとにグループ化されています。

Feature

Relevant options

オフライン移行オプション

-offlineMigration

インポートオプション

-sourcedbtype, -targetdbtype, -schemaOnly, -dataOnly

スキーマ作成オプション

-dropSchema, -targetSchema

スキーマオブジェクト選択オプション

-allTables, -tables, -excludeTables,<br /><br />-constraints, -ignoreCheckConstFilter,<br /><br />-skipCKConst, -skipFKConst,<br /><br />-skipColDefaultClause,<br /><br />-indexes, -triggers,<br /><br />-allViews, -views, -excludeViews,<br /><br />-allSequences, -sequences,<br /><br />-allProcs, -procs,<br /><br />-allFuncs, -funcs,<br /><br />-checkFunctionBodies,<br /><br />-allPackages, -packages,<br /><br />-allDomains,<br /><br />-allQueues, -queues,<br /><br />-allRules,

オフライン移行オプション

-truncLoad, -enableConstBeforeDataLoad,<br /><br />-retryCount, -safeMode, -fastCopy,<br /><br />-analyze, vacuumAnalyze, -replaceNullChar,<br /><br />-copyDelimiter, -batchSize,<br /><br />-cpBatchSize, -lobBatchSize,<br /><br />-fetchSize, -filterProp<br /><br />-customColTypeMapping, -customColTypeMappingFile

Oracle固有のオプション

-allUsers, -users,<br /><br />-allProfiles, -profiles,<br /><br />-importPartitionAsTable,<br /><br />-objectTypes,<br /><br />-copyViaDBLinkOra, -allDBLinks<br /><br />-allSynonyms, -allPublicSynonyms,<br /><br />-allPrivateSynonyms, -useOraCase,<br /><br />-skipUserSchemaCreation

その他のオプション

-help, -logDir, -logFileCount, -logFileSize, -logBadSQL -verbose, -version

並列データロードの移行オプション

-loaderCount, -parallelLoadRowLimit, -tableLoaderLimit

オフライン移行オプション

コマンドラインで-offlineMigration オプションを指定すると、 Migration Toolkitはオフライン移行を実行します。オフライン移行中に、 Migration Toolkitは選択された各オブジェクトの定義を読み取り、 SQLスクリプトを作成します。後で実行すると、Postgresの各オブジェクトを複製します。

注釈

次の例では、LinuxでMigration Toolkitを呼び出します。 WindowsでMigration Toolkitを呼び出すには、 runMTK.sh コマンドの代わりに`runMTK.bat` コマンドを使用します。

スキーマとデータの両方のオフライン移行を実行するには、 ‑offlineMigration キーワードに続けてスキーマ名を指定します。

$ ./runMTK.sh -offlineMigration <schema_name>

各データベースオブジェクト定義は、ホームフォルダー内のスキーマ名とオブジェクトタイプから派生した名前で個別のファイルに保存されます。代替ファイルの宛先を指定するには、 ‑offlineMigration オプションの後にディレクトリ名を含めます。

$ ./runMTK.sh -offlineMigration <file_dest> <schema_name>

スキーマオブジェクトのみのオフライン移行(空のテーブルの作成)を実行するには、 Migration Toolkitを呼び出すときに ‑offlineMigration キーワードに加えて ‑schemaOnly キーワードを指定します。

$ ./runMTK.sh -offlineMigration -schemaOnly <schema_name>

スキーマオブジェクト定義を省略して、データのみのオフライン移行を実行するには、 Migration Toolkitを呼び出すときに ‑dataOnly キーワードと ‑offlineMigration キーワードを指定します。

$ ./runMTK.sh -offlineMigration -dataOnly <schema_name>

デフォルトでは、データはCOPY形式で書き込まれます。データをプレーンSQL形式で書き込むには、 ‑safeMode キーワードを含めます。

$ ./runMTK.sh -offlineMigration -dataOnly -safeMode <schema_name>

既定では、テーブルデータを含むオフライン移行を実行すると、テーブルごとに個別のファイルが作成されます。複数のテーブルのデータを含む単一のファイルを作成するには、 ‑singleDataFile キーワードを指定します。

$ ./runMTK.sh -offlineMigration -dataOnly -singleDataFile -safeMode <schema_name>

注釈

-singleDataFile オプションは、プレーンSQL形式でデータを移行する場合にのみ使用できます。 ‑singleDataFile オプションを含める場合は、 -safeMode キーワードを含める必要があります。

オフライン移行スクリプトの実行

edb-psqlまたは psqlコマンドラインを使用して、オフライン移行中に生成されたスクリプトを実行できます。次の例では、スキーマ(hrという名前)をEDB Postgres Advanced Serverに保存されている新しいデータベース(acctgという名前)に復元する方法について説明します。

  1. createdb コマンドを使用して、 acctgデータベースを作成します。移行したデータベースオブジェクトを復元します。

$ createdb -U enterprisedb acctg
  1. edb-psqlを使用して新しいデータベースに接続します。

$ edb-psql -U enterprisedb acctg
  1. \i メタコマンドを使用して、オブジェクト定義を作成する移行スクリプトを呼び出します。

$ acctg=# \i ./mtk_hr_ddl.sql
  1. -offlineMigration コマンドに‑singleDataFile キーワードが含まれている場合、mtk_hr_data.sql スクリプトには、新しいターゲットデータベース内のすべてのオブジェクトを再作成するために必要なコマンドが含まれます。次のコマンドでデータベースにデータを入力します。

$ acctg=# \i ./mtk_hr_data.sql

インポートオプション

デフォルトでは、 Migration ToolkitはソースデータベースがOracleで、ターゲットデータベースがEDB Postgres Advanced Serverであると想定します。 ‑sourcedbtype および-targetdbtype キーワードを含めて、デフォルト以外のソースまたはターゲットデータベースを指定します。

デフォルトでは、 Migration Toolkitはスキーマを移行するときにデータとオブジェクト定義の両方をインポートします。または、データまたはオブジェクト定義のインポートを選択できます。

-sourcedbtype <source_type>

-sourcedbtype オプションは、ソースデータベースのタイプを指定します。 source_type の場合、次のいずれかの値を使用します。mysql 、oracle 、sqlserver 、sybase 、postgresql またはenterprisedb 。 source_type は大文字と小文字を区別しません。デフォルトでは、 source_type はoracle です。

-targetdbtype <target_type>

-targetdbtype オプションは、ターゲットデータベースのタイプを指定します。 target_type の場合、次のいずれかの値を使用します:enterprisedb 、postgres 、またはpostgresql 。 target_type は大文字と小文字を区別しません。デフォルトでは、 target_type はenterprisedb です。

-schemaOnly

このオプションは、スキーマ定義をインポートし、選択したすべてのスキーマオブジェクトをターゲットデータベースに作成します。このオプションを ‑dataOnly オプションと一緒に使用することはできません。

-dataOnly

このオプションは、データのみをコピーします。 -tables オプションとともに使用すると、 Migration Toolkitは選択したテーブルのデータのみをインポートします。このオプションを-schemaOnly オプションと一緒に使用することはできません。

スキーマ作成オプション

デフォルトでは、 Migration Toolkitはソーススキーマオブジェクトまたはデータを同じ名前のスキーマにインポートします。ターゲットスキーマが存在しない場合、 Migration Toolkitは新しいスキーマを作成します。または、 ‑targetSchema option を使用してカスタムスキーマ名を指定できます。次のオプションを使用して、既存のスキーマを削除し、新しいスキーマを作成することを選択できます。

-dropSchema [true|false]

このオプションをtrue に設定すると、 Migration Toolkitは既存のスキーマとそのスキーマ内のオブジェクトを削除し、新しいスキーマを作成します。デフォルトでは、 -dropSchema はfalse です。

-targetSchema <schema_name>

-targetSchema オプションを使用して、移行したスキーマの名前を指定します。複数のスキーマを移行する場合は、各スキーマの名前を、間にスペース文字を入れないコンマ区切りのリストで指定します。 -targetSchema オプションを指定しない場合、新しいスキーマの名前はソーススキーマの名前と同じです。

information-schema 、dbo 、sys 、またはpg_catalog をターゲットスキーマ名として指定することはできません。これらのスキーマ名は、 EDB Postgres Advanced Serverのメタデータストレージ用に予約されています。

スキーマオブジェクト選択オプション

次のオプションを使用して、移行する特定のスキーマオブジェクトを選択します。

-allTables

ソーススキーマからすべてのテーブルをインポートします。

-tables <table_list>

選択したテーブルをソーススキーマからインポートします。 table_list は、間にスペース文字を含まないテーブル名のコンマ区切りリストです(例、 -tables emp,dept,acctg )。

-excludeTables <table_list>

選択したテーブルを移行から除外します。 table_list は、間にスペース文字を含まないテーブル名のコンマ区切りリストです(例、-excludeTables emp,jobhist )。このオプションは、スキーマのすべてのテーブルが-allTables オプションを介した移行用に選択されている場合に適用されます。

-constraints

テーブル制約をインポートします。このオプションは、スキーマ全体をインポートする場合、または-allTables または-tables <table_list> オプションを指定する場合にのみ有効です。

-ignoreCheckConstFilter

デフォルトでは、 Migration ToolkitはSybaseデータベースからのチェック制約とデフォルト句の移行を実装しません。 -constraints パラメーターを指定して制約とデフォルト句をSybaseデータベースから移行するときに‑ignoreCheckConstFilter パラメーターを含めます。

-skipCKConst

チェック制約の移行を省略します。このオプションは、ターゲットデータベースでサポートされていないソースデータベースの組み込み関数に基づくチェック制約を移行する場合に役立ちます。

このオプションは、スキーマ全体をインポートする場合、または-allTables または-tables <table_list> オプションが指定された場合にのみ有効です。

-skipFKConst

外部キー制約の移行を省略します。このオプションは、スキーマ全体をインポートする場合、または-allTables または-tables <table_list> オプションが指定された場合にのみ有効です。

-skipColDefaultClause

列DEFAULT 句の移行を省略します。

-indexes

テーブルインデックスをインポートします。このオプションは、スキーマ全体をインポートする場合、または-allTables または-tables <table_list> オプションを指定した場合に有効です。

-triggers

テーブルトリガーをインポートします。このオプションは、スキーマ全体をインポートする場合、またはallTables または-tables <table_list> オプションを指定した場合に有効です。

-allViews

ソーススキーマからビューをインポートします。このオプションは、ソースから動的ビューとマテリアライズドビューを移行します。 OracleおよびPostgresのマテリアライズドビューがサポートされています。

-views <view_list>

指定したマテリアライズドビューまたは動的ビューをソーススキーマからインポートします。 OracleおよびPostgresのマテリアライズドビューがサポートされています。 view_list は、間にスペース文字を含まないビュー名のコンマ区切りリストです(例、-views all_emp,mgmt_list,acct_list )。

-excludeViews <view_list>

選択したビューを移行から除外します。 view_list は、間にスペース文字を含まないビュー名のコンマ区切りリストです(例、-excludeViews all_emp,acct_list )。このオプションは、スキーマからのすべてのビューが-allViews オプションを介した移行用に選択されている場合に適用されます。

-allSequences

ソーススキーマからすべてのシーケンスをインポートします。

-sequences <sequence_list>

選択したシーケンスをソーススキーマからインポートします。 <sequence_list> は、間にスペース文字を含まないシーケンス名のコンマ区切りリストです。

-allProcs

ソーススキーマからすべてのストアドプロシージャをインポートします。

-procs <procedures_list>

選択したストアドプロシージャをソーススキーマからインポートします。 procedures_list は、間にスペース文字を含まないプロシージャー名のコンマ区切りリストです。

-allFuncs

ソーススキーマからすべての関数をインポートします。

-funcs <function_list>

選択した関数をソーススキーマからインポートします。 function_list は、間にスペース文字を含まない関数名のコンマ区切りリストです。

-checkFunctionBodies [true/false]

false の場合、関数作成中に関数本体の検証を無効にします。この検証を無効にすると、関数に前方参照が含まれる場合のエラーが回避されます。デフォルト値はtrue です。

-allPackages

ソーススキーマからすべてのパッケージをインポートします。

-packages <package_list>

選択したパッケージをソーススキーマからインポートします。 package_list は、間にスペース文字を含まないパッケージ名のコンマ区切りリストです。

-allDomains

ソースデータベースからすべてのドメイン、列挙型、および複合型をインポートします。このオプションは、ソースとターゲットの両方がPostgresホストに保存されている場合にのみ有効です。

-allQueues

ソーススキーマからすべてのキューをインポートします。これらは、 DBMS_AQおよび DBMS_AQADM ビルトインパッケージによって作成および管理されるキューです。 Oracleがソースデータベースの場合、 -objectTypes オプションも指定する必要があります。 EDB Postgres Advanced Serverがソースデータベースである場合、 -allDomains および -allTables オプションも指定する必要があります。 OracleおよびEDB Postgres Advanced Serverキューがサポートされています。

-queues <queue_list>

選択したキューをソーススキーマからインポートします。 queue_list は、間にスペース文字を含まないキュー名のコンマ区切りリストです。これらは、 DBMS_AQおよび DBMS_AQADM ビルトインパッケージによって作成および管理されるキューです。 Oracleがソースデータベースである場合、-objectTypes も指定する必要があります。 EDB Postgres Advanced Serverがソースデータベースである場合、 -allDomains および-allTables も指定する必要があります。 OracleおよびEDB Postgres Advanced Serverキューがサポートされています。

-allRules

ソースデータベースからすべてのルールをインポートします。このオプションは、ソースとターゲットの両方がPostgresホストに保存されている場合にのみ有効です。

移行オプション

移行オプションを使用して、移行プロセスの詳細を制御します。

-truncLoad

新しいデータをインポートする前に、テーブルからデータを切り捨てます。このオプションは -dataOnly オプションとともに使用します。

-enableConstBeforeDataLoad

非パーティション化ソース表がパーティション化表にマップされる場合は、 -enableConstBeforeDataLoad オプションを含めます。このオプションは、データ移行の前に、ターゲットテーブルのすべてのトリガーを有効にします。これには、データを個々のパーティションにリダイレクトするトリガーも含まれます。 -enableConstBeforeDataLoad は、 -truncLoad パラメーターも指定する場合にのみ有効です。

-retryCount [<value>]

マルチスキーマの移行を実行している場合、クロススキーマの依存関係が原因で最初の移行の試行中に移行に失敗したオブジェクトは、後の移行中に正常に移行される場合があります。 -retryCount オプションを使用して、最初の移行の試行中に失敗したオブジェクトの移行をMigration Toolkitが試行する回数を指定します。 0より大きい値を指定します。デフォルト値は2です。

-safeMode

-safeMode オプションを含めると、 Migration Toolkitは各行を移行済みとしてコミットします。移行ですべてのレコードの転送に失敗した場合、障害ポイントの前に挿入された行はターゲットデータベースに残ります。

-fastCopy

-fastCopy オプションを含めると、 Migration ToolkitがWALロギングをバイパスし、最適化された方法でCOPY操作を実行するように指定されます。デフォルトでは無効になっています。 -fastCopy オプションの使用を選択した場合、移行が中断された場合、ターゲットデータベース内の移行されたデータを回復できない場合があります。

-replaceNullChar <value>

Migration Toolkitは、値がNULLの列のインポートをサポートしています。ただし、 Migration Toolkitは、JDBC接続プロトコルを使用したNULL文字値(埋め込みバイナリゼロ0x00)のインポートをサポートしていません。 NULL文字を含むデータをインポートする場合は、 -replaceNullChar オプションを使用して、 NULL文字を単一の非NULL置換文字に置き換えます。置換文字を引用符またはアポストロフィで囲まないでください。

データを移行したら、 SQLステートメントを使用して、 -replaceNullChar で指定された文字をバイナリゼロに置き換えます。

-analyze

-analyze オプションを含めて、ターゲットデータベースに対してPostgres ANALYZE オペレーションを呼び出します。オプティマイザーは、 ANALYZE オペレーションによって収集された統計を参照し、その情報を使用して効率的なクエリプランを構築します。

-vacuumAnalyze

-vacuumAnalyze オプションを含めて、ターゲットデータベースに対してVACUUM およびANALYZE 操作の両方を呼び出します。オプティマイザーは、 ANALYZE オペレーションによって収集された統計を参照し、その情報を使用して効率的なクエリプランを構築します。 VACUUM 操作は、ターゲットデータベース内のデッドタプルが占有するストレージスペースを再利用します。

-copyDelimiter

テーブルデータロード時のCOPYコマンドで区切り文字として使用する1文字を指定します。デフォルト値は'\t' (タブ)です。

-batchSize

一括挿入のバッチサイズを指定します。有効な値は1〜1000です。デフォルトのバッチサイズは1000です。メモリ不足例外が発生した場合は、 -batchSize の値を減らします。

-cpBatchSize

COPYコマンドで使用するバッチサイズをMB単位で指定します。 0より大きい値はすべて有効です。デフォルトのバッチサイズは8 MBです。

-lobBatchSize

LOBデータ型の場合、一括ロードする行数を指定します。 BYTEA 、BLOB 、またはCLOB などのラージオブジェクト型(LOB)列を含むテーブルのデータ移行は、デフォルトで一度に1行ずつ実行されます。これは、個々のLOB列が数百メガバイトのデータを保持する場合に、ヒープ領域不足エラーを回避するためです。 LOB列の平均データサイズが下限にある場合、各バッチの行数を0より大きい値で指定することにより、LOBバッチサイズをカスタマイズできます。

-fetchSize

-fetchSize オプションを使用して、結果セットでフェッチされる行数を指定します。指定された-fetchSize が大きすぎる場合、 Out of Memory例外が発生する可能性があります。 -fetchSize オプションを含めて、大きなテーブルを移行するときのこの落とし穴を回避します。デフォルトのフェッチサイズはJDBCドライバーの実装に固有であり、データベースによって異なります。

MySQLユーザーの注意:デフォルトでは、MySQL JDBCドライバーは、テーブル内のすべての行を1回のネットワークラウンドトリップでMigration Toolkitにフェッチします。この動作は、大きなテーブルで使用可能なメモリを簡単に超える可能性があります。ヒープ領域不足エラーが発生した場合は、コマンドライン引数として-fetchSize 1 を指定して、 Migration Toolkitに強制的にテーブルデータを1行ずつロードさせます。

-filterProp <file_name>

<file_name> は、 key=valueペアに制約を含むファイルの名前を指定します。データベースから読み取られた各レコードは、制約に対して評価されます。制約を満たすものは移行されます。ペアの左側にはテーブル名がリストされます。 - テーブル名はスキーマ修飾であってはなりません。 - Oracleのテーブル名は大文字と小文字を区別しませんが、Oracleはデフォルトで大文字になります。一方、Postgresはデフォルトで小文字になります。 Oracleデータを移行するときは、使用している大文字と小文字がOracleの大文字と小文字と一致することを確認してください。そうしないと、 Migration Toolkitは一致できず、制約を無視します。右側は、移行される各行についてtrueでなければならない条件を指定します。

たとえば、

COUNTRIES=COUNTRY_ID<>'AR'

AR と等しくないCOUNTRY_ID 値を持つ国のみを移行します。この制約は、COUNTRIESテーブルに適用されます。

複数のテーブルの条件を指定することもできます。ただし、各テーブルの条件は、プロパティファイルの新しい行に記述する必要があります。

例:

プロパティファイルの次のエントリは、 EMPLOYEESおよびDEPARTMENTSテーブルから関連するデータのみを移行します。

EMPLOYEES=(LAST_NAME IN ('Grant','Weiss') AND PHONE_NUMBER LIKE '650%')

DEPARTMENTS=(DEPARTMENT_ID BETWEEN 10 AND 30)

-customColTypeMapping <column_list>

カスタム型マッピングを使用して、移行された列のデータ型を変更します。各ペアの左側は、正規表現で列を指定します。各ペアの右側は、その列が想定するデータ型の名前を指定します。 <column_list> のセミコロン区切りリストに複数のペアを含めることができます。たとえば、名前がID で終わる列をINTEGER 型にマップするには、次のカスタムマッピングエントリを使用します。

.*ID=INTEGER

カスタムマッピングは、列がテーブル修飾されていない限り、基準に一致するすべてのテーブル列に適用されます。

'\\' 文字は、エスケープ文字列として機能します。 '.' は正規表現の予約文字であるため、Linuxでは '\\.' を使用して '.' 文字を表します。たとえば、カスタムマッピングを使用してEMP テーブルのEMP_ID 列から行を選択するには、次のカスタムマッピングエントリを指定します。

EMP\\.EMP_ID=INTEGER

Windows、 '\.' を使用して '.' 文字を表します。

EMP\.EMP_ID=INTEGER

または、 <property_file> に複数のカスタム型マッピングを含めることができます。

-customColTypeMappingFile <property_file>

ファイル内の各エントリをkey=valueペアで、別の行に指定します。各ペアの左側は、正規表現で列を選択します。各ペアの右側は、その列が想定するデータ型の名前を指定します。 <property_file> で使用される場合、 '\\' 文字は、オペレーティングシステムに関係なく、エスケープ文字列として機能します。

並列データロードの移行オプション

比較的多数のテーブルまたは大きなサイズのテーブルを扱う場合、通常のデータ移行には時間がかかります。この問題の解決策として、 Migration Toolkitには、スキーマレベルとテーブルレベルでデータを並列に移行できる並列データロードアルゴリズムがあります。

スキーマレベルでの並列データ移行では、マルチスレッドを使用して、同時に複数のテーブルを移行します。テーブルレベルでのパラレルデータロードは、マルチスレッドを使用して、単一のテーブルをソースデータベースからターゲットデータベースに、より効率的かつ短時間で移行します。

注釈

  • パラレルロードは、大きなテーブルでのみ役立ちます。小さなテーブルの場合、並列スレッドにはより多くの時間がかかる場合があります。したがって、比較的大きなテーブルには、テーブルレベルでパラレルデータロードを使用することをお勧めします。

  • パラレルデータロードは、主/一意キーのないテーブルには適用されません。

  • fastCopy パラメーターは、パラレルデータロードでは使用できません。

  • パラレルロード機能は、ソースOracle、 EDB Postgres Advanced Server、およびPostgreSQLデータベースにのみ適用されます。

次のオプションは、MTKがデータを並行して移行する方法を制御します。

-loaderCount [<value>]

-loaderCount オプションを使用して、プールで使用可能な並列スレッドの数を指定し、データのロードを並列で実行します。このオプションは、 Migration Toolkitを実行しているホストシステムにハイエンドのCPUおよびRAMリソースがある場合に特に役立ちます。 value にはゼロ以外の正の数を指定できますが、値はCPUコアの数を超えないことをお勧めします。たとえば、デュアルコアCPUの最適値は2 です。デフォルトは1 です。

注釈

マルチスレッドを使用する場合、実際のスレッド数とテーブルデータサイズによっては、 Migration Toolkitのメモリヒープサイズの調整が必要になる場合があります。

-parallelLoadRowLimit [<value>]

-parallelLoadRowLimit オプションを使用して、テーブルレベルで並列にデータロードを実行するためにテーブルで必要な最小行数を指定します。 <value> パラメーターは0より大きい必要があります。デフォルトは100,000です。

たとえば、 -parallelLoadRowLimit の値が10,000の場合、行数が10,000以上のテーブルのみがテーブルレベルで並列にロードされます。他のテーブルは、シーケンシャルモードまたはスキーマレベルで移行します。

-tableLoaderLimit [<value>]

-tableLoaderLimit オプションを使用して、スレッドプールから割り当てるスレッドの最大数を指定し、単一のテーブルデータをテーブルレベルで並列チャンクにロードします。 <value> パラメーターは、-loaderCount の値以下でなければなりません。デフォルト値は、 -loaderCount オプションの値と同じです。このオプションは、 -loaderCount のデフォルト以外のカスタム値に基づいて暗黙的に変更されます。

たとえば、 -loaderCount が4 に設定され、 -tableLoaderLimit が指定されていない場合、 -tableLoaderLimit も4 に設定されます。したがって、すべてのスレッドを単一のテーブルロードに使用することを意図していない場合は、 -tableLoaderLimit をより低い値に減らします。

並列データロードアルゴリズムの高レベルの概要

アルゴリズムは3つのステップで動作します。

1.テーブルとテーブルチャンクのリストは、移行するテーブルの順序付けられたリストから作成され、テーブル名でソートされます。リストは、 -parallelLoadRowLimit および -tableLoaderLimit オプション値に基づいて作成されます。

  1. -loaderCount オプションの値に基づいてスレッドプールが作成されます。

1.並列データロードアルゴリズムは、テーブルとテーブルチャンクのリストから各テーブル/チャンクのタスクを作成し、スレッドプールで実行します。スレッドの数だけタスクが並列実行されます。タスクの実行が完了するとすぐに、そのスレッドはリストから次のタスクの実行を開始します。並列データの読み込みは、リストの最後のタスクが完了するとすぐに完了します。

例:

このシナリオでは、並列データのロードを使用して4つのテーブル-tab1, tab2, tab3, tab4 を移行します。

#  ./runMTK.sh -sourcedbtype enterprisedb -targetdbtype enterprisedb -loaderCount 4 -parallelLoadRowLimit 10000 -tableLoaderLimit 2 -tables tab1,tab2,tab3,tab4 public

テーブルtab1 には50,000行、テーブルtab2 には9,500行、テーブルtab3 には50,001行、テーブルtab4 には9,999行があります。ステップ1のテーブルのリストはtab1, tab2, tab3 、およびtab4 です。

テーブルtab1 およびtab3 のみが、テーブルレベル(-parallelLoadRowLimit 10000 )でのパラレルロードの資格があります。

-tableLoaderLimit オプションの値は2 であるため、テーブルtab1 は2つのチャンク、 tab1_chunk1 およびtab1_chunk2 にロードされます。各チャンクの行数は、 totalRowCount/tableLoaderLimit に基づいて決定されます。この場合、両方のチャンクには25,000行(50,000/2)があります。

テーブルtab3 も2つのチャンク、tab3_chunk1 およびtab3_chunk2 でロードされます。テーブルtab3 の行の総数が奇数(50,001 )であるため、最初のチャンクは追加の行を収容するため、 tab3_chunk1 には25,001行、tab3_chunk2 には25,000行があります。

作成されたテーブルとテーブルチャンクのリストは次のとおりです。

tab1_chunk1             (25,000 rows)
tab1_chunk2             (25,000 rows)
tab2                    (9500 rows)
tab3_chunk1             (25,001 rows)
tab3_chunk2             (25,000 rows)
tab4                    (9999 rows)

4つのスレッドT1, T2, T3, T4 を持つスレッドプールが作成されます。手順1で作成したリストからテーブル/チャンクを移行するタスクは、スレッドプールで実行されます。

T1 → tab1_chunk1        (25,000 rows)
T2 → tab1_chunk2        (25,000 rows)
T3 → tab2               (9500 rows)
T4 → tab3_chunk1        (25,001 rows)

スレッド T3 が最初に終了し、リスト内の次のチャンクであるtab3_chunk2 の実行を開始します。

T1 → tab1_chunk1        (25,000 rows)
T2 → tab1_chunk2        (25,000 rows)
T3 → tab3_chunk2        (25,000 rows)
T4 → tab3_chunk1        (25,001 rows)

スレッドT1 は2番目に終了し、 tab4 の実行を開始します。

T1 → tab4               (9999 rows)
T2 → tab1_chunk2        (25,000 rows)
T3 → tab3_chunk2        (25,000 rows)
T4 → tab3_chunk1        (25,001 rows)

このように、4つのスレッドを使用して、4つのテーブルを混合スキーマとテーブルレベルで並行して移行します。コマンドオプションを変更して-tableLoaderLimit を1 に設定する場合:

#  ./runMTK.sh -sourcedbtype enterprisedb -targetdbtype enterprisedb -loaderCount 4 -parallelLoadRowLimit 10000 -tableLoaderLimit 1 -tables tab1,tab2,tab3,tab4 public

純粋なスキーマレベルの並列処理を行うことができます。各テーブルは1つのスレッドで同時に処理されます。

T1 → tab1   (50,000 rows)
T2 → tab2   (9500 rows)
T3 → tab3   (50,001 rows)
T4 → tab4   (9999 rows)

システムリソースの推奨事項と制約

MTKを実行しているホストシステムで使用可能なCPUおよびRAMリソースに応じて、スレッドの数を選択します。 CPU、IO、およびディスク使用率に関してソースデータベースに特定のオーバーヘッドがあるため、特定のしきい値を超える並列スレッド数を超えると、MTKのパフォーマンスが低下します。

Oracle固有のオプション

次のオプションは、ソースデータベースがOracleの場合にのみ適用されます。

-objectTypes

runMTK.sh コマンドの最後に指定されたスキーマリストからユーザー定義オブジェクト型をインポートします。

-allUsers

ソースデータベースからすべてのユーザーとロールをインポートします。 ‑allUsers オプションは、OracleデータベースからEDB Postgres Advanced Serverデータベースに移行する場合にのみサポートされます。

-users <user_list>

選択したユーザーまたはロールをソースOracleデータベースからインポートします。 <user_list> は、間にスペース文字を含まないユーザー/ロール名のコンマ区切りリストです(例、-users MTK, SAMPLE, acctg )。 -users オプションは、OracleデータベースからEDB Postgres Advanced Serverデータベースに移行する場合にのみサポートされます。

-allProfiles

ソースデータベースからすべてのカスタム(つまり、ユーザーが作成した)プロファイルをインポートします。 DEFAULT やMONITORING_PROFILE などの他のOracle非カスタムプロファイルはインポートされません。

インポートされたプロファイルの場合、プロファイルに関連付けられた次のパスワードパラメーターのみがインポートされます。

FAILED_LOGIN_ATTEMPTS

PASSWORD_LIFE_TIME

PASSWORD_REUSE_TIME

PASSWORD_REUSE_MAX

PASSWORD_LOCK_TIME

PASSWORD_GRACE_TIME

PASSWORD_VERIFY_FUNCTION

Oracleリソースパラメーターなど、他のすべてのプロファイルパラメーターはインポートされません。 SRC_DB_USER で指定されたOracleデータベースユーザーは、OracleデータディクショナリビューDBA_PROFILES に対するSELECT 権限を持っている必要があります。

注釈

‑allProfiles オプションは、OracleデータベースからEDB Postgres Advanced Serverデータベースに移行する場合にのみサポートされます。

-profiles <profile_list>

選択したカスタム(つまり、ユーザーが作成した)プロファイルをソースOracleデータベースからインポートします。 profile_list は、間にスペース文字を含まないプロファイル名のコンマ区切りリストです(例、 -profiles ADMIN_PROFILE,USER_PROFILE )。 DEFAULT やMONITORING_PROFILE などのOracle非カスタムプロファイルはインポートされません。

-allProfiles オプションと同様に、パスワードパラメーターのみがインポートされます。 SRC_DB_USER で指定されたOracleデータベースユーザーは、OracleデータディクショナリビューDBA_PROFILES に対するSELECT 権限を持っている必要があります。

注釈

-profiles オプションは、OracleデータベースからEDB Postgres Advanced Serverデータベースに移行する場合にのみサポートされます。

-importPartitionAsTable <table_list>

-importPartitionAsTable パラメーターを含めて、Oracleホストにあるパーティション表の内容を単一の非パーティション表にインポートします。 table_list は、間にスペース文字を含まないテーブル名のコンマ区切りリストです(例、-importPartitionAsTable emp,dept,acctg )。

-copyViaDBLinkOra

dblink_ora モジュールは、 SQLレベルでのEDB Postgres Advanced Server -to-Oracle接続を提供します。 dblink_ora は、 EDB Postgres Advanced Serverデータベースインストールの一部としてバンドルおよびインストールされます。 dblink_ora は COPY API メソッドを使用して、データベース間でデータを転送します。このメソッドは、 JDBC COPY メソッドよりも大幅に高速です。

この例では、 dblink_ora COPY API を使用して、 HR スキーマからすべてのテーブルを移行します。

$./runMTK.sh -copyViaDBLinkOra -allTables HR

ターゲットEDB Postgres Advanced Serverデータベースには、 dblink_ora をインストールして構成する必要があります。

dblink_ora を参照してください。

-allDBLinks [link_Name_1=password_1,link_Name_2=password_2,...]

このオプションを選択して、Oracleデータベースリンクを移行します。ソースデータベース内の各リンク接続のパスワード情報は暗号化されているため、指定がない限り、ダミーのパスワードedbが置き換えられます。

接続ユーザーのダミーパスワードとしてedbを使用してすべてのデータベースリンクを移行するには:

$./runMTK.sh -allDBLinks HR

または、間にスペース文字を含まない名前=値のペアのコンマ区切りリストを使用して、各データベースリンクのパスワードを指定できます。ペアの左側にリンク名、右側にパスワードの値を指定します。

コマンドラインで指定された実際のパスワードを使用してすべてのデータベースリンクを移行するには:

$./runMTK.sh -allDBLinks LINK_NAME1=abc,LINK_NAME2=xyz HR

Migration Toolkitは、EnterpriseDBで現在サポートされているデータベースリンクタイプのみを移行します。これには、パブリックおよびプライベートタイプの固定ユーザーリンクが含まれます。

-allSynonyms

-allSynonyms オプションを含めて、すべてのパブリックおよびプライベートシノニムをOracleデータベースからEDB Postgres Advanced Serverデータベースに移行します。同じ名前のシノニムがターゲットデータベースに既に存在する場合、既存のシノニムは移行されたバージョンに置き換えられます。

-allPublicSynonyms

-allPublicSynonyms オプションを含めて、すべてのパブリックシノニムをOracleデータベースからEDB Postgres Advanced Serverデータベースに移行します。同じ名前のシノニムがターゲットデータベースに既に存在する場合、既存のシノニムは移行されたバージョンに置き換えられます。

-allPrivateSynonyms

-allPrivateSynonyms オプションを含めて、すべてのプライベートシノニムをOracleデータベースからEDB Postgres Advanced Serverデータベースに移行します。同じ名前のシノニムがターゲットデータベースに既に存在する場合、既存のシノニムは移行されたバージョンに置き換えられます。

-useOraCase

-useOraCase オプションを含めて、OracleデータベースからEDB Postgres Advanced Serverデータベースに移行するときに、すべてのデータベースオブジェクトのOracleデフォルトの大文字の命名規則を保持します。

大文字の命名規則は、テーブル、ビュー、シーケンス、プロシージャ、ファンクション、トリガー、パッケージなどで保持されます。これらのデータベースオブジェクトでは、大文字の命名規則が次に適用されます。

  • データベースオブジェクトの名前

・ テーブルおよびビューのカラム名、キー名、インデックス名、制約名など

  • ビューのSELECT 列リスト

  • プロシージャまたはファンクションヘッダーの一部であるパラメーター名

注釈

プロシージャ、ファンクション、トリガーまたはパッケージのプロシージャコード本体では、プログラムをエラーなしで実行するための識別子参照を手動で編集する必要がある場合があります。このような修正は、発生した可能性のある識別子参照の適切な大文字小文字変換に関するものです。

注釈

-useOraCase オプションを指定する場合、 -skipUserSchemaCreation オプションも指定する必要がある場合があります。詳細については、 -skipUserSchemaCreation オプションの説明を参照してください。

-useOraCase オプションを指定しない場合のMigration Toolkitのデフォルトの動作は、データベースオブジェクトがOracleで引用符を囲んで明示的に作成された場合を除き、引用符を囲まずにデータベースオブジェクト名がOracleから抽出されることです。以下は、 -offlineMigration オプションを使用してMigration Toolkitによって生成されたtableコマンドの一部です。

CREATE TABLE DEPT (
    DEPTNO NUMBER(2) NOT NULL,
    DNAME VARCHAR2(14),
    LOC VARCHAR2(13)
);
ALTER TABLE DEPT ADD CONSTRAINT DEPT_PK PRIMARY KEY (DEPTNO);
ALTER TABLE DEPT ADD CONSTRAINT DEPT_DNAME_UQ UNIQUE (DNAME);

次に、このテーブルを移行してEDB Postgres Advanced Serverで作成すると、引用符で囲まれていないすべてのオブジェクト名が小文字に変換されるため、テーブルは次のようにEDB Postgres Advanced Serverに表示されます。

Table "edb.dept"
Column  | Type                  | Modifiers
- -------+-----------------------+-----------
deptno  | numeric(2,0)          | not null
dname   | character varying(14) |
loc     | character varying(13) |
Indexes:
    "dept_pk" PRIMARY KEY, btree (deptno)
    "dept_dname_uq" UNIQUE CONSTRAINT, btree (dname)

EDB Postgres Advanced Serverアプリケーションが、引用符で囲まれた大文字の識別子を使用して移行されたデータベースオブジェクトを参照している場合、データベースオブジェクト名が小文字になるため、アプリケーションは失敗します。

usepostcase=# SELECT * FROM "DEPT";
ERROR: relation "DEPT" does not exist
LINE 1: SELECT * FROM "DEPT";

アプリケーションで引用符で囲まれた大文字の識別子を使用する場合は、 -useOraCase オプションを使用して移行を実行します。 DDLは、すべてのデータベースオブジェクト名を引用符で囲みます。

CREATE TABLE "DEPT" (
    "DEPTNO" NUMBER(2) NOT NULL,
    "DNAME" VARCHAR2(14),
    "LOC" VARCHAR2(13)
);
ALTER TABLE "DEPT" ADD CONSTRAINT "DEPT_PK" PRIMARY KEY ("DEPTNO");
ALTER TABLE "DEPT" ADD CONSTRAINT "DEPT_DNAME_UQ" UNIQUE ("DNAME");

次に、このテーブルを移行してEDB Postgres Advanced Serverで作成すると、すべてのオブジェクト名が大文字で維持されるため、テーブルは次のようにEDB Postgres Advanced Serverに表示されます。

Table "EDB.DEPT"
Column  | Type                  | Modifiers
- -------+-----------------------+-----------
DEPTNO  | numeric(2,0)          | not null
DNAME   | character varying(14) |
LOC     | character varying(13) |
Indexes:
    "DEPT_PK" PRIMARY KEY, btree ("DEPTNO")
    "DEPT_DNAME_UQ" UNIQUE CONSTRAINT, btree ("DNAME")

アプリケーションは、引用符で囲まれた大文字の名前を使用してオブジェクトにアクセスできます。

useoracase=# SELECT * FROM "DEPT";
DEPTNO  | DNAME      | LOC
- -------+------------+----------
10      | ACCOUNTING | NEW YORK
20      | RESEARCH   | DALLAS
30      | SALES      | CHICAGO
40      | OPERATIONS | BOSTON
(4 rows)

-skipUserSchemaCreation

Oracleユーザーが移行されると、Oracleユーザーのターゲットデータベースサーバーにロール(つまり、ユーザー名)が作成されます(ロールがまだ存在しない場合)。ロール名は小文字で作成されます。新しいロールを作成すると、小文字で同じ名前のスキーマも作成されます。

-skipUserSchemaCreation オプションを指定すると、移行したOracleユーザー名のスキーマの自動作成が防止されます。このオプションは、 -useOraCase オプションが指定されて、大文字と小文字のみが異なる同じ名前の2つのスキーマが作成されるのを防ぐ場合に特に役立ちます。 -useOraCase オプションを指定すると、 Migration Toolkitが呼び出されたときにオプションリストに続いて指定されたソーススキーマの大文字のOracle命名規則でスキーマが作成されます。

したがって、 -skipUserSchemaCreation オプションなしで-useOraCase オプションが指定された場合、ターゲットデータベースには、1つが小文字でもう1つが大文字の2つの同名のスキーマがあります。 -useOraCase オプションが-skipUserSchemaCreation オプションとともに指定されている場合、ターゲットデータベースには大文字のスキーマのみがあります。

その他のオプション

これらの移行オプションを使用して、 Migration Toolkitのヘルプとバージョン情報を表示します。これらのオプションを使用して、 Migration Toolkitのフィードバックとログオプションを制御することもできます。

-help

アプリケーションのコマンドラインの使用情報を表示します。

-logDir <log_path>

ログファイルを書き込む場所を指定するには、このオプションを含めます。 <log_path> はログファイルを保存する場所です。デフォルトでは、Linuxではログファイルは次の場所に書き込まれます。

$HOME/.enterprisedb/migration-toolkit/logs

Windowsでは、ログファイルは次の場所に保存されます。

%HOMEDRIVE%%HOMEPATH%\.enterprisedb\migration-toolkit\logs

-logFileCount <file_count>

ログファイルのローテーションで使用されるファイルの数を指定するには、このオプションを含めます。 0 の値を指定して、ログファイルのローテーションを無効にし、単一のログファイルを作成します。このファイルは、 logFileSize オプションを使用して指定された値に達すると、切り捨てられます。 <file_count> は0以上でなければなりません。デフォルトは20です。

-logFileSize <file_size>

新しいログファイルにローテーションする前の最大ファイルサイズ制限をMB単位で指定するには、このオプションを含めます。 file_size は0より大きくなければなりません。デフォルトは50です。

-logBadSQL

このオプションを含めて、失敗したオブジェクトのスキーマ定義(DDLスクリプト)をファイルに保存します。ファイルは、エラーログに使用されたのと同じパスの下に保存され、次の形式の名前が付けられます。

mtk_bad_sql_<schema_name_timestamp>.sql

schema_name はスキーマの名前であり、 timestamp はMigration Toolkit実行のタイムスタンプです。

-verbose [on|off]

アプリケーションログメッセージを標準出力に表示します。デフォルトでは、冗長はオンです。

-version

Migration Toolkitのバージョンを表示します。

例

この例では、OracleからEDB Postgres Advanced Serverへの移行を実行します。

以下は、toolkit.properties ファイルの内容です。

SRC_DB_URL=jdbc:oracle:thin:@192.168.2.6:1521:xe
SRC_DB_USER=edb
SRC_DB_PASSWORD=password

TARGET_DB_URL=jdbc:edb://localhost:5444/edb
TARGET_DB_USER=enterprisedb
TARGET_DB_PASSWORD=password

次のコマンドは、 Migration Toolkitを呼び出します。

$ ./runMTK.sh EDB
__OUTPUT__
Running EnterpriseDB Migration Toolkit (Build 48.0.0) ...
Source database connectivity info...
conn =jdbc:oracle:thin:@192.168.2.6:1521:xe
user =edb
password= **** *\*
Target database connectivity info...
conn =jdbc:edb://localhost:5444/edb
user =enterprisedb
password= **** *\*
Connecting with source Oracle database server...
Connected to Oracle, version Oracle Database 10g Express Edition
Release 10.2.0.1.0 - Production
Connecting with target EnterpriseDB database server...
Connected to EnterpriseDB, version 9.4.0.0
Importing redwood schema EDB...
Creating Schema...edb
Creating Sequence: NEXT_EMPNO
Creating Tables...
Creating Table: BAD_TABLE
MTK-15013: Error Creating Table BAD_TABLE
DB-42704: ERROR: type "binary_double" does not exist at position 58
- - CREATE TABLE BAD_TABLE (
- - F1 NUMBER NOT NULL,
- - Line 3: F2 BINARY_DOUBLE
- - ^
Creating Table: DEPT
Creating Table: EMP
Creating Table: JOBHIST
Creating Table: "MixedCase"
Creating Table: "lowercase"
Created 5 tables.
Loading Table Data in 8 MB batches...
Loading Table: DEPT ...
[DEPT] Migrated 4 rows.
[DEPT] Table Data Load Summary: Total Time(s): 0.147 Total Rows: 4
Loading Table: EMP ...
[EMP] Migrated 14 rows.
[EMP] Table Data Load Summary: Total Time(s): 0.077 Total Rows: 14
Loading Table: JOBHIST ...
[JOBHIST] Migrated 17 rows.
[JOBHIST] Table Data Load Summary: Total Time(s): 0.042 Total Rows: 17
Total Size(MB): 9.765625E-4
Loading Table: "MixedCase" ...
["MixedCase"] Table Data Load Summary: Total Time(s): 0.098 Total Rows:0
Loading Table: "lowercase" ...
["lowercase"] Table Data Load Summary: Total Time(s): 0.066 Total Rows:0
Data Load Summary: Total Time (sec): 0.806 Total Rows: 35 Total
Size(MB): 0.001
Creating Constraint: DEPT_PK
Creating Constraint: DEPT_DNAME_UQ
Creating Constraint: EMP_PK
Creating Constraint: JOBHIST_PK
Creating Constraint: SYS_C008958
MTK-15001: Error Creating Constraint SYS_C008958
DB-42P01: com.edb.util.PSQLException: ERROR: relation "bad_table" does
not exist
Creating Constraint: EMP_REF_DEPT_FK
Creating Constraint: EMP_SAL_CK
Creating Constraint: JOBHIST_REF_DEPT_FK
Creating Constraint: JOBHIST_REF_EMP_FK
Creating Constraint: JOBHIST_DATE_CHK
Creating Trigger: USER_AUDIT_TRIG
Creating Trigger: EMP_SAL_TRIG
MTK-13009:Warning! Skipping migration of trigger DROP_TRIGGER, currently
non-table triggers are not supported in target database.
Creating View: SALESEMP
Creating Function: EMP_COMP
Creating Package: EMP_ADMIN
MTK-16005:Package Body is Invalid, Skipping...
Schema EDB imported with errors.
MTK-12001: The user/role migration failed due to insufficient
privileges.
Grant the user SELECT privilege on the following Oracle catalogs:
DBA_ROLES
DBA_USERS
DBA_TAB_PRIVS
DBA_PROFILES
DBA_ROLE_PRIVS
ROLE_ROLE_PRIVS
DBA_SYS_PRIVS
One or more schema objects could not be imported during the migration
process. Please review the migration output for more details.
Migration logs have been saved to
/home/user/.enterprisedb/migration-toolkit/logs
 ****  ****  ****  ****  ****  Migration Summary  ****  ****  ****  ****  ****
Sequences: 1 out of 1
Tables: 5 out of 6
Constraints: 9 out of 10
Triggers: 2 out of 3 (skipped 1)
Views: 1 out of 1
Functions: 1 out of 1
Packages: 1 out of 1
Total objects: 30
Successful count: 20
Failed count: 2
Skipped count: 1
Invalid count: 7
List of failed objects
======================
Tables
- -------------------

1. EDB.BAD_TABLE
Constraints
- -------------------

1. EDB.BAD_TABLE.SYS_C008958
List of invalid objects
=======================

1. EDB.HIRE_CLERK (FUNCTION)

2. EDB.NEW_EMPNO (FUNCTION)

3. EDB.EMP_ADMIN (PACKAGE BODY)

4. EDB.EMP_QUERY (PROCEDURE)

5. EDB.EMP_QUERY_CALLER (PROCEDURE)

6. EDB.LIST_EMP (PROCEDURE)

7. EDB.SELECT_EMP (PROCEDURE)
 ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  ****  **** *

スキップされサポートされていないデータベースオブジェクトは省略されています。移行情報は、実行の最後にMigration Summaryに要約されます。