Azure の SQL データ同期とは

適用対象:Azure SQL データベース

重要

SQL データ同期は2027年9月30日に廃止されます。 代替のデータレプリケーションや同期ソリューションへの移行を検討してください。 リタイアメントの一環として、以前SQL データ同期を使っていなかったAzureサブスクリプションで新しい同期グループを作成することはできません。既存の同期グループは終了日まで運用を続けられますが、その日までに代替ソリューションに移行する必要があります。

SQL データ同期はAzure SQL Database上に構築されたサービスで、オンプレミスおよびクラウドの両方で複数のデータベース間で選ばれたデータを双方向に同期できます。

Azure SQL データ同期 Azure SQL Managed InstanceやAzure Synapse Analyticsをサポートしていません。

概要

データ同期は、同期グループの概念に基づいています。 同期グループは、同期するデータベースのグループです。

データ同期は、データを同期するために、ハブとスポークのトポロジを使用します。 同期グループ内のいずれかのデータベースを、ハブ データベースとして定義します。 他のデータベースは、メンバー データベースです。 同期は、ハブと個々のメンバー間でのみ発生します。

  • ハブ データベースは、Azure SQL Database にする必要があります。
  • メンバー データベースにできるのは、Azure SQL Database 内のデータベースか、SQL Server のインスタンス内のデータベースです。
  • 同期メタデータ データベースには、データ同期のメタデータとログが含まれています。同期メタデータ データベースは、ハブ データベースと同じリージョンにある Azure SQL Database である必要があります。 同期メタデータ データベースは、お客様が作成し、所有します。 同期メタデータ データベースは、リージョンおよびサブスクリプションごとに 1 つだけ作成できます。 同期グループまたは同期エージェントが存在する間は、同期メタデータ データベースを削除したり、名前を変更したりすることはできません。 Microsoft では、同期メタデータ データベースとして使用する新しい空のデータベースを作成することをお勧めしています。 データ同期は、このデータベースにテーブルを作成し、頻繁に発生するワークロードを実行します。

メモ

オンプレミスのデータベースをメンバー データベースとして使用している場合は、ローカル同期エージェントをインストールして構成する必要があります。

データベース間のデータ同期プロセスを説明する図。

同期グループには、次のプロパティがあります。

  • 同期スキーマは、どのデータが同期されるかについて説明します。
  • 同期方向は双方向にすることも、一方向のみにすることもできます。方向は、ハブからメンバーメンバーからハブ、またはその両方です。
  • 同期間隔は、同期が発生する頻度を示します。
  • 競合解決ポリシーはグループレベルのポリシーであり、ハブ優先またはメンバー優先に設定できます。

使用する場合

データ同期は、Azure SQL Database または SQL Server の複数のデータベースにわたってデータを更新し続ける必要がある場合に便利です。 以下に、データ同期の主なユース ケースを示します。

  • ハイブリッド データ同期: データ同期を使って、SQL Server および Azure SQL Database のデータベース間でデータの同期を維持し、ハイブリッド アプリケーションを実現できます。 この機能は、クラウドに移行して一部のアプリケーションを Azure に配置することを検討している顧客にとって魅力的な場合があります。
  • 分散アプリケーション: 多くの場合、ワークロードが異なるのであればデータベースも分離しておくと便利です。 たとえば、大規模な運用データベースがあり、このデータに対するレポートまたは分析ワークロードを実行する必要がある場合は、この追加のワークロード用に 2 つ目のデータベースを用意すると便利です。 そうすることで、運用ワークロードのパフォーマンスへの影響を最低限にすることができます。 データ同期を使えば、この 2 つのデータベースの同期を維持することができます。
  • グローバル分散アプリケーション: 多くの企業は、複数のリージョン、さらには複数の国/リージョンにわたって展開しています。 ネットワーク待ち時間を最小限にするには、データは最寄りのリージョンに配置するのが一番です。 データ同期では、世界中のリージョンのデータベースを簡単に同期させることができます。

データ同期は、次のシナリオに適したソリューションではありません。

