SQL データ同期に関する問題のトラブルシューティング
適用対象: Azure SQL データベース
重要
SQL データ同期 は、2027 年 9 月 30 日に廃止される予定です。 代替のデータ レプリケーション/同期ソリューションへの移行を検討してください。
この記事では、Azure での SQL データ同期に関する既知の問題のトラブルシューティングを行う方法について説明します。 問題の解決方法がある場合は、ここにその方法を示します。
SQL データ同期の概要については、「Azure のSQL データ同期とは?」を参照してください。
SQL データ同期は、Azure SQL Managed Instance または Azure Synapse Analytics をサポートしていません。
同期に関する問題
"列 <column> に値 NULL を挿入できません。 この列では NULL 値が許可されていません" というエラー メッセージが表示されました。このメッセージの意味と修正方法を教えてください。
データ同期では循環参照はどのように処理されますか? つまり、同じデータが複数の同期グループで同期されるとき、その変更を結果として保持しますか?
エラー メッセージ "Sync0022 Customer は、アクション 'syncGroupOperationResults/read' を実行する承認を得ていません"
ポータル UI で、クライアント エージェントに関連付けられているオンプレミス データベースの同期に失敗する
SQL データ同期のポータル UI で、クライアント エージェントに関連付けられているオンプレミス データベースの同期に失敗します。 エージェントを実行しているローカル コンピューターのイベント ログに、System.IO.IOException
エラーが記録されます。 このエラーには、ディスクの空き領域が不足していると記載されています。
原因。 ドライブの領域が不足しています。
解決策。 %TEMP% ディレクトリがあるドライブ上の空き領域を増やします。
同期グループが処理状態で停止する
SQL データ同期の同期グループが、長時間にわたり処理状態になっています。 停止 コマンドに反応せず、ログに新しいエントリが記録されていません。
次のいずれかの条件が満たされると、同期グループが処理状態のままになることがあります。
原因。 クライアント エージェントがオフラインになっています。
解決策。 クライアント エージェントがオンラインになっていることを確認してから、再試行します。
原因。 クライアント エージェントがアンインストールされているか、見つからない。
解決策。 クライアント エージェントがアンインストールされているか、見つからない場合:
- SQL データ同期のインストール フォルダーにエージェント XML ファイルがある場合は、このファイルを削除します。
- オンプレミスのコンピューター (同じコンピューターでも別のコンピューターでもかまいません) にエージェントをインストールします。 次に、オフラインと表示されているエージェント用にポータルで生成されたエージェント キーを送信します。
原因。 SQL データ同期サービスが停止しています。
解決策。 SQL データ同期サービスを再起動します。
- [スタート] メニューで、サービスを検索します。
- 検索結果で、 [サービス] を選択します。
- SQL データ同期サービスを見つけます。
- このサービスの状態が [停止] の場合は、サービス名を右クリックして [開始] を選択します。
Note
上記の情報で同期グループの処理状態を解除できない場合は、Microsoft サポートが同期グループの状態をリセットします。 同期グループの状態のリセットを依頼するには、Azure SQL Database に関する Microsoft Q&A 質問ページに投稿してください。 この投稿には、サブスクリプション ID およびリセットが必要なグループの同期グループ ID を記載してください。 Microsoft サポート エンジニアが投稿に対応し、状態がリセットされたらその旨を連絡します。
テーブルにエラーのあるデータが含まれる
同期に、名前が同じであるもののデータベース スキーマが異なるテーブルが含まれている場合、同期後のテーブルには誤ったデータが表示されます。
原因。 SQL データ同期のプロビジョニング プロセスでは、スキーマが異なる一方で名前が同じであるテーブルについては、同じ追跡テーブルが使用されます。 このため、両方のテーブルの変更内容が同一の追跡テーブルに反映されます。 これにより、同期中にデータの変更が誤って行われます。
解決策。 同期の対象となるテーブルについて、データベース内で別のスキーマに属している場合でも名前が異なっていることを確認してください。
同期に成功した後に一貫性のない主キー データが表示される
同期が成功と報告され、失敗またはスキップされた行がログに示されていないにもかかわらず、同期グループ内のデータベース間で主キーのデータに不整合が発生します。
原因。 この結果は仕様です。 任意の主キー列に変更が加えられると、主キーが変更された行のデータに不整合が発生します。
解決策。 この問題を回避するには、主キー列のデータが変更されないようにします。 問題を発生後に解決するには、同期グループのすべてのエンドポイントから、データに不整合が発生した行を削除します。 その後、削除した行を挿入し直します。
パフォーマンスが大幅に低下する
パフォーマンスが大幅に低下し、データ同期 UI を起動できなくなることもあります。
原因。 最も可能性の高い原因は同期ループです。 同期グループ A による同期で同期グループ B による同期がトリガーされ、さらにこの同期で同期グループ A による同期がトリガーされると、同期ループが発生します。実際の状況はさらに複雑であり、ループに同期グループが 3 つ以上含まれる場合もあります。 問題は、同期グループが互いに重複していることが原因で、同期の循環トリガーが発生することです。
解決策。 最善の解決策は予防です。 同期グループに循環参照がないことを確認します。 1 つの同期グループによって同期される行を、別の同期グループによって同期することはできません。
"列 <column> に値 NULL を挿入できません。 この列では NULL 値が許可されていません" というエラー メッセージが表示されました。このメッセージの意味と修正方法を教えてください。
このエラー メッセージは、次の 2 つの問題のいずれかを示しています。
- テーブルに主キーが設定されていません。 この問題を解決するには、同期しているすべてのテーブルに主キーを追加します。
- CREATE INDEX ステートメントに WHERE 句があります。 データ同期では、この状態は処理されません。 この問題を解決するには、WHERE 句を削除するか、手動ですべてのデータベースに変更を加えます。
データ同期では循環参照はどのように処理されますか? つまり、同じデータが複数の同期グループで同期されるとき、その変更を結果として保持しますか?
データ同期では、循環参照は処理されません。 必ず回避してください。
クライアント エージェントに関する問題
クライアント エージェントに関する問題のトラブルシューティングを行うには、データ同期エージェントの問題のトラブルシューティングに関する記事を参照してください。
セットアップとメンテナンスに関する問題
"disk out of space (ディスク領域不足)" メッセージが表示される
原因。 "disk out of space (ディスク領域不足)" メッセージは、未処理のファイルを削除する必要がある場合に表示される可能性があります。 この原因としては、ウイルス対策ソフトウェアや、削除操作を行おうとしたときにファイルが開かれていることなどが考えられます。
解決策。 %temp% フォルダーに含まれる同期ファイルを手動で削除します (
del \*sync\* /s
)。 その後、%temp% フォルダーのサブディレクトリを削除します。
重要
同期の進行中はファイルを削除しないでください。
同期グループを削除できない
同期グループを削除できません。 以下のシナリオのいずれかに該当する場合、同期グループの削除に失敗する可能性があります。
原因。 クライアント エージェントがオフラインになっている。
解決策。 クライアント エージェントがオンラインになっていることを確認してから、再試行します。
原因。 クライアント エージェントがアンインストールされているか、見つからない。
解決策。 クライアント エージェントがアンインストールされているか、見つからない場合:
a. SQL データ同期のインストール フォルダーにエージェント XML ファイルがある場合は、このファイルを削除します。
b. オンプレミスのコンピューター (同じコンピューターでも別のコンピューターでもかまいません) にエージェントをインストールします。 次に、オフラインと表示されているエージェント用にポータルで生成されたエージェント キーを送信します。原因。 データベースがオフラインになっている。
解決策。 データベースがすべてオンラインになっていることを確認します。
原因。 同期グループのプロビジョニング中または同期中である。
解決策。 プロビジョニング プロセスまたは同期プロセスが完了するまで待ってから、同期グループをもう一度削除します。
SQL Server データベースの登録を解除できない
原因。 既に削除されているデータベースの登録を解除しようとしていると考えられます。
解決策。 SQL Server データベースの登録を解除するには、データベースを選択し、 [Force Delete](強制削除) を選択します。
この操作を実行しても同期グループからデータベースを削除できない場合は、次の手順を実行します。
- クライアント エージェント ホスト サービスをいったん停止した後、再び開始します。
a. [スタート] メニューを選択します。
b. 検索ボックスに「services.msc」と入力します。
c. 検索結果ウィンドウの [プログラム] セクションで、 [サービス] をダブルクリックします。
d. [SQL データ同期] サービスを右クリックします。
e. サービスが実行中の場合は、停止します。
f. サービスを右クリックして、 [開始] を選択します。
g. データベースがまだ登録されているかどうかを確認します。 登録が解除されている場合は、作業は終了です。 それ以外の場合は、次の手順に進みます。 - クライアント エージェント アプリ (SqlAzureDataSyncAgent) を開きます。
- [資格情報の編集] を選択し、データベースの資格情報を入力します。
- 登録の解除に進みます。
- クライアント エージェント ホスト サービスをいったん停止した後、再び開始します。
システム サービスを開始するのに十分な権限がない
原因。 このエラーは、次の 2 つの状況で発生します。
- ユーザー名やパスワードが正しくない。
- 指定されたユーザー アカウントに、サービスとしてログオンするための十分な権限がない。
解決策。 "サービスとしてログオン" 資格情報をユーザー アカウントに付与します。
- [スタート]>[コントロール パネル]>[管理ツール]>[ローカル セキュリティ ポリシー]>[ローカル ポリシー]>[User Rights Management](ユーザー権限の管理) の順に選択します。
- [サービスとしてログオン] を選択します。
- [プロパティ] ダイアログ ボックスでこのユーザー アカウントを追加します。
- [Apply](適用) を選択し、次に [OK] を選択します。
- すべてのウィンドウを閉じます。
データベースの状態が [Out-of-Date](最新ではありません) になっている
原因。 SQL データ同期では、45 日以上サービスでオフライン状態となっているデータベースは除外されます (データベースがオフラインになったときからカウントされます)。 オフライン状態が 45 日以上続いていたデータベースがオンラインに戻った場合、状態は [Out-of-Date](最新ではありません) になります。
解決策。 [Out-of-Date](最新ではありません) 状態を回避するには、データベースが 45 日以上オフラインにならないようにします。
データベースの状態が [Out-of-Date](最新ではありません) の場合、次の手順を実行します。
- 状態が [Out-of-Date](最新ではありません) となっているデータベースを同期グループから削除します。
- そのデータベースを同期グループに再び追加します。
警告
このデータベースがオフラインの間に加えた変更はすべて失われます。
同期グループの状態が [Out-of-Date](最新ではありません) になっている
原因。 45 日間のリテンション期間全体にわたって 1 つまたは複数の変更を適用できなかった場合、同期グループは最新とは言えない可能性があります。
解決策。 同期グループの [Out-of-Date](最新ではありません) 状態を回避するには、履歴ビューアーで同期ジョブの結果を定期的に調べます。 適用に失敗した変更を調査して解決します。
同期グループの状態が [Out-of-Date](最新ではありません) の場合は、同期グループを削除してから再作成します。
エージェントのアンインストール/停止後 3 分以内に同期グループを削除できない
関連付けられている SQL データ同期クライアント エージェントをアンインストールまたは停止してから 3 分以内に同期グループを削除することはできません。
解決策。
- 関連付けられている同期エージェントがオンラインのときに同期グループを削除します (推奨)。
- エージェントがオフラインになっているもののインストールはされている場合は、オンプレミスのコンピューターでオンラインにします。 次に、SQL データ同期ポータルでエージェントの状態が [オンライン] と表示されるまで待機します。 その後、同期グループを削除します。
- エージェントがアンインストールされたためにオフラインになっている場合は、次の手順を実行します。
a. SQL データ同期のインストール フォルダーにエージェント XML ファイルがある場合は、このファイルを削除します。
b. オンプレミスのコンピューター (同じコンピューターでも別のコンピューターでもかまいません) にエージェントをインストールします。 次に、オフラインと表示されているエージェント用にポータルで生成されたエージェント キーを送信します。
c. 同期グループを削除します。
紛失または破損したデータベースを復元するとどうなりますか?
紛失または破損したデータベースをバックアップから復元した場合、データベースが属している同期グループのデータが収束しない可能性があります。
エラー メッセージ "Sync0022 Customer は、アクション 'syncGroupOperationResults/read' を実行する承認を得ていません。"
エラー メッセージ Sync0022 Customer does not have authorization to perform action 'syncGroupOperationResults/read'
が表示された場合、その操作を試みるアカウントに十分なサブスクリプション レベルのアクセス許可がありません。 次の項目を追加します。
- "Microsoft.Sql/locations/syncMemberOperationResults/read"
- "Microsoft.Sql/locations/syncAgentOperationResults/read"
- "Microsoft.Sql/locations/syncGroupOperationResults/read"
詳細については、リソース プロバイダーの操作 RBAC に関するページと、必要最小限の特権を持つ SQL データ同期のデータベース アカウントに関するページを参照してください。
関連するコンテンツ
- Azure の SQL データ同期とは
- チュートリアル:Azure SQL Database と SQL Server のデータベース間の SQL データ同期を設定する
- PowerShell を使用して Azure SQL Database の複数データベース間でデータを同期する
- PowerShell を使用して SQL Database と SQL Server の間でデータの同期
- SQL データ同期の Data Sync Agent
- Azure SQL データ同期のベスト プラクティス
- Azure SQL データベースと Azure SQL Managed Instance での監視とパフォーマンス チューニング
- Azure SQL データ同期でスキーマ変更のレプリケートを自動化する
- PowerShell を使用して、既存の同期グループの同期スキーマを更新する
- Azure SQL Database とは何ですか?
- データベースのライフサイクル管理