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

移行先の Cloud SQL for SQL Server インスタンスを再作成して、新しい SQL Server バージョンを使用し、新しいインスタンスで移行プロセスを再試行します。
エラー メッセージ: The following database already exists in destination: {database_name} Cloud SQL の移行先インスタンスに、移行ジョブに含まれるデータベースのいずれかと同じ名前のデータベースがすでに含まれている。 名前の競合を解消します。 エラー: データベースがすでに宛先に存在します をご覧ください。
エラー メッセージ: 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 の移行先インスタンスにレプリケートされる順序を制御します。 最新のトランザクション ログファイルのファイル名で使用されているエポック タイムスタンプを確認して調整します。 障害のあるトランザクション ログ名を調整するをご覧ください。
選択したデータベースを移行し、移行ジョブが 1 つ以上のデータベースにデータを複製できない場合、データベースのリストに [失敗] ステータスが表示されます。 さまざまな移行ジョブのエラー。

[エラー] 列で、[エラーを表示] をクリックしてエラーを修正します。エラーを修正したら、[Restart] をクリックします。

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

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

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

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

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

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

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

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

次の手順を行います。

  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 ファイルの期間のトランザクション ログ エクスポート関数を再実行してみてください。