シナリオ 推奨されるソリューション例
ディザスター リカバリー Azure SQL Database の自動バックアップ
読み取りスケール 読み取り専用レプリカを使用して読み取り専用クエリ ワークロードをオフロードする
ETL (OLTP から OLAP へ) Azure Data Factory または SQL Server Integration Services
SQL Server から Azure SQL Database への移行。 ただし、移行の完了後に SQL データ同期を使用して、ソースとターゲットの同期を確実に維持することができます。 Azure Database Migration Service

しくみ

  • データ変更の追跡:データ同期は挿入、更新、削除トリガーを使って変更を追跡します。 変更はユーザー データベースのサイド テーブルに記録されます。 BULK INSERT デフォルトではトリガーは発動しません。 FIRE_TRIGGERSを指定しなければ、インサートトリガーは実行されません。 FIRE_TRIGGERS オプションを追加して、データ同期 がそれらの挿入を追跡できるようにします。
  • データの同期: データ同期は、ハブとスポークのモデルで設計されています。 ハブは、各メンバーと個別に同期されます。 ハブの変更がメンバーにダウンロードされ、次にメンバーの変更がハブにアップロードされます。
  • 競合の解決: データ同期機能には、競合を解決するために、ハブ側に合わせる または メンバー側に合わせる という 2 つのオプションがあります。
    • ハブが優先 を選択すると、ハブでの変更が常にメンバーでの変更を上書きします。
    • [メンバー側に合わせる] を選ぶと、メンバーでの変更がハブでの変更を上書きします。 複数のメンバーがある場合、最終的な値は、どのメンバーが最初に同期されるかによって異なります。

トランザクションレプリケーションと比較してください

データ同期 トランザクション レプリケーション
長所 - アクティブ/アクティブのサポート
- オンプレミスとAzure SQL Database間の双方向
- 待ち時間の短縮
- トランザクションの整合性
- 移行後に既存トポロジの再利用
\- Azure SQL Managed Instance のサポート
短所 - トランザクションの整合性なし
- パフォーマンスへの影響が大きい
- Azure SQL データベースからは発行できません
- 高いメンテナンス コスト

注意事項

SQL データ同期では、 ハブ データベースとメンバー データベースへの接続に対する SQL 認証が必要です。 Microsoft Entra ID認証はSQL データ同期ではサポートされていません。

SQL認証は静的パスワードに依存しているため、多要素認証(MFA)、条件付きアクセス、マネージドIDなどの現代的な保護の恩恵を受けません。 この依存は、SQLインスタンス全体が認証情報盗難、ブルートフォース攻撃、パスワードローテーションやポリシー強制の運用オーバーヘッドにさらされるリスクを高めます。

可能であれば、Microsoft Entra 認証またはマネージド ID をサポートするソリューションを優先します。 SQL データ同期は廃止予定なので、組織のセキュリティ基準に合った代替サービスに移行しましょう。

メモ

SQL データ同期のプライベート リンクは、Azure Private Link とは異なります。

新しいプライベート リンク機能を使用すると、サービス マネージド プライベート エンドポイントを選択して、データの同期処理中に同期サービスとメンバー/ハブ データベースの間にセキュリティで保護された接続を確立できます。 サービス マネージド プライベート エンドポイントは、特定の仮想ネットワークおよびサブネット内のプライベート IP アドレスです。 データ同期では、サービス マネージド プライベート エンドポイントが Microsoft によって作成され、特定の同期操作でデータ同期サービスによって排他的に使用されます。

プライベート リンクを設定する前に、この機能の一般的な要件を確認してください。

データ同期のプライベート リンクの図。

メモ

同期グループのデプロイ中に Azure portal の [プライベート エンドポイント接続] ページで、または PowerShell を使用して、サービス マネージド プライベート エンドポイントを手動で承認する必要があります。

概要

Azure portal でのデータ同期の設定

PowerShell を使用したデータ同期の設定

REST API を使用したデータ同期の設定

データ同期のベスト プラクティスの確認

何か問題が発生しましたか?

一貫性とパフォーマンス

最終的な一貫性

データ同期はトリガーベースであるため、トランザクションの一貫性を保証するわけではありません。 Microsoftはデータ同期が最終的にすべての変更を行い、データ損失を起こさないことを保証します。

パフォーマンスへの影響

