Migration errors#
移行プロセス中に、移行の概要に移行の進行状況が表示されます。エラーが発生した場合、概要にエラーに関する情報が表示されます。移行の概要はログファイルにも書き込まれます。
Linuxでは、ログファイルのデフォルトの場所は次のとおりです。
$HOME/.enterprisedb/migration-toolkit/logs
Windowsでは、ログファイルは次の場所に保存されます。
%HOMEDRIVE%%HOMEPATH%\.enterprisedb\migration-toolkit\logs
Migration Toolkitの-logdir <log_path>
オプションを使用して、代替ログファイルの場所を指定できます。
接続エラー#
- Migration Toolkitは、
toolkit.properties file からの情報を使用して、ソースデータベースとターゲットデータベースに接続します。
Migration Toolkitの使用時に発生する接続エラーのほとんどは、
toolkit.properties ファイルで指定された情報に関連しています。
無効なユーザー名/パスワード#
Migration Toolkitを使用してOracleデータベースから移行を実行しようとすると、次のエラーが発生します。
MTK-11009: Error Connecting Database "Oracle"
DB-1017: java.sql.SQLException: ORA-01017: invalid username/password;
logon denied
The user name or password specified in the `toolkit.properties` file is
not valid to use to connect to the Oracle source database.
このエラーを解決するには、 toolkit.properties ファイルを編集し、
SRC_DB_USER およびSRC_DB_PASSWORD
プロパティで移行を実行する権限を持つ有効なユーザーの名前とパスワードを指定します。
接続が拒否されました。致命的な:パスワード#
Migration Toolkitを使用して移行を実行しようとすると、次のエラーが発生します。
MTK-11009: Error Connecting Database "EDB Postgres EDB Postgres Advanced Server"
DB-28P01: com.edb.util.PSQLException: FATAL: password authentication
failed for user "name"
toolkit.properties
ファイルで指定されたユーザー名またはパスワードは、Postgresデータベースへの接続に使用するには無効です。
このエラーを解決するには、 toolkit.properties ファイルを編集し、
TARGET_DB_USER およびTARGET_DB_PASSWORD
プロパティで移行を実行する権限を持つ有効なユーザーの名前とパスワードを指定します。
例外 ORA-28000 アカウントはロックされています#
Migration Toolkitを使用してOracleデータベースから移行を実行しようとすると、次のエラーメッセージが表示されます。
MTK-11009: Error Connecting Database "Oracle"
DB-28000: java.sql.SQLException: ORA-28000: the account is locked
The Oracle account associated with the user name specified in the
toolkit.properties file is locked.
このエラーを解決するには、Oracleサーバーでユーザーアカウントのロックを解除するか、
toolkit.properties ファイルを編集して、 SRC_DB_USER
およびSRC_DB_PASSWORD
パラメーターで移行を実行する権限を持つ有効なユーザーの名前とパスワードを指定します。
例外oracle.jdbc.driver.OracleDriver#
Migration Toolkitを使用して移行を実行しようとすると、移行は失敗し、次のエラーメッセージが表示されます。
MTK-11009: Error Connecting Database "Oracle"
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver
Migration Toolkitを使用する前に、移行元のデータベースの適切なJDBCドライバーをダウンロードしてインストールする必要があります。完全な手順については、 Installing a JDBC driver を参照してください。
I/O例外ネットワークアダプターは接続を確立できませんでした。#
Migration Toolkitを使用して移行を実行しようとすると、次のエラーが発生します。
MTK-11009: Error Connecting Database "Oracle"
DB-17002: java.sql.SQLException: Io exception: The
Network Adapter could not establish the connection
toolkit.properties ファイルで指定されたソースデータベースのJDBC
URLには、無効な接続プロパティが含まれています。
このエラーを解決するには、 toolkit.properties file を編集し、 SRC_DB_URL
プロパティでソースデータベースの有効な接続情報を指定します。
SRC_DB_URL
値はデータベース固有です。ソースデータベースタイプの詳細については、 Building the toolkit-properties file を参照してください。
例外 「ターゲット」データベースに指定されたURLは無効です#
Migration Toolkitを使用して移行を実行しようとすると、次のエラーが発生します。
MTK-10045: The URL specified for the "target" database is invalid.
Check the connectivity credentials.
toolkit.properties ファイルで指定されたターゲットデータベースEDB
Postgres Advanced ServerのJDBC
URLには、無効な接続プロパティが含まれています。
このエラーを解決するには、 toolkit.properties ファイルを編集し、
TARGET_DB_URL
プロパティでターゲットデータベースの有効な接続情報を指定します。 EDB
Postgres Advanced ServerのJDBC URLの形成については、 Defining an EDB Postgres Advanced Server URL を参照してください。
移行エラー#
次のエラーは、Migration Toolkitがターゲットおよびソースデータベースサーバーに正常に接続した後に発生する可能性があります。
エラー最後の予想される列の後に余分なデータ#
*テーブルをオンラインで移行すると、次のエラーメッセージが表示されます。
MTK-17001: Error Loading Data into Table: table_name
DB-22P04: com.edb.util.PSQLException: ERROR: extra data after last
expected column
Where: COPY table_name, line 5: "50|HR|LOS|ANGELES"
このエラーは、table_name
の列のデータに区切り文字が含まれる場合に発生します。このエラーを修正するには、区切り文字をテーブルコンテンツにない文字に変更します。
注釈
この例では、パイプ文字|が最後の列に挿入するためのテキスト`LOS|ANGELES` にあり、-copyDelimiter '|' オプションを使用してMigration Toolkitが実行されますが、エラーが発生します。
テーブル TABLE_NAME へのデータのロードエラー#
データのみの移行を実行すると、次のエラーが発生します。
MTK-17001: Error Loading Data into Table: TABLE_NAME
DB-42P01: com.edb.util.PSQLException: ERROR: relation
"schema.\ table_name" does not exist
*I also get the error:*
Trying to reload table: TABLE_NAME through bulk inserts with a batch
size of 100
MTK-17001: Error Loading Data into Table: TABLE_NAME
DB-42P01: com.edb.util.PSQLException: ERROR: relation
"schema.\ table_name" does not exist
データを移行する前に、ターゲットデータベースでデータを受信するテーブルを作成する必要があります。 TABLE_NAMEの名前を持つテーブルがターゲットデータベースに存在することを確認します。必要に応じてテーブルを作成し、データの移行を再試行します。
コンストレインCONS_NAME_FKの作成中にエラーが発生しました#
インデックスと制約を含むテーブルの移行を実行すると、次のエラーメッセージが表示されます。
MTK-15001: Error Creating Constraint EMP_DEPT_FK
DB-42P01: com.edb.util.PSQLException: ERROR: relation "hr.departments"
does not exist
Creating Constraint: EMP_JOB_FK
MTK-15001: Error Creating Constraint EMP_JOB_FK
DB-42P01: com.edb.util.PSQLException: ERROR: relation "hr.jobs" does not exist
Creating Constraint: EMP_MANAGER_FK
Schema HR imported with errors.
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 **** **** **** **** ****
Tables: 1 out of 1
Constraints: 4 out of 6
Total objects: 7
Successful count: 5
Failed count: 2
Invalid count: 0
List of failed objects
======================
Constraints
- -------------------
1. HR.EMPLOYEES.EMP_DEPT_FK
2. HR.EMPLOYEES.EMP_JOB_FK
移行しているテーブルには、ターゲットデータベースに存在しないテーブルの外部キー制約が含まれています。 Migration Toolkitは、外部キー制約を省略してテーブルを作成します。
Migration Toolkitコマンドに-skipFKConst
オプションを含めることにより、エラーメッセージの生成を回避できます。
テーブルへのデータのロードエラー#
テーブル定義は既に移行しています。データをテーブルに移行しようとすると、エラーが発生します。
MTK-17001: Error Loading Data into Table: DEPARTMENTS
DB-22P04: com.edb.util.PSQLException: ERROR: extra data after last
expected column
Where: COPY departments, line 1: "10 Administration 200 1700"
Trying to reload table: DEPARTMENTS through bulk inserts with a batch
size of 100
MTK-17000: Batch entry 0 INSERT INTO hr.DEPARTMENTS VALUES (10,
Administration, 200, 1700); was aborted. Call getNextException to see
the cause.
DB-42601: java.sql.BatchUpdateException: Batch entry 0 INSERT INTO
hr.DEPARTMENTS VALUES (10, Administration, 200, 1700); was aborted.
Call getNextException to see the cause., Skipping Batch
MTK-17000:ERROR: INSERT has more expressions than target columns
Position: 48
[DEPARTMENTS] Table Data Load Summary: Total Time(s): 0.037 Total Rows:0
Data Load Summary: Total Time (sec): 0.168 Total Rows: 0 Total Size(MB):0.0
Schema HR imported with errors.
ターゲットデータベースのテーブル定義は、移行されたデータと一致しません。ターゲットまたはソーステーブルを変更した場合は、テーブル定義とデータに互換性があることを確認します。
エラー:値がタイプに対して長すぎます#
テーブル定義は既に移行しています。データをテーブルに移行しようとすると、次のエラーが発生します。
MTK-17001: Error Loading Data into Table: DEPARTMENTS
DB-22001: com.edb.util.PSQLException: ERROR: value too long for type
character(1)
Where: COPY departments, line 1, column location_id: "1700"
Trying to reload table: DEPARTMENTS through bulk inserts with a batch
size of 100
MTK-17000: Batch entry 0 INSERT INTO hr.DEPARTMENTS VALUES (10,
Administration, 200, 1700); was aborted. Call getNextException to see
the cause.
DB-22001: java.sql.BatchUpdateException: Batch entry 0 INSERT INTO
hr.DEPARTMENTS VALUES (10, Administration, 200, 1700); was aborted.
Call getNextException to see the cause., Skipping Batch
MTK-17000:ERROR: value too long for type character(1)
ターゲットデータベースの列は、移行されたデータを受信するのに十分な大きさではありません。この問題は、移行後にテーブル定義が変更された場合に発生する可能性があります。列名この例ではlocation_idは、
Where: で始まる行で指定されます。
COPY departments, line 1, column location_id: "1700"
問題を修正するには、列サイズを調整し、移行を再試行します。
エラー:スレッドの例外:OutOfMemoryError#
MySQLデータベースから移行するときに、次のエラーが発生しました。
Loading Table: big_range ...
Exception in thread "dataload_job_1" java.lang.OutOfMemoryError: Java
heap space
at com.mysql.jdbc.MysqlIO.nextRow(MysqlIO.java:1370)
at com.mysql.jdbc.MysqlIO.readSingleRowSet(MysqlIO.java:2369)
at com.mysql.jdbc.MysqlIO.getResultSet(MysqlIO.java:451)
at com.mysql.jdbc.MysqlIO.readResultsForQueryOrUpdate(MysqlIO.java:2076)
at com.mysql.jdbc.MysqlIO.readAllResults(MysqlIO.java:1451)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1787)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3277)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3206)
at com.mysql.jdbc.Statement.executeQuery(Statement.java:1232)
at com.edb.dbhandler.mysql.Data.getTableData(Data.java:90)
at com.edb.DataLoader.loadDataInFastMode(DataLoader.java:594)
at com.edb.DataLoader.run(DataLoader.java:186)
at java.lang.Thread.run(Thread.java:722)
デフォルトでは、MySQL JDBCドライバーは、テーブル内のすべての行を1回のネットワークラウンドトリップでMigration Toolkitに取得します。この動作は、大規模なテーブルの使用可能なメモリを簡単に超過する場合があります。
この問題を修正するには、移行を再試行するときにコマンドライン引数として-fetchSize 1
を指定します。
不正なタイムスタンプと夏時間#
MSSQL JDBCドライバーを使用してSQL ServerからPostgreSQLに移行する場合、エラーが観察されない場合があります。ソースデータベースに、夏時間が有効であった時の時間範囲内のタイムスタンプ値を含む行が含まれている場合、それらは間違ったタイムスタンプでターゲットデータベースに移行されます。
この問題を解決するには、 runMTK.sh ファイルを更新し、オプション
-Duser.timezone=GMT
を提供できます。これはツールキットの実行時に動作します。
例、元の行
runJREApplication $JAVA_HEAP_SIZE -Dprop=$base/etc/toolkit.properties -cp $base/bin/edb-migrationtoolkit.jar:$base/lib/* com.edb.MigrationToolkit "$@"
これは、 -cp オプションの前に挿入された-Duser.timezone=GMT
で更新する必要があります。
runJREApplication $JAVA_HEAP_SIZE -Dprop=$base/etc/toolkit.properties -Duser.timezone=GMT -cp $base/bin/edb-migrationtoolkit.jar:$base/lib/* com.edb.MigrationToolkit "$@"