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,<br /><br />-constraints, -ignoreCheckConstFilter,<br /><br />-skipCKConst, -skipFKConst,<br /><br />-skipColDefaultClause,<br /><br />-indexes, -triggers,<br /><br />-allViews, -views,<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は選択された各オブジェクトの定義を読み取り、後で実行するとPostgresの各オブジェクトを複製するSQLスクリプトを作成します。
注釈
次の例では、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 )。
-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 )。
-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より大きい値はすべて有効です。デフォルトのバッチサイズは8MBです。
-lobBatchSize
LOBデータ型の場合、一度にロードする行数を指定します。 BYTEA
、BLOB 、CLOB
などのラージオブジェクト型(LOB)列を含むテーブルのデータ移行は、デフォルトで一度に1行実行されます。これは、個々のLOB列が数百メガバイトのデータを保持する場合にヒープ領域不足エラーを回避するためです。
LOB列の平均データサイズが小さい場合、0より大きい値で各バッチの行数を指定することにより、LOBバッチサイズをカスタマイズできます。
-fetchSize
-fetchSize
オプションを使用して、結果セットでフェッチされる行数を指定します。指定された-fetchSize
が大きすぎる場合、メモリ不足例外が発生する可能性があります。
-fetchSize
オプションを含めて、大きなテーブルを移行するときにこの落とし穴を回避します。デフォルトのフェッチサイズはJDBCドライバーの実装に固有であり、データベースによって異なります。
MySQLユーザーの注:デフォルトでは、MySQL
JDBCドライバーは、1回のネットワークラウンドトリップでテーブル内のすべての行をMigration
Toolkitにフェッチします。この動作は、大きなテーブルで使用可能なメモリを簡単に超過する可能性があります。ヒープ領域不足エラーが発生した場合は、コマンドライン引数として-fetchSize 1
を指定して、 Migration
Toolkitで一度に1行ずつテーブルデータをロードします。
-filterProp <file_name>
<file_name>
は、key=valueペアに制約を含むファイルの名前を指定します。データベースから読み取られた各レコードは、制約に対して評価されます。制約を満たすものが移行されます。ペアの左側にはテーブル名がリストされます。テーブル名はスキーマ修飾できません。右側は、移行される行ごとに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つのテーブルを移行します。
# ./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 はtab1_chunk1 とtab1_chunk2
の2つのチャンクでロードされます。各チャンクの行数は、
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から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
の詳細については、 Database Compatibility for Oracle Developers を参照してください。
-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で引用符を使用して明示的に作成された場合を除き、引用符を使用せずに抽出されます。以下は、
-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
オプションが指定された場合、ターゲットデータベースには、一方が小文字でもう一方が大文字の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)
**** **** **** **** **** **** **** **** **** **** **** **** **** **** **** *
スキップされたサポートされていないデータベースオブジェクトは省略されています。移行情報は、実行の最後に移行の概要にまとめられます。