データ同期では、挿入、更新、および削除の 3 種類のトリガーを使用して変更を追跡します。 これにより、ユーザー データベース内に変更追跡のためのサイド テーブルが作成されます。 これらの変更追跡アクティビティは、データベースのワークロードに影響します。 サービス層を評価し、必要な場合はアップグレードします。

同期グループの作成、更新、削除中のプロビジョニングとプロビジョニング解除は、データベースのパフォーマンスにも影響を与える場合があります。

要件と制限事項

一般的な要件

  • 各テーブルには主キーが必要です。 どの行の主キーも値を変更しないでください。 主キーの値を変更する必要がある場合は、行を削除し、新しい主キー値で作成し直してください。

重要

既存の主鍵の値を変更すると、以下の誤った動作が生じます。

  • 同期で問題が報告されていなくても、ハブとメンバー間のデータは失われることがあります。
  • 同期が失敗する原因は、主キーの変更によりトラッキングテーブルにソースからの行が存在しない場合です。
  • 同期のメンバーとハブの両方に対してスナップショット分離を有効にする必要があります。 詳しくは、「SQL Server でのスナップショット分離」をご覧ください。

  • データ同期のプライベートリンクを使用するには、メンバーデータベースとハブデータベースの両方がAzure(同じリージョンまたは異なるリージョン)でホストされている必要があります。同じクラウドタイプ(例えば、両方ともパブリッククラウド、または両方が政府クラウド)でホストされている必要があります。 また、ハブやメンバーサーバーをホストするサブスクリプションのリソースプロバイダー Microsoft.Network を登録してください。 データ同期のプライベートリンクは、Azureポータルのプライベートエンドポイント接続セクション内、またはPowerShellを通じて、Sync設定時に手動で承認する必要があります。 プライベートリンクの承認方法については、「チュートリアル:Azure SQL Database と SQL Server のデータベース間 SQL データ同期 の設定」をご覧ください。 サービス管理のプライベートエンドポイントを承認すると、同期サービスとメンバー/ハブデータベース間のすべての通信はプライベートリンクを通じて行われます。 既存の同期グループを更新してこの機能を有効にすることができます。

一般的な制限事項

  • テーブルに、主キー以外の ID 列を設けることはできません。
  • 主キーには、次のデータ型を含めることはできません: sql_variantbinaryvarbinaryimagexml
  • サポートされている精度は秒単位のみのため、次のデータ型を主キーとして使用するときは注意してください: timedatetimedatetime2datetimeoffset
  • オブジェクト (データベース、テーブル、および列) の名前には、印刷可能な文字のピリオド (.)、左角かっこ ([)、または右角かっこ (]) を使用できません。
  • テーブル名に印刷可能文字を含めることはできません: ! " # $ % ' ( ) * + - またはスペース。
  • Microsoft Entra (旧 Azure Active Directory) 認証はサポートされていません。
  • 同じ名前のテーブルが異なるスキーマ(例えば dbo.customerssales.customers)がある場合、同期グループに追加できるテーブルは1つだけです。
  • ユーザー定義データ型の列はサポートされていません。
  • 異なるサブスクリプション間でのサーバーの移動はサポートされていません。
  • 2 つの主キーでケースだけが違っている (例: Foofoo) 場合、データ同期ではこのシナリオがサポートされません。
  • テーブルの切り捨ては、データ同期でサポートされている操作ではありません (変更は追跡されません)。
  • Azure SQL Hyperscale データベースをハブまたは同期メタデータ データベースとして使用する機能はサポートされていません。 ただし、Hyperscale データベースは、データ同期トポロジ内のメンバー データベースになることができます。
  • メモリ最適化テーブルはサポートされません。
  • スキーマ変更は自動的にはレプリケートされません。
  • データ同期は以下の2つのインデックスプロパティのみをサポートしています:ユニーク、クラスタ/非クラスタ。 IGNORE_DUP_KEY または WHERE フィルター述語など、インデックスのその他のプロパティはサポートされておらず、ソース インデックスにこれらのプロパティが設定されていても、同期先インデックスはこれらのプロパティなしでプロビジョニングされます。
  • さらに、Azure Elastic ジョブ データベースを SQL データ同期メタデータ データベースとして使用することはできません。その逆も同様です。
  • SQL データ同期はレジャー データベースではサポートされていません。
  • データ同期は災害復旧や高可用性ツールではなく、独自の同期グループ情報を同期するわけでもありません。 データ同期には自動災害復旧はありません。
  • データ同期は設計上、ネットワークセキュリティ境界をサポートしていません。 データ同期はAzureリソースではなくプロキシサービスとして動作するため、境界ルールを書くための完全な限定ドメイン名やIPアドレスがありません。 境界はデータ同期がトランジションモードと強制モードの両方で必要とするネットワークパスをブロックし、アクセスルールがなければ動作しません。 論理サーバーが境界に紐づいているなら、ネットワークセキュリティ境界をサポートするデータ移動ソリューションに移行しましょう。

