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 |
|
-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という名前)に復元する方法について説明します。
createdbコマンドを使用して、 acctgデータベースを作成します。移行したデータベースオブジェクトを復元します。
$ createdb -U enterprisedb acctg
edb-psqlを使用して新しいデータベースに接続します。
$ edb-psql -U enterprisedb acctg
\iメタコマンドを使用して、オブジェクト定義を作成する移行スクリプトを呼び出します。
$ acctg=# \i ./mtk_hr_ddl.sql
-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
オプション値に基づいて作成されます。
-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に要約されます。