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 移行先インスタンスに、移行ジョブに含まれるデータベースの 1 つと同じ名前を使用するデータベースがすでに含まれています。 名前の競合を解消します。 エラー: データベースが宛先にすでに存在する をご覧ください。
エラー メッセージ: 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 移行先インスタンスに、移行ジョブに含まれるデータベースの 1 つと同じ名前を使用するデータベースがすでに含まれている。

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

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

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