サポートされていないデータ型

  • ファイルストリーム
  • SQL/CLR UDT
  • XMLSchemaCollection (XML サポート)
  • Cursor、 RowVersionTimestampHierarchyid

サポートされていない列の種類

データ同期では、読み取り専用の列またはシステムで生成された列は同期できません。 次に例を示します。

  • 計算列
  • テンポラル テーブル用にシステムで生成された列

サービスとデータベースの数量に関する制限

Dimensions 制限 回避策
データベースが属することができる同期グループの最大数。 5
1 つの同期グループ内のエンドポイントの最大数 30
1 つの同期グループ内のオンプレミス エンドポイントの最大数。 5 複数の同期グループを作成する
データベース、テーブル、スキーマ、および列名 名前ごとに50文字まで
同期グループ内のテーブル数 500 複数の同期グループを作成する
同期グループ内のテーブルの列数 1000
テーブルでのデータ行のサイズ 24MB

メモ

同期グループが1つだけの場合、1つの同期グループに最大30台のエンドポイントが存在することもあります。 同期グループが複数ある場合、すべての同期グループ全体のエンドポイント数は30を超えてはなりません。 データベースが複数の同期グループに属している場合、それは1つではなく複数のエンドポイントとしてカウントされます。

ネットワークの要件

メモ

Syncプライベートリンクを使っている場合、これらのネットワーク要件は適用されません。

同期グループが確立されるときに、データ同期サービスはハブ データベースに接続する必要があります。 同期グループを確立する場合、Azure SQL サーバーの Firewalls and virtual networks 設定は次のように構成されている必要があります。

同期グループが作成され、プロビジョニングされたら、これらの設定を無効にできます。 同期エージェントは、ハブ データベースに直接接続します。また、サーバーのファイアウォール IP 規則またはプライベート エンドポイントを使用して、エージェントがハブ サーバーにアクセスできるよう許可します。

メモ

同期グループのスキーマ設定を変更する場合は、ハブデータベースを再プロビジョニングするためにデータ同期サービスが再びサーバーにアクセスできるようにする必要があります。

リージョンのデータ所在地

同じリージョン内のデータを同期する場合、SQL データ同期では、サービス インスタンスがデプロイされているリージョン外部での顧客データの格納または処理は行われません。 異なるリージョン間でデータを同期すると、SQL データ同期は顧客データをペアになっているリージョンにレプリケートします。

SQL データ同期に関する FAQ

SQL データ同期サービスのコストはどのくらいですか?

SQL データ同期サービスそのものに対しては課金されません。 ただし、SQL データベース インスタンスへの、またはインスタンスからのデータ移動には、データ転送の料金がかかります。 詳細については、データ転送の料金に関するページを参照してください。

データ同期はどのリージョンでサポートされていますか?

SQL データ同期はすべてのリージョンでご利用いただけます。

Azure SQL Database アカウントは必要ですか?

はい。 ハブ データベースをホストするには、Azure SQL Database アカウントが必要です。

データ同期を使用して、SQL Server データベースのみの間で同期できますか?

直接無効にすることはできません。 しかし、Azure でハブ データベースを作成し、オンプレミス データベースを同期グループに追加することで、SQL Server データベース間で間接的に同期できます。

データ同期を構成して、異なるサブスクリプションに属している Azure SQL Database のデータベース間で同期できますか?

