Configure change event streaming (preview) to Azure Event Hubs

適用対象:SQL Server 2025 (17.x)Azure SQL DatabaseAzure SQL マネージド インスタンスMicrosoft Fabric の SQL データベース

この記事では、SQL Server 2025(17.x)、Azure SQL Database、Azure SQL Managed Instance、およびMicrosoft FabricのSQLデータベースで変更イベントストリーミング(CES)機能をストリームに設定する方法を説明していますAzure Event Hubs.

CESをFabric Eventstreamに設定するには、「Stream to Fabric Eventstream」をご覧ください。

変更イベントのストリーミングは現在 プレビュー段階で、 製品間でサポート性に違いがあります。 プレビュー期間中、この機能は変更される可能性があります。

変更イベントストリーミングの手順

  1. 既存のものを使用するか、新しい Azure Event Hubs 名前空間と Event Hubs インスタンスを作成します。 Event Hubs インスタンスはイベントを受信します。
  2. ユーザー データベースの変更イベント ストリーミングを有効にします。
  3. ストリームグループを作成しましょう。 このグループを使用して、宛先、資格情報、メッセージ サイズの制限、およびパーティション 分割スキーマを構成します。
  4. ストリームグループに1つ以上のテーブルを追加します。

各手順については、この記事の次のセクションで詳しく説明します。

[前提条件]

Important

2026年8月15日現在、AMQPプロトコルはチェンジイベントストリーミング(CES)のために非推奨となっています。 プラットフォームごとに違いがあります。 移行手順やタイムラインについては、 AMQPプロトコルの廃止を参照してください。

変更イベント ストリーミングを構成するには、次のリソース、アクセス許可、および構成が必要です。

Azure SQL Managed Instance で変更イベント ストリーミングを使用する場合は、SQL Server 2025 または Always-up-to-date 更新ポリシーを使用してインスタンスを構成する必要があります。

Azure Event Hubs の構成

Azure Event Hubs を作成する方法については、「Azure portal を使用してイベント ハブを作成する」を参照してください。

Azure Event Hubs のアクセス制御

Azure Event Hubs への SQL リソースのアクセス制御を構成します。 Microsoft Entra認証は最も安全な方法です。 CESはAzure SQL DatabaseおよびAzure SQL Managed InstanceでMicrosoft Entra認証をサポートしています。 SQL Server 2025では、Azure Arcで有効化されたインスタンスやAzure VM上で動作するインスタンスに対して、Cumulative Update 3(CU3)からMicrosoft Entra認証がサポートされています。 共有アクセス ポリシーはサポートされていますが、Microsoft Entra認証がオプションでない場合にのみ使用してください。

共有アクセス ポリシーは、 Azure Event Hubs に認証と承認を提供します。 各共有アクセス ポリシーには、名前、アクセス レベル (ManageSend、または Listen)、リソース バインディング (Event Hubs 名前空間または特定の Event Hub インスタンス) が必要です。 インスタンス レベルのポリシーでは、最小限の特権の原則に従うことで、セキュリティが強化されます。 SQL データベース エンジン製品は共有アクセスポリシーをサポートしていますが、可能な限りMicrosoft Entra認証を使用してください。これによりセキュリティが向上します。

認証や承認に共有アクセスポリシーを使う場合、Event Hubsインスタンスにデータを送るクライアントは、使用するポリシーの名前とポリシーの サービスキーを提供する必要があります。

Azure Event Hubsへのストリーミング設定には、「送信」権限付きの共有アクセスポリシーを作成または再利用してください。 サービスキー(プライマリキーまたはセカンダリーキーの値)を使って認証できます。

セキュリティを強化するために、可能な限り Microsoft Entra ベースのアクセス制御を使用してください。 Microsoft Entraベースのアクセス制御ができず、共有アクセスポリシーを使用している場合、ベストプラクティスはサービスキーを定期的にローテーションすることです。 Azure Key Vault または同様のサービスを使用して、すべてのシークレットを安全に格納します。

ポリシーを定義する

送信権付きの共有アクセスポリシーが必要です。 次のいずれかを実行できます。

  • 新しいポリシーの作成

    または

  • 既存のポリシーを使用する

ポリシーには 送信 権限が必要です。

ポリシーが決定したら、サービスキーの価値を記録します。 CESを設定する前にSQLで認証情報を作成する際に、ポリシー名とともにこのツールを使っています。

変更イベント ストリーミングを有効にして構成する

Important

2026年8月15日現在、AMQPプロトコルはチェンジイベントストリーミング(CES)のために非推奨となっています。 プラットフォームごとに違いがあります。 移行手順やタイムラインについては、 AMQPプロトコルの廃止を参照してください。

