AWS Database Migration Service (AWS DMS) を使用してデータを移行しようとしたときに、「ERROR: No tables were found at task initialization」というエラーが表示されました。しかし、私のソースデータベースにはテーブルはあります。
簡単な説明
「No tables were found at task initialization」というエラーが表示される理由はいくつかあります。
- AWS DMS マッピングルールが誤って定義されている。
- ソーステーブルをフェッチするのに必要な権限がない。
このエラーの原因は、設定と使用するデータベースエンジンによって異なります。問題を解決するには、ユースケースに関連するトラブルシューティング手順に従ってください。
解決方法
マッピングルールが誤って定義されている
Oracle や DB2 など、AWS DMS がソースとして使用することをサポートしている一部のデータベースエンジンでは、大文字と小文字が区別されます。そのため、AWS DMS のソースとして Oracle または DB2 を使用する場合、テーブル名、ビュー名、および列名には大文字を使用する必要があります。
それに比べて、MySQL や PostgreSQL などのデータベースエンジンは、デフォルトですべてのオブジェクトに小文字を使用します。詳細については、「ソースフィルタの使用」を参照してください。
AWS DMS マッピングルールとエンドポイント設定は、さまざまなソースエンジンで動作するように設計されているため、大文字と小文字が区別されます。AWS DMS タスクで指定されたオブジェクト名がソースデータベース名と異なる場合、タスクは失敗します。
この問題を解決するには、次の点を確認してください。
1. テーブルがソースに存在し、タスクが開始される前に削除されていないことを確認します。
2. ソースにテーブルが存在する場合は、オブジェクト名がソースデータベース名と正確に一致していることを確認してください。
例えば、Oracle データベースをソースとして使用する場合、Oracle は次のようなオブジェクト名を使用します。
- ソースデータベース SID: ORCL - Oracle ソースエンドポイントデータベース名の設定に使用します。
- ソースデータベーススキーマ名: ADMIN - 選択マッピングルールに使用します。
- ソースデータベーステーブル名: TEST - 選択マッピングルールに使用します。
次の例では、Oracle をソースとするマッピングルールで小文字のオブジェクト名を使用しています。
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "admin",
"table-name": "test"
},
"rule-action": "include",
"filters": []
}
]
}
Oracle は大文字のオブジェクト名を必要とするため、この例では AWS DMS タスクは失敗します。
この例では、Oracle をソースとするマッピングルールで大文字のオブジェクト名を使用しています。
{
"rules": [
{
"rule-type": "selection",
"rule-id": "1",
"rule-name": "1",
"object-locator": {
"schema-name": "ADMIN",
"table-name": "TEST"
},
"rule-action": "include",
"filters": []
}
]
}
この例では、タスクは失敗しません。
ソーステーブルを取得するのに必要な権限がない
AWS DMS からソーステーブルを取得するために必要なアクセス許可があることを確認してください。
Oracle をソースエンドポイントとして使用する場合は、「Oracle をソースエンドポイントとして使用するときに AWS DMS に必要なアクセス許可は何ですか?」を参照してください。
各ソースデータベースエンジンの権限については、「データ移行のソース」を参照してください。
関連情報
Troubleshooting migration tasks in AWS Database Migration Service (AWS Database Migration Service での移行タスクのトラブルシューティング)