はい。 サブスクリプションが異なるテナントに属している場合でも、異なるサブスクリプションによって所有されているリソース グループに属するデータベース間で同期を構成できます。

  • サブスクリプションが同じテナントに属していて、すべてのサブスクリプションへのアクセス許可がある場合、Azure portal 上で同期グループを構成できます。
  • それ以外の場合、PowerShell を使用して、同期メンバーを追加する必要があります。
  • Private Linkはテナント間での対応がありません。

データ同期を設定して、異なるクラウド (Azure パブリック クラウドおよび 21Vianet による Azure など) に属している SQL Database のデータベース間で同期できますか?

データ同期はクロスクラウド同期をサポートしていません。

データ同期を使用して、実稼働データベースから空のデータベースにデータをシードし、同期することはできますか?

はい。 元のデータベースからスクリプトを作成することで、新しいデータベース内にスキーマを手動で作成します。 スキーマを作成した後で、同期グループにテーブルを追加し、データをコピーして同期を維持します。

データベースをバックアップおよび復元するには、SQL データ同期を使う必要がありますか?

SQL データ同期を使ってデータのバックアップを作成することはお勧めできません。 SQL データ同期の同期はバージョン管理されていないため、バックアップして特定の時点に復元することはできません。 さらに、SQL データ同期を使用すると、ストアド プロシージャなどの他の SQL オブジェクトがバックアップされないため、復元操作に相当する処理を迅速に行うことはできません。

推奨される 1 つのバックアップ方法については、「トランザクション上一貫性のある Azure SQL データベースにあるデータベースのコピーの作成」を参照してください。

データ同期によって、暗号化されたテーブルと列を同期できますか?

  • データベースが [Always Encrypted (常に暗号化)] を使用する場合、暗号化されていないテーブルおよび列のみを同期できます。 データ同期はデータを暗号化解除できないため、暗号化された列を同期することはできません。
  • 列が Column-Level 暗号化(CLE)を使用している場合、行サイズが最大24MB未満であれば同期可能です。 データ同期は、鍵によって暗号化された列 (CLE) を通常のバイナリ データとして処理します。 他の同期メンバーのデータを暗号化解除するには、同じ証明書を持っている必要があります。

SQL データ同期では照合順序はサポートされていますか?

はい。 SQL データ同期は、次のシナリオで照合順序の設定をサポートします。

  • 選んだ同期スキーマ テーブルがハブまたはメンバー データベースにまだない場合、同期グループを展開すると、サービスは空の展開先データベースで選ばれている照合順序の設定を使って、対応するテーブルと列を自動的に作成します。
  • 同期対象のテーブルがハブとメンバー データベースの両方に既に存在する場合は、SQL データ同期で同期グループを正常に展開するには、ハブとメンバー データベースで主キー列の照合順序が同じである必要があります。 主キー列以外の列に対して照合順序の制限はありません。

SQL データ同期ではフェデレーションはサポートされていますか?

フェデレーションルートデータベースとSQL データ同期を制限なく利用できます。 現在のSQL データ同期のバージョンにフェデレーテッドデータベースエンドポイントを追加することはできません。

データ同期を使用して、Dynamics 365 からエクスポートされたデータを、独自データベースの持ち込み (BYOD) 機能によって同期することはできますか?

管理者は、Dynamics 365 の独自データベースの持ち込み機能を使用して、データ エンティティをアプリケーションから自分の Microsoft Azure SQL Database にエクスポートできます。 増分プッシュを使用してデータをエクスポートし (完全プッシュはサポートされていません)、かつ [ターゲット データベースのトリガーを有効にする][はい] に設定している場合、データ同期を使用してこのデータを他のデータベースに同期することができます。

ディザスターリカバリをサポートするために、フェールオーバーグループでデータ同期を作成するにはどうすればいいですか?

SQL データ同期には、自動フェールオーバーやディザスター リカバリー機能はありません。 データベースが別のリージョンにフェイルオーバーすると、同期グループは機能しなくなります。 フェイルオーバー領域で、プライマリリージョンと同じ設定で同期グループを手動で再作成してください。

監視とトラブルシューティング

SQL データ同期が想定どおりに行われているかどうかを確認したい場合に、 アクティビティを監視して問題のトラブルシューティングを行うには、次の記事を参照してください。

Azure SQL Database の詳細

Azure SQL Databaseの詳細については、以下の記事をご覧ください。