変更イベント ストリーミングを有効にして構成するには、データベース コンテキストをユーザー データベースに変更してから、次の手順に従います。

  1. まだ構成されていない場合は、データベースを 完全復旧モデルに設定します。
  2. マスター キーとデータベース スコープ資格情報を作成します。
  3. イベント ストリーミングを有効にします。
  4. ストリームグループを作成しましょう。
  5. ストリームグループに1つ以上のテーブルを追加します。

以下の例は、プラットフォームごとにCESを有効にする方法を示しています。

以下の表は、この節の例のサンプルパラメータ値を一覧にしています。

Parameter サンプル値 注記
@stream_group_name N'myStreamGroup' イベントストリームグループの名前。
@destination_location 注釈を参照 Azure Event Hubsの名前空間およびインスタンス名のFQDN(ポート9093を含む)です。 形式: <namespace>.servicebus.windows.net:9093/<instance>。 Fabric Eventstreamではカスタム入力エンドポイントを使いましょう。
@partition_key_scheme N'None' (デフォルト) パーティションはラウンドロビンで選択されます。 他の選択肢には StreamGroupTableColumnがあります。
@max_message_size_kb 256 256 KBがデフォルトの最大メッセージサイズです。 この値を目的地の制限に合わせて調整してください。

例では以下の値も使用されています。

  • [サービスキーによる共有アクセスポリシーを使用する場合は任意] 共有アクセスポリシーから取られるプライマリまたはセカンダリーキーの値は以下の通りです: Secret = 'BVFnT3baC/K6I8xNZzio4AeoFt6nHeK0i+ZErNGsxiw='
  • EXEC sys.sp_add_object_to_event_stream_group N'myStreamGroup', N'dbo.myTable'

例:Azure SQL DatabaseからStream to Azure Event Hubs

以下の例は、AzureEventHubsdestination_typeとしてAzure SQL Databaseから変化イベントをAzure Event Hubsにストリーミングする方法を示しています。 この値はAzure SQL DatabaseおよびMicrosoft FabricのSQLデータベースで唯一認められている値です。

このセクションの例ではMicrosoft Entra認証を使用しています。 この方法が最も安全です。

山括弧(<value>)の値をお使いの環境の値に置き換えてください。

USE <database name>;

-- Create the Master Key with a password.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Password>';

CREATE DATABASE SCOPED CREDENTIAL <CredentialName>
    WITH IDENTITY = 'Managed Identity'

EXEC sys.sp_enable_event_stream

EXEC sys.sp_create_event_stream_group
    @stream_group_name =      N'<EventStreamGroupName>',
    @destination_type =       N'AzureEventHubs',
    @destination_location =   N'<AzureEventHubsHostName>:9093/<EventHubsInstance>',
    @destination_credential = <CredentialName>,
    @max_message_size_kb =    <MaxMessageSize>,
    @partition_key_scheme =   N'<PartitionKeyScheme>'

EXEC sys.sp_add_object_to_event_stream_group
    N'<EventStreamGroupName>',
    N'<SchemaName>.<TableName>'

例:Azure SQL MI or SQL Server 2025からStream to Azure Event Hubs

以下の例は、AzureEventHubsApacheKafkadestination_typeとしてを用いて2025年Azure SQL Managed InstanceまたはSQL Server Azure Event Hubsのイベントをストリーミングする方法を示しています。

Important

2026年8月15日現在、AMQPプロトコルはチェンジイベントストリーミング(CES)のために非推奨となっています。 プラットフォームごとに違いがあります。 移行手順やタイムラインについては、 AMQPプロトコルの廃止を参照してください。

このセクションの例では、Microsoft Entra 認証を使用して、Apache Kafka プロトコルを使用して Azure Event Hubs インスタンスに対する認証を行います。 この方法が最も安全です。

山括弧(<value>)の値をお使いの環境の値に置き換えてください。

USE <database name>

-- Create the Master Key with a password.
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<Password>'

CREATE DATABASE SCOPED CREDENTIAL <CredentialName>
    WITH IDENTITY = 'Managed Identity'

EXEC sys.sp_enable_event_stream

EXEC sys.sp_create_event_stream_group
    @stream_group_name =      N'<EventStreamGroupName>',
    @destination_type =       N'AzureEventHubsApacheKafka',
    @destination_location =   N'<AzureEventHubsHostName>:<port>/<EventHubsInstance>', -- myEventHubsNamespace.servicebus.windows.net:9093/myEventHubsInstance
    @destination_credential = <CredentialName>,
    @max_message_size_kb =    <MaxMessageSize>,
    @partition_key_scheme =   N'<PartitionKeyScheme>'

