SQL Server の問題を診断する

エラーのトラブルシューティング

移行ジョブ プロセスで、ランタイム中にエラーが発生することがあります。

  • エラーによっては、Database Migration Service はエラーのあるオペレーションを自動的に再試行して、移行プロセスを続行し、中断を回避します。移行ジョブのステータスが [エラーありで実行中] に変わります。このステータスは、Database Migration Service がエラーの影響を受けないデータを移行し続けていることを示します。
  • 一部のエラーは復元できません。Database Migration Service で復元不可能なエラーが発生すると、移行ジョブのステータスが [失敗] に変わります。このようなシナリオでは、問題が修正された後に移行ジョブを再起動する必要があります。

エラーのトラブルシューティングを行うには、影響を受ける移行ジョブに移動し、エラーを表示して、エラー メッセージに記載されている手順に沿って対応します。Cloud SQL 宛先インスタンスの Cloud Monitoring ログを表示して、詳細を確認することもできます。移行ジョブの詳細ページで Cloud Monitoring リンクを使用します。

次の表に、問題の例とその解決方法を示します。

この問題については... 次のような問題が考えられます... 次のことを試します...
エラー メッセージ: The BAK file's database major version number {backup_version_num} must not be higher than the current database major version number {your Cloud SQL for SQL Server version number} Cloud SQL for SQL Server の宛先インスタンスで使用しているバージョンよりも新しい SQL Server バージョンからバックアップ ファイルをインポートしようとしています。

Database Migration Service は、クロスバージョンの互換性ガイドラインを満たしている場合にのみ、下位バージョンから上位バージョンへのクロスバージョン移行をサポートします。 サポートされている移行元および移行先のデータベースをご覧ください。

新しい SQL Server バージョンを使用するように Cloud SQL for SQL Server の移行先インスタンスを再作成し、新しいインスタンスで移行プロセスを再試行します。
エラー メッセージ: The following database already exists in destination: {database_name} Cloud SQL の移行先インスタンスに、移行ジョブに含まれるデータベースと同じ名前のデータベースがすでに含まれている。 名前の競合を解消します。 Error: database already exists in destination をご覧ください。
エラー メッセージ: Permission denied for {cloudsql.databases.get} on the Database Migration Service service account. Database Migration Service サービス アカウントに権限がありません。 不足している権限を Database Migration Service サービス アカウントに追加します。 IAM によるアクセス制御をご覧ください。
エラー メッセージ: Missing WAL file at Log Sequence Number (LSN) {log_number_here} トランザクション ログ ファイルで、含まれる更新の順序に関して間違ったエポック タイムスタンプが使用されている可能性があります。Database Migration Service は、ログ シーケンス番号とエポック タイムスタンプを使用して、トランザクション ログファイルが Cloud SQL の移行先インスタンスに複製される順序を制御します。 最新のトランザクション ログファイルのファイル名で使用されているエポック タイムスタンプを確認して調整します。 欠陥のあるトランザクション ログ名を調整するをご覧ください。

エラー: 宛先にデータベースがすでに存在します

次のエラー メッセージが表示される。 The following database already exists in destination: {database_name}

次のような問題が考えられます

Cloud SQL の移行先インスタンスに、移行ジョブに含まれるデータベースと同じ名前のデータベースがすでに含まれている。

次の方法をお試しください

データベースの重複の問題を解決する方法は、移行シナリオによって異なります。次のいずれかの方法をお試しください。

ソースの Cloud Storage バケットの名前を変更して、別の名前でデータベースを移行します。

Database Migration Service が移行先の Cloud SQL インスタンスに作成するデータベースの名前は、バックアップ ファイルを保存する Cloud Storage のフォルダ名から派生します。名前を共有する 2 つの異なるデータベースがあり、両方を Cloud SQL の移行先に必要とする場合は、フォルダの名前を変更して移行ジョブを再作成し、名前の競合を回避できます。

次の手順を行います。

  1. 名前の競合の影響を受けるソース データベースの新しいフォルダを作成します。バックアップ ファイルを Cloud Storage バケットに保存する をご覧ください。
  2. 移行ジョブを再作成します。 移行ジョブを作成するをご覧ください。

    既存の移行ジョブに新しいデータベースを追加することはできますが、移行ジョブからデータベースを削除することはできません。そのため、移行ジョブ全体を再作成する必要があります。

Cloud SQL for SQL Server インスタンスから重複するデータベースを削除します。

Cloud SQL の移行先インスタンスのデータベースが重複している場合は、インスタンスから削除して移行ジョブを続行できます。Cloud SQL for SQL Server のドキュメントのデータベースを削除するをご覧ください。


順序が異なる WAL ファイルのトランザクション ログ ファイル名を調整する

次のような問題が考えられます

トランザクション ログ ファイルで、含まれる更新の順序に関して間違ったエポック タイムスタンプが使用されている可能性があります。Database Migration Service は、ログ シーケンス番号とエポック タイムスタンプを使用して、トランザクション ログファイルが Cloud SQL の移行先インスタンスに複製される順序を制御します。

次の方法をお試しください

ファイルのアップロードが遅れたり、順番が入れ替わったりすることがあります。問題が解決するまで数分待つか、Cloud Storage バケットにファイルがないかどうかを確認します。

問題が解決しない場合は、 トランザクション ログファイル名のエポック タイムスタンプを確認して調整します。

次の手順を行います。

  1. 移行先の Cloud SQL for SQL Server インスタンスでトランザクション ログのインポート オペレーションのリストをチェックします。 Google Cloud コンソールで、[Cloud SQL インスタンス] ページに移動します。

    Cloud SQL の [インスタンス] に移動

  2. [すべてのオペレーションを表示] > [SQL Server エラーログを表示] をクリックします。
  3. トランザクション ログファイルのすべてのインポート オペレーションを表示し、ファイル名に正しいエポック タイムスタンプが含まれているかどうかを確認します。
  4. 最近のトランザクション ログ ファイルで、エポック タイムスタンプが順序どおりでない名前が使用されている場合は、Cloud Storage バケットに移動してファイルの名前を変更します。Database Migration Service は変更を自動的に検出し、関連するトランザクション ログファイルをインポートしようとします。
  5. Amazon RDS のみ: S3 へのエクスポート プロセス中に一部のトランザクション ログ ファイルが失われた可能性があります。WAL ファイルがない期間のトランザクション ログ エクスポート関数を再実行してみてください。