EXEC sys.sp_add_object_to_event_stream_group
    N'<EventStreamGroupName>',
    N'<SchemaName>.<TableName>'

ストリーミングが有効であることやストリームグループに設定されたテーブルを見るには、「 CESの設定と機能を見る」をご覧ください。

メッセージサイズと列切り切り

Azure Event HubsとFabric Eventstreamは、受信する各メッセージの最大サイズを制限しています。 CESは @max_message_size_kb 設定を使って、大きなアウトバウンドイベントを設定済みの宛先に合う複数のメッセージチャンクに分割します。 この値を目的地の制限に合わせて設定してください。 メッセージチャンクを識別するJSON属性については、「 JSON message format - change event streaming」を参照してください。

ストリームされたカラム値が1MBを超える場合、CESは影響を受けた各カラムの値をアウトバウンドイベントになる前に1MBに切り詰めます。 1MBの制限は各列の値に個別に適用されます。 この切り詰めはメッセージ分割とは別のものです。 過大な列の値を切り捨てた後、CESはアウトバウンドイベントを作成し、 @max_message_size_kb必要に応じてチャンクに分割し、各チャンクを宛先に送信します。

CESが有効の場合、 最大テキストリプルサイズ サーバー設定オプションを設定し、LOB列に65,536バイト以上を書き込めるようにしてください。

例えば、行が5列で、最初の3列の値がそれぞれ1MBより大きい場合、CESは以下の通りです。

  1. 最初の列の値を1MBに切り詰めます。
  2. 2列目の値を1MBに切り詰めます。
  3. 3列目の値を1MBに切り詰めます。
  4. アウトバウンドイベントを準備し、 @max_message_size_kbに応じて必要なチャンク数に分割し、各チャンクを宛先に送信します。

カラムデータの切り詰めは無条件です。 CESは1MBを超える各ストリームカラムの値を切り詰め、この切り詰めが発生した際にエラーや警告を記録しません。

CES の構成と機能を表示する

sys.databases では、is_event_stream_enabled = 1はデータベースに対して変更イベント ストリーミングが有効になっていることを示します。

次のクエリは、変更イベント ストリーミングが有効になっているすべてのデータベースを返します。

SELECT *
FROM sys.databases
WHERE is_event_stream_enabled = 1;

sys.tables では、is_replicated = 1はテーブルがストリーミングされていることを示し、sp_help_change_feed_tableは変更イベント ストリーミングのテーブル グループとテーブル メタデータに関する情報を提供します。

次のクエリは、変更イベント ストリーミングが有効になっているすべてのテーブルを返し、メタデータ情報を提供します。

SELECT name,
       is_replicated
FROM sys.tables;

EXECUTE sp_help_change_feed_table
    @source_schema = '<schema name>',
    @source_name = '<table name>';

CES ストアド プロシージャ、システム関数、DMV

次の表に、変更イベント ストリーミングの構成、無効化、監視に使用できるストアド プロシージャ、システム関数、DMV を示します。

システムオブジェクト 説明
CES の構成
sys.sp_enable_event_stream 現在のユーザー データベースに対して CES を有効にします。
sys.sp_create_event_stream_group ストリーム グループを作成します。これは、テーブルのグループのストリーミング構成です。 ストリーム グループは、送信先と関連する詳細 (認証、メッセージ サイズ、パーティション分割など) も定義します。 stream_group_idは、プロシージャの完了時にエンド ユーザーに対して自動的に生成され、表示されます。
sys.sp_add_object_to_event_stream_group ストリーム グループにテーブルを追加します。
CES を無効にする
sys.sp_remove_object_from_event_stream_group ストリーム グループからテーブルを削除します。
sys.sp_drop_event_stream_group ストリーム グループを削除します。 ストリーム グループを使用することはできません。
sys.sp_disable_event_stream 現在のユーザー データベースの CES を無効にします。
CES をモニタリングする
sys.dm_change_feed_errors 配信エラーを返します。
sys.dm_change_feed_log_scan_sessions ログ スキャン アクティビティに関する情報を返します。
sys.sp_help_change_feed_settings 構成された変更イベント ストリーミングの状態と情報を提供します。
sys.sp_help_change_feed 変更ストリームの現在の構成を監視します。
sys.sp_help_change_feed_table_groups 変更イベント ストリーミング グループの構成に使用されるメタデータを返します。
sys.sp_help_change_feed_table 変更イベント ストリーミングのストリーミング グループとテーブル メタデータの状態と情報を提供します。

トランザクション ログの増加

メッセージ配信が保証されるため、CES が有効になっているデータベースのトランザクション ログは引き続き増加する可能性があります。 ログからストリームに CES の変更がある限り、ログは切り捨てられません。 トランザクション ログのサイズが定義された上限に達すると、データベースへの書き込みが失敗します。

Azure SQL Database と Azure SQL Managed Instance でこれを回避するために、トランザクション ログのサイズが定義された上限に近づくと、Microsoft は CES を無効にしたり、実行時間の長いトランザクションを強制終了したりする可能性があります。 オンプレミスや Azure VM 上の SQL Server などの非管理対象 SQL Server インスタンスの場合は、トランザクション ログのサイズを監視し、定義された上限に達していないことを確認し、CES を手動で無効にするか、必要に応じて実行時間の長いトランザクションを強制終了する必要があります。

CES が無効になっているか、実行時間の長いトランザクションが強制終了されると、トランザクション ログが切り捨てられ、領域が解放されます。 CES を無効にした後で手動で再度有効にするか、強制終了された実行時間の長いトランザクションを再試行する必要があります。 CES が無効になっている間に行われたデータ変更はキャプチャされません。 CES の再起動後に行われた変更のみがストリーミングされます。

CES が有効になっているとトランザクション ログの増加につながる可能性がある一般的なシナリオの一覧を次に示します。

  • 永続的なエラー。 CES は繰り返し拒否されたメッセージを送信するために再試行し、CES は続行できません。 メッセージが拒否される可能性がある永続的なエラーの理由は次のとおりです。
    • ネットワークの問題または構成の誤り。
    • 資格情報の構成に誤りがあります。
    • 宛先が拒否するメッセージの最大サイズが正しく構成されていません。
  • 宛先は受信イベントを制限します。 たとえば、Azure Event Hubs の SKU に基づくレート制限です。
  • 大量のログ レコードを生成し、ログの切り捨てを防ぐ実行時間の長いトランザクション。

円滑な操作を確保するには、トランザクション ログと CES 配信エラー のサイズを定期的に監視します。

パフォーマンス

SQL Server、Azure SQL Managed Instance、Azure SQL Database エラスティック プールでは、複数のデータベースで CES を有効にすることができます。 各 CES 対応データベースは、サーバー リソースを消費し、他のサーバー ワークロードと競合します。 サーバーが予想されるワークロードに対して十分なリソースを確保していることを確認し、サーバーとデータベースのパフォーマンスを定期的に監視します。

制限事項

変更イベント ストリーミング (CES) には、次の制限があります。

プラットフォーム固有の制限

UTCタイムゾーンでないSQL製品では、committimeフィールドにZサフィックスが誤って含まれますが、このフィールドは公開データベースのローカル時刻を示しています。 データベースがUTCを使う場合、値と接尾辞は一致します。 この問題は既知のものであり、今後の機能リリースで修正が待っています。

CESの特定のプラットフォームには以下の制限があります:

SQL Server 2025のCESには以下の制限があります:

サーバー レベルと一般的な制限事項

以下のリストは、サーバーレベルおよび一般的な制限について説明します。

  • CES は、Linux 上の SQL Server 2025 (17.x) ではサポートされていません。
  • CES は、 INSERTUPDATE、および DELETE DML ステートメントからのデータ変更に対してのみイベントを出力します。
  • CES はスキーマ変更 (DDL 操作) を処理しません。つまり、DDL 操作のイベントは生成されません。 ただし、DDL 操作はブロックされないため、実行すると、後続の DML イベントのスキーマに更新されたテーブル構造が反映されます。 更新されたスキーマを使用してイベントを適切に処理することが期待されます。
  • 現在、CES は、CES が有効になる前にテーブルに存在するデータをストリーミングしません。 CES が有効になっている場合、既存のデータはシード処理されず、スナップショットとして送信されません。
  • メッセージが Azure Event Hubs のメッセージ サイズの制限を超えた場合、エラーは現在、拡張イベントでのみ監視できます。 現在、CES xEvents は SQL Server 2025 でのみ使用でき、Azure SQL Database では使用できません。
  • CES 用に構成されたテーブルと列の名前変更はサポートされていません。 テーブルまたは列の名前を変更できません。 データベース名の変更 は許可されます
  • CES は、SQL Server 2022 更新ポリシーで構成された Azure SQL Managed Instance では使用できません。 SQL Server 2025 または Always-up-to-date 更新ポリシーで構成されたインスタンスでのみ使用できます。
  • Kafkaプロトコルを使用する場合、CESはSASトークン認証をサポートしていません。 利用可能な認証方法はMicrosoft EntraとShared Accessポリシーのキーバリューのみです。

データベース レベルの制限事項

以下のリストはデータベースレベルの制限について説明します:

  • CES では、完全復旧モデルで構成されたデータベースのみがサポートされます。
  • CES では、SQL Server、トランザクション レプリケーション変更データ キャプチャまたは Azure Synapse Link用に Fabric Mirrored Databases を使用して構成されたデータベースはサポートされていません。 変更の追跡 は、CES で構成されたデータベースでサポートされています。
  • CES は、書き込み可能なプライマリ データベースからのみストリーミングできます。 Always On 可用性グループの一部であるセカンダリ データベース、または Managed Instance リンク を使用するセカンダリ データベースは、ストリーミング ソースとして構成できません。
  • ビューまたはインデックス付きビューで CES を有効にすることはできません。
  • 最大 4,096 個のストリーム グループを構成できます。 各ストリーム グループには、最大 40,000 個のテーブルを含めることができます。

テーブルレベルの制限事項

以下の一覧はテーブルレベルの制限を説明します:

  • テーブルは、1 つのストリーミング グループにのみ属できます。 同じテーブルを複数の宛先にストリーミングすることはできません。
  • CES のユーザー テーブルのみを構成できます。 CES では、ストリーミング システム テーブルはサポートされていません。
  • テーブルで CES が有効になっている間は、そのテーブルに主キー制約を追加または削除することはできません。
  • ピリオド(.)を含むテーブル名は現在サポートされていません。
  • ALTER TABLE SWITCH PARTITION は、CES 用に構成されたテーブルではサポートされていません。
  • TRUNCATE TABLE は、CES が有効になっているテーブルではサポートされていません。
  • CES では、次のいずれかの機能を使用するテーブルはサポートされていません。
    • クラスター化列ストア インデックス
    • テンポラル履歴テーブルまたは台帳履歴テーブル
    • 常に暗号化されています
    • インメモリ OLTP (メモリ最適化テーブル)
    • グラフ表
    • 外部テーブル

Important

オンライン インデックス操作 では、大量のトランザクション ログ レコードが生成される可能性があります。 CES では、処理するデータの量が大幅に増える必要があり、その結果、イベントの待機時間が長くなる可能性があります。

列レベルの制約

以下の一覧は列レベルの制限を説明しています。

  • CES では、次のデータ型はサポートされていません。 ストリーミングでは、次の種類の列がスキップされます。
    • geography
    • geometry
    • image
    • json
    • rowversion / タイムスタンプ
    • sql_variant
    • テキスト / nテキスト
    • vector
    • xml
    • ユーザー定義型 (UDT)
  • ストリームされたカラム値が1MBを超える場合、CESは影響を受けた各カラムの値をアウトバウンドイベントになる前に1MBに切り詰めます。 この短縮は無条件で、エラーや警告を記録しません。 CESが有効の場合、最大 テキストreplサイズ サーバー設定オプションを設定し、LOB列に65,536バイト以上を書き込めるようにしてください。

ソースデータベースのアクセス許可とデータレジデンシー

以下のリストは、権限およびデータ居住制限について説明します。

  • 行レベルのセキュリティの場合、CES はユーザーのアクセス許可に関係なく、すべての行から変更を出力します。
  • 動的データ マスクは、CES 経由で送信されるデータには適用されません。 マスクが構成されている場合でも、データはマスクされていない状態でストリーミングされます。
  • CES は、オブジェクト レベルのアクセス許可の変更 (たとえば、特定の列へのアクセス許可の付与) に関連するイベントを出力しません。
  • CES は、ネットワーク構成で許可されている場合に、構成された宛先にデータをストリーミングします。 宛先が別のリージョンにある場合、CES はリージョン間でデータをストリーミングします。 これがデータ所在地とコンプライアンス要件に準拠していることを確認します。

ネットワークと接続性

以下のリストはネットワークおよび接続性の制限を示しています:

  • 現在、CES は Azure Event Hubs パブリック エンドポイントにのみストリーミングできます。 サービス エンドポイントとプライベート エンドポイントは現在サポートされていません。
  • Azure SQL Managed Instance または SQL Server 2025(まだ移行されていない既存ストリームグループの場合)でAMQPプロトコルを使用する場合、Azure Event HubsのTLS最低バージョン設定オプションを1.2に設定してください。 CESはAMQPプロトコル上のTLS 1.3では動作しません。