Configure change event streaming (preview) to Azure Event Hubs

Gilt für: SQL Server 2025 (17.x) Azure SQL-DatenbankAzure SQL Managed InstanceSQL-Datenbank in Microsoft Fabric

Dieser Artikel beschreibt, wie man die Change Event Streaming (CES)-Funktion in SQL Server 2025 (17.x), Azure SQL-Datenbank, Azure SQL Managed Instance und SQL Database in Microsoft Fabric konfigurieren kann, um zu streamen Azure Event Hubs.

Um CES zu Fabric Eventstream zu konfigurieren, siehe Stream to Fabric Eventstream.

Hinweis

Das Change Event Streaming befindet sich derzeit in der Vorschau und weist Unterschiede in der Unterstützbarkeit zwischen den Produkten auf. Während der Vorschau kann dieses Feature geändert werden.

Verfahren für das Streaming von Änderungsereignissen

  1. Verwenden Sie einen vorhandenen oder erstellen Sie eine neue Azure Event Hubs-Namespace - und Event Hubs-Instanz. Die Event Hubs-Instanz empfängt Ereignisse.
  2. Aktivieren Sie das Streaming von Änderungsereignissen für eine Benutzerdatenbank.
  3. Erstelle eine Stream-Gruppe. Konfigurieren Sie mit dieser Gruppe das Ziel, die Anmeldeinformationen, die Größenbeschränkungen für Nachrichten und das Partitionierungsschema.
  4. Füge eine oder mehrere Tabellen zur Stream-Gruppe hinzu.

Jeder Schritt wird in den folgenden Abschnitten dieses Artikels ausführlich beschrieben.

Voraussetzungen

Von Bedeutung

Ab dem 15. August 2026 ist das AMQP-Protokoll für Change Event Streaming (CES) veraltet. Alle neu erstellten Stream-Gruppen müssen als To-Stream destination_type mit dem Apache-Kafka-Protokoll verwendet AzureEventHubs werden. Für Migrationsschritte und Zeitpläne siehe AMQP-Protokoll-Deprecation.

Zum Konfigurieren des Änderungsereignisstreamings benötigen Sie die folgenden Ressourcen, Berechtigungen und Konfigurationen:

Bei Verwendung des Änderungsereignisstreamings mit Azure SQL Managed Instance muss die Instanz mit der Aktualisierungspolitik von SQL Server 2025 oder der Always-up-to-date-Aktualisierungsrichtlinie konfiguriert werden.

Konfigurieren von Azure Event Hubs

Um zu erfahren, wie man Azure Event Hubs erstellt, lesen Sie Erstellen eines Event Hubs mithilfe des Azure-Portals.

Zugriffssteuerung für Azure Event Hubs

Konfigurieren Sie die Zugriffssteuerung für Ihre SQL-Ressource in Azure Event Hubs. Microsoft Entra Authentifizierung ist die sicherste Methode. CES unterstützt Microsoft Entra-Authentifizierung in Azure SQL-Datenbank und Azure SQL Managed Instance. Für SQL Server 2025 wird die Microsoft Entra-Authentifizierung ab Cumulative Update 3 (CU3) für Instanzen unterstützt, die durch Azure Arc aktiviert sind oder auf einer Azure-VM laufen. Richtlinien für den gemeinsamen Zugriff werden zwar unterstützt, aber verwenden Sie sie nur, wenn eine Microsoft Entra-Authentifizierung keine Option ist.

Richtlinien für den freigegebenen Zugriff bieten Authentifizierung und Autorisierung für Azure Event Hubs. Jede Richtlinie für den freigegebenen Zugriff benötigt einen Namen, eine Zugriffsstufe (Manage, Sendoder Listen) und eine Ressourcenbindung (Event Hubs-Namespace oder eine bestimmte Event Hub-Instanz). Richtlinien auf Instanzebene bieten mehr Sicherheit, indem sie dem Prinzip der geringsten Berechtigungen folgen. Während SQL Datenbank-Engine-Produkte Shared-Access-Richtlinien unterstützen, sollten Sie wann immer möglich Microsoft Entra-Authentifizierung verwenden, da dies eine bessere Sicherheit bietet.

Wenn Sie eine Shared-Access-Richtlinie für Authentifizierung und Autorisierung verwenden, müssen Clients, die Daten an eine Event Hubs-Instanz senden, den Namen der gewünschten Richtlinie sowie entweder ein SAS-Token angeben, das aus der Richtlinie oder deren Service-Schlüssel generiert wird.

SAS-Token haben einen Sicherheitsvorteil gegenüber Dienstschlüsseln: Wenn der Client kompromittiert ist, ist das SAS-Token nur gültig, bis es abläuft, und der kompromittierte Client kann keine neuen SAS-Token erstellen. Im Gegensatz dazu laufen Dienstschlüssel nicht automatisch ab. Ein kompromittierter Client mit einem Dienstschlüssel kann neue SAS-Token mithilfe des Schlüssels generieren.

Um das Streaming zu Azure Event Hubs mit dem AMQP-Protokoll zu konfigurieren, erstellen oder wiederverwenden Sie eine Shared Access Policy mit Send-Berechtigung und generieren Sie ein SAS-Token. Sie können das Token programmgesteuert mit jeder Programmier- oder Skriptsprache generieren. Das Beispiel in diesem Artikel zeigt, wie Sie ein SAS-Token aus einer neuen oder vorhandenen Richtlinie mithilfe eines PowerShell-Skripts generieren.

Hinweis

Um die Sicherheit zu verbessern, verwenden Sie nach Möglichkeit die microsoft Entra-basierte Zugriffssteuerung. Wenn die Microsoft Entra-basierte Zugriffssteuerung nicht möglich ist und Sie freigegebene Zugriffsrichtlinien verwenden, verwenden Sie die SAS-Tokenauthentifizierung anstelle der diensteschlüsselbasierten Authentifizierung, wenn möglich. Bewährte Methoden für SAS-Token umfassen das Definieren eines geeigneten minimal erforderlichen Zugriffsbereichs, das Festlegen eines kurzen Ablaufdatums und das regelmäßige Drehen des SAS-Schlüssels. Bei der schlüsselbasierten Authentifizierung drehen Sie die Schlüssel regelmäßig. Speichern Sie alle geheimen Schlüssel sicher mithilfe von Azure Key Vault oder einem ähnlichen Dienst.

Installieren der erforderlichen Module

Zum Verwalten von Azure Event Hubs-Ressourcen mit PowerShell-Skripts benötigen Sie die folgenden Module:

  • Az PowerShell-Modul
  • Az.EventHub PowerShell-Modul

Das folgende Skript installiert die erforderlichen Module:

Install-Module -Name Az -AllowClobber -Scope CurrentUser -Repository PSGallery -Force
Install-Module -Name Az.EventHub -Scope CurrentUser -Force

Wenn Sie bereits über die erforderlichen Module verfügen und diese auf die neueste Version aktualisieren möchten, führen Sie das folgende Skript aus:

Update-Module -Name Az -Force
Update-Module -Name Az.EventHub -Force

Herstellen einer Verbindung mit Azure

Sie können Entweder Azure Cloud Shell verwenden oder sich anmelden und Ihren Abonnementkontext festlegen.

Um Azure Cloud Shell zu nutzen, sehen Sie sich bitte die Anmeldung bei Azure an.

Definieren einer Richtlinie

Zum Erstellen des SAS-Tokens benötigen Sie eine Richtlinie mit Senderechten . Sie haben folgende Möglichkeiten:

  • Erstellen einer neuen Richtlinie

    oder

  • Verwenden einer vorhandenen Richtlinie

Hinweis

Die Richtlinie muss über Senderechte verfügen.

Erstellen eines SAS-Tokens für eine neue oder vorhandene Richtlinie

Wenn Sie eine neue Richtlinie erstellen, stellen Sie sicher, dass sie über das Recht Senden verfügt. Wenn Sie eine vorhandene Richtlinie verwenden, überprüfen Sie, ob sie das Recht "Senden" besitzt.

Das folgende Skript erstellt eine neue Richtlinie oder ruft eine vorhandene Richtlinie ab, generiert dann ein vollständiges SAS-Token in einem HTTP-Autorisierungsheaderformat.

Ersetzen Sie Werte in spitzen Klammern (<value>) durch Werte für Ihre Umgebung.

function Generate-SasToken {
$subscriptionId = "<Azure-Subscription-ID>"
$resourceGroupName = "<Resource-group-name>"
$namespaceName = "<Azure-Event-Hub-Namespace-name>"
$eventHubName = "<Azure-Event-Hubs-instance-name>"
$policyName = "<Policy-name>"
$tokenExpireInDays = "<number-of-days-token-will-be-valid>"

# Modifying the rest of the script is not necessary.

# Login to Azure and set Azure Subscription.
Connect-AzAccount

# Get current context and check subscription
$currentContext = Get-AzContext
if ($currentContext.Subscription.Id -ne $subscriptionId) {
    Write-Host "Current subscription is $($currentContext.Subscription.Id), switching to $subscriptionId..."
    Set-AzContext -SubscriptionId $subscriptionId | Out-Null
} else {
    Write-Host "Already using subscription $subscriptionId."
}

# Try to get the authorization policy (it should have Send rights)
$rights = @("Send")
$policy = Get-AzEventHubAuthorizationRule -ResourceGroupName $resourceGroupName -NamespaceName $namespaceName -EventHubName $eventHubName -AuthorizationRuleName $policyName -ErrorAction SilentlyContinue

# If the policy does not exist, create it
if (-not $policy) {
    Write-Output "Policy '$policyName' does not exist. Creating it now..."

    # Create a new policy with the Manage, Send and Listen rights
    $policy = New-AzEventHubAuthorizationRule -ResourceGroupName $resourceGroupName -NamespaceName $namespaceName -EventHubName $eventHubName -AuthorizationRuleName $policyName -Rights $rights
    if (-not $policy) {
        throw "Error. Policy was not created."
    }
    Write-Output "Policy '$policyName' created successfully."
} else {
    Write-Output "Policy '$policyName' already exists."
}

if ("Send" -in $policy.Rights) {
    Write-Host "Authorization rule has required right: Send."
} else {
    throw "Authorization rule is missing Send right."
}

$keys = Get-AzEventHubKey -ResourceGroupName $resourceGroupName -NamespaceName $namespaceName -EventHubName $eventHubName -AuthorizationRuleName $policyName

if (-not $keys) {
    throw "Could not obtain Azure Event Hub Key. Script failed and will end now."
}
if (-not $keys.PrimaryKey) {
    throw "Could not obtain Primary Key. Script failed and will end now."
}

# Get the Primary Key of the Shared Access Policy
$primaryKey = ($keys.PrimaryKey)
Write-Host $primaryKey

## Check that the primary key is not empty.

# Define a function to create a SAS token (similar to the C# code provided)
function Create-SasToken {
    param (
        [string]$resourceUri, [string]$keyName, [string]$key
    )

$sinceEpoch = [datetime]::UtcNow - [datetime]"1970-01-01"
    $expiry = [int]$sinceEpoch.TotalSeconds + ((60 * 60 * 24) * [int]$tokenExpireInDays) # seconds since Unix epoch
    $stringToSign = [System.Web.HttpUtility]::UrlEncode($resourceUri) + "`n" + $expiry
    $hmac = New-Object System.Security.Cryptography.HMACSHA256
    $hmac.Key = [Text.Encoding]::UTF8.GetBytes($key)
    $signature = [Convert]::ToBase64String($hmac.ComputeHash([Text.Encoding]::UTF8.GetBytes($stringToSign)))
    $sasToken = "SharedAccessSignature sr=$([System.Web.HttpUtility]::UrlEncode($resourceUri))&sig=$([System.Web.HttpUtility]::UrlEncode($signature))&se=$expiry&skn=$keyName"
    return $sasToken
}

# Construct the resource URI for the SAS token
$resourceUri = "https://$namespaceName.servicebus.windows.net/$eventHubName"

# Generate the SAS token using the primary key from the new policy
$sasToken = Create-SasToken -resourceUri $resourceUri -keyName $policyName -key $primaryKey

# Output the SAS token
Write-Output @"
-- Generated SAS Token --
$sasToken
-- End of generated SAS Token --
"@
}

Generate-SasToken

Die Ausgabe des vorherigen Befehls sollte wie der folgende Text aussehen:

-- Generated SAS Token --
SharedAccessSignature sr=https%3a%2f%YourEventHubNamespace.servicebus.windows.net%2fYourEventHub&sig=xxxxxxxxxxxxxxxxxxxxxxx&se=2059133074&skn=SharedKeyNameIsHERE
-- End of generated SAS Token --

Kopieren Sie den gesamten SAS-Tokenwert (die Zeile, die mit SharedAccessSignature) beginnt, um ihn später zu verwenden, wenn Sie CES konfigurieren, z. B. das folgende Beispiel:

SharedAccessSignature sr=https%3a%2f%YourEventHubNamespace.servicebus.windows.net%2fYourEventHub&sig=xxxxxxxxxxxxxxxxxxxxxxx&se=2059133074&skn=SharedKeyNameIsHERE

Change Event Streaming aktivieren und konfigurieren

Um das Streaming von Änderungsereignissen zu aktivieren und zu konfigurieren, ändern Sie den Datenbankkontext in die Benutzerdatenbank, und führen Sie dann die folgenden Schritte aus:

  1. Wenn sie noch nicht konfiguriert ist, legen Sie die Datenbank auf das vollständige Wiederherstellungsmodell fest.
  2. Erstellen Sie einen Hauptschlüssel und eine datenbankabhängige Berechtigung.
  3. Aktivieren des Ereignisstreamings.
  4. Erstellen Sie die Stream-Gruppe.
  5. Füge eine oder mehrere Tabellen zur Stream-Gruppe hinzu.

Die Beispiele in diesem Abschnitt veranschaulichen, wie SIE CES für das AMQP-Protokoll und das Apache Kafka-Protokoll aktivieren:

Die folgende Tabelle listet Beispielparameterwerte für die Beispiele in diesem Abschnitt auf:

Parameter Beispielwert Hinweise
@stream_group_name N'myStreamGroup' Name der Event-Stream-Gruppe.
@destination_location N'myEventHubsNamespace.servicebus.windows.net/myEventHubsInstance' Für Azure Event Hubs gilt das FQDN des spezifischen Azure Event Hubs-Namensraums und des Instanznamens. Für Fabric Eventstream verwenden Sie den benutzerdefinierten Eingangspunkt Fabric Eventstream. Um den Endpunkt zu finden, siehe Stream SQL Change Events to Fabric Eventstream.
@partition_key_scheme N'None' (Standard) Partitionen werden nach dem Round-Robin-Verfahren ausgewählt. Weitere Optionen sind StreamGroup (Partitionierung nach Stream-Gruppe), Table (Partitionierung nach Tabelle) und Column (Partitionierung nach Spalten).
@max_message_size_kb 256 256 KB ist die standardmäßige maximale Nachrichtengröße. Richten Sie diesen Wert auf die Grenzen der Ziel-Azure Event Hubs aus.

Die Beispiele verwenden außerdem folgende Werte:

  • [optional, falls Shared Access Richtlinien über Service Key verwendet werden] Primär- oder Sekundärschlüsselwert, der aus der Shared-Access-Richtlinie übernommen wurde: Secret = 'BVFnT3baC/K6I8xNZzio4AeoFt6nHeK0i+ZErNGsxiw='
  • EXEC sys.sp_add_object_to_event_stream_group N'myStreamGroup', N'dbo.myTable'

Beispiel: Streamen zu Azure Event Hubs über das AMQP-Protokoll

Von Bedeutung

Ab dem 15. August 2026 ist das AMQP-Protokoll für Change Event Streaming (CES) veraltet. Alle neu erstellten Stream-Gruppen müssen als To-Stream destination_type mit dem Apache-Kafka-Protokoll verwendet AzureEventHubs werden. Für Migrationsschritte und Zeitpläne siehe AMQP-Protokoll-Deprecation.

Die Beispiele in diesem Abschnitt zeigen, wie Sie Änderungsereignisse mithilfe des AMQP-Protokolls in Azure Event Hubs streamen.

Im Beispiel in diesem Abschnitt wird ein SAS-Token verwendet, um sich über das AMQP-Protokoll bei Ihrer Azure Event Hubs-Instanz zu authentifizieren. Wenn die Microsoft Entra-Authentifizierung nicht verfügbar ist, verwenden Sie ein SAS-Token anstelle eines Dienstschlüsselwerts für verbesserte Sicherheit.

Ersetzen Sie Werte in spitzen Klammern (<value>) durch Werte für Ihre Umgebung.

USE <database name>;

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

CREATE DATABASE SCOPED CREDENTIAL <CredentialName>
    WITH IDENTITY = 'SHARED ACCESS SIGNATURE',
    SECRET = '<Generated SAS Token>' -- Be sure to copy the entire token. The SAS token starts with "SharedAccessSignature sr="

EXEC sys.sp_enable_event_stream

EXEC sys.sp_create_event_stream_group
    @stream_group_name =      N'<EventStreamGroupName>',
    @destination_type =       N'AzureEventHubsAmqp',
    @destination_location =   N'<AzureEventHubsHostName>/<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>'

Beispiel: Stream zu Azure Event Hubs über das Apache Kafka-Protokoll

Die Beispiele in diesem Abschnitt zeigen, wie Sie Änderungsereignisse mithilfe des Apache Kafka-Protokolls an Azure Event Hubs streamen.

Im Beispiel in diesem Abschnitt wird die Microsoft Entra-Authentifizierung verwendet, um sich über das Apache Kafka-Protokoll bei Ihrer Azure Event Hubs-Instanz zu authentifizieren. Diese Methode ist am sichersten.

Ersetzen Sie die Werte in eckigen Klammern (<value>) durch Werte für Ihre Umgebung.

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>'

Um zu bestätigen, dass das Streaming aktiviert ist und um die für eine Stream-Gruppe konfigurierten Tabellen anzuzeigen, siehe View CES configuration and function.

Nachrichtengröße und Spaltenkürzung

Azure Event Hubs und Fabric Eventstream begrenzen die maximale Größe jeder erhaltenen Nachricht. CES nutzt die Einstellung @max_message_size_kb , um ein großes ausgehendes Ereignis in mehrere Nachrichtenabschnitte zu unterteilen, die zum konfigurierten Ziel passen. Stellen Sie diesen Wert so ein, dass er mit den Grenzen Ihres Ziels übereinstimmt. Für die JSON-Attribute, die Nachrichtenchunks identifizieren, siehe JSON-Nachrichtenformat – Change Event Streaming.

Wenn eine oder mehrere gestreamte Spaltenwerte größer als 1 MB sind, verkürzt CES jeden betroffenen Spaltenwert auf 1 MB, bevor das ausgehende Ereignis entsteht. Das 1-MB-Limit gilt für jeden Spaltenwert separat. Diese Abschneidung ist getrennt von der Nachrichtenaufteilung. Nach dem Kürzen übergroßer Spaltenwerte erstellt CES das ausgehende Ereignis, teilt es bei Bedarf gemäß @max_message_size_kb in Blöcke auf und sendet jeden Block an das Ziel.

Stellen Sie die Serverkonfigurationsoption max text repl size so ein, dass bei aktiviertem CES mehr als 65.536 Bytes in LOB-Spalten geschrieben werden können.

Zum Beispiel, wenn eine Zeile fünf Spalten hat und die ersten drei Spaltenwerte jeweils größer als 1 MB sind, gilt CES:

  1. Kürzt den Wert der ersten Spalte auf 1 MB.
  2. Kürzt den Wert der zweiten Spalte auf 1 MB.
  3. Kürzt den Wert der dritten Spalte auf 1 MB.
  4. Bereitet das ausgehende Ereignis vor, teilt es entsprechend in die erforderliche Anzahl von Chunks @max_message_size_kbauf und sendet jedes Chunk an das Ziel.

Hinweis

Die Abkürzung von Spaltendaten ist bedingungslos. CES kürzt jeden gestreamten Spaltenwert, der größer als 1 MB ist, und protokolliert keine Fehler oder Warnungen, wenn diese Abschneidung auftritt.

CES-Konfiguration und -Funktion anzeigen

Gibt in sys.databases an, is_event_stream_enabled = 1 dass das Streaming von Änderungsereignissen für die Datenbank aktiviert ist.

Die folgende Abfrage gibt alle Datenbanken mit aktivierter Änderungsereignisstreaming zurück:

SELECT *
FROM sys.databases
WHERE is_event_stream_enabled = 1;

In sys.tables gibt an, is_replicated = 1 dass eine Tabelle gestreamt wird, und sp_help_change_feed_table Informationen zu den Tabellengruppen- und Tabellenmetadaten für das Streaming von Änderungsereignissen bereitstellt.

Die folgende Abfrage gibt alle Tabellen mit aktivierter Änderungsereignisstreaming zurück und stellt Metadateninformationen bereit:

SELECT name,
       is_replicated
FROM sys.tables;

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

CES-gespeicherte Prozeduren, Systemfunktionen und DMVs

In der folgenden Tabelle sind die gespeicherten Prozeduren, Systemfunktionen und DMVs aufgeführt, die Sie zum Konfigurieren, Deaktivieren und Überwachen des Änderungsereignisstreamings verwenden können:

Systemobjekt BESCHREIBUNG
Konfigurieren der CES
sys.sp_enable_event_stream Aktiviert CES für die aktuelle Benutzerdatenbank.
sys.sp_create_event_stream_group Erstellt eine Datenstromgruppe, bei der es sich um eine Streamingkonfiguration für eine Gruppe von Tabellen handelt. Die Datenstromgruppe definiert auch das Ziel und die zugehörigen Details (z. B. Authentifizierung, Nachrichtengröße, Partitionierung). Die stream_group_id wird automatisch generiert und für den Endbenutzer angezeigt, wenn die Prozedur abgeschlossen ist.
sys.sp_add_object_to_event_stream_group Fügt der Datenstromgruppe eine Tabelle hinzu.
CES deaktivieren
sys.sp_remove_object_from_event_stream_group Entfernt eine Tabelle aus der Datenstromgruppe.
sys.sp_drop_event_stream_group Löscht die Streamgruppe. Die Streamgruppe darf nicht verwendet werden.
sys.sp_disable_event_stream Deaktiviert CES für die aktuelle Benutzerdatenbank.
Überwachung von CES
sys.dm_change_feed_errors Gibt Übermittlungsfehler zurück.
sys.dm_change_feed_log_scan_sessions Gibt Informationen zur Protokoll-Scan-Aktivität zurück.
sys.sp_help_change_feed_settings Stellt den Status und die Informationen des konfigurierten Änderungsereignisstreamings bereit.
sys.sp_help_change_feed Überwacht die aktuelle Konfiguration des Änderungsdatenstroms.
sys.sp_help_change_feed_table_groups Gibt Metadaten zurück, die zum Konfigurieren von Change Event Streaming-Gruppen verwendet werden.
sys.sp_help_change_feed_table Stellt den Status und die Informationen der Streaminggruppe sowie Tabellenmetadaten für das Change Event Streaming bereit.

Transaktionsprotokollwachstum

Da die Nachrichtenübermittlung garantiert ist, kann das Transaktionsprotokoll für eine Datenbank, für die CES aktiviert ist, weiter wachsen. Die Protokollkürzung wird verhindert, solange CES-Änderungen zum Streamen aus dem Protokoll vorliegen. Sobald die Größe des Transaktionsprotokolls den maximal definierten Grenzwert erreicht hat, schlagen Schreibvorgänge in die Datenbank fehl.

Um dies in der Azure SQL-Datenbank und in der verwalteten Azure SQL-Instanz zu verhindern, kann Microsoft, wenn die Größe des Transaktionsprotokolls dem maximal definierten Grenzwert entspricht, die CES deaktivieren oder transaktionen mit langer Ausführung beenden. Bei nicht verwalteten SQL Server-Instanzen wie lokal oder auf SQL Server auf Azure-VMs sind Sie für die Überwachung der Transaktionsprotokollgröße verantwortlich und stellen sicher, dass sie nicht den maximalen definierten Grenzwert erreicht und bei Bedarf CES deaktiviert oder lange ausgeführte Transaktionen manuell beendet werden.

Sobald CES deaktiviert ist oder eine lange ausgeführte Transaktion abgebrochen wird, wird das Transaktionsprotokoll abgeschnitten, um Speicherplatz freizugeben. Sie müssen CES manuell aktivieren, nachdem es deaktiviert wurde, oder alle zeitintensiven Transaktionen, die abgebrochen wurden, erneut versuchen. Datenänderungen, die vorgenommen wurden, während CES deaktiviert wurde, werden nicht erfasst. Nur Änderungen, die nach dem Neustart der CES vorgenommen wurden, werden gestreamt.

Nachfolgend finden Sie eine Liste typischer Szenarien, die zu Transaktionsprotokollwachstum mit aktivierter CES führen können:

  • Persistente Fehler. CES versucht erneut, eine Nachricht zu senden, die wiederholt abgelehnt wird, sodass CES mit dem Senden nicht fortfahren kann. Gründe für dauerhafte Fehler, die zu abgelehnten Nachrichten führen können, sind:
    • Netzwerkprobleme oder Fehlkonfigurationen.
    • Falsch konfigurierte Anmeldeinformationen.
    • Falsch konfigurierte maximale Nachrichtengröße, die das Ziel ablehnt.
  • Das Ziel drosselt die eingehenden Ereignisse. Zum Beispiel bewerten Azure Event Hubs Grenzwerte basierend auf ihrer SKU.
  • Lang andauernde Transaktionen, die viele Protokolldatensätze generieren und das Kürzen der Protokolle verhindern.

Um einen reibungslosen Betrieb sicherzustellen, überwachen Sie die Größe des Transaktionsprotokolls und der CES-Übermittlungsfehler regelmäßig.

Leistung

Auf SQL Server, azure SQL Managed Instance und Azure SQL-Datenbank elastic pools können Sie CES für mehrere Datenbanken aktivieren. Jede CES-fähige Datenbank verbraucht Serverressourcen und konkurriert mit anderen Serverarbeitsauslastungen. Stellen Sie sicher, dass Ihr Server für die erwartete Arbeitsauslastung angemessen ressourcengerecht ist, und überwachen Sie regelmäßig die Leistung Ihres Servers und Ihrer Datenbanken.

Einschränkungen

Change Event Streaming (CES) hat die folgenden Einschränkungen:

Plattformspezifische Einschränkungen

Die folgenden Einschränkungen gelten für spezifische Plattformen für CES:

CES in SQL Server 2025 hat folgende Einschränkungen:

Serverebene und allgemeine Einschränkungen

Die folgende Liste beschreibt Serverebene und allgemeine Einschränkungen:

  • CES wird unter Linux unter SQL Server 2025 (17.x) nicht unterstützt.
  • CES gibt Ereignisse nur für Datenänderungen aus INSERT, UPDATEund DELETE DML-Anweisungen aus.
  • CES behandelt keine Schemaänderungen (DDL-Vorgänge), was bedeutet, dass keine Ereignisse für DDL-Vorgänge ausgegeben werden. DDL-Vorgänge werden jedoch nicht blockiert. Wenn Sie sie ausführen, spiegelt das Schema der nachfolgenden DML-Ereignisse die aktualisierte Tabellenstruktur wider. Es wird erwartet, dass Sie Ereignisse mit dem aktualisierten Schema reibungslos und elegant behandeln.
  • Derzeit streamt CES keine Daten, die in einer Tabelle vorhanden sind, bevor CES aktiviert ist. Vorhandene Daten werden nicht vorab geladen oder als Momentaufnahme gesendet, wenn CES aktiviert ist.
  • Wenn eine Nachricht den Grenzwert für die Nachrichtengröße von Azure Event Hubs überschreitet, ist der Fehler derzeit nur über erweiterte Ereignisse feststellbar. CES xEvents sind derzeit nur in SQL Server 2025 und nicht in der Azure SQL-Datenbank verfügbar.
  • Das Umbenennen von Tabellen und Spalten, die für CES konfiguriert sind, wird nicht unterstützt. Das Umbenennen einer Tabelle oder Spalte schlägt fehl. Datenbankbenennungen sind zulässig.
  • CES ist nicht für azure SQL Managed Instance verfügbar, die mit der SQL Server 2022-Updaterichtlinie konfiguriert ist. Es ist nur für Instanzen verfügbar, die mit der SQL Server 2025- oder Always up-to-date-Aktualisierungsrichtlinie konfiguriert sind.
  • Bei Verwendung des Kafka-Protokolls unterstützt CES keine SAS-Token-Authentifizierung. Die einzigen verfügbaren Authentifizierungsmethoden sind Microsoft Entra und Shared Access Policy Key Value.

Einschränkungen auf Datenbankebene

Die folgende Liste beschreibt die Einschränkungen auf Datenbankebene:

Einschränkungen auf Tabellenebene

Die folgende Liste beschreibt Einschränkungen auf Tabellenebene:

  • Eine Tabelle kann nur zu einer Streaminggruppe gehören. Sie können dieselbe Tabelle nicht zu mehreren Zielen streamen.
  • Sie können benutzertabellen nur für CES konfigurieren. CES unterstützt keine Streamingsystemtabellen.
  • Sie können bis zu 4.096 Datenstromgruppen konfigurieren. Jede Datenstromgruppe kann bis zu 40.000 Tabellen enthalten.
  • Während CES für eine Tabelle aktiviert ist, können Sie dieser Tabelle keine Primärschlüsseleinschränkung hinzufügen oder ablegen.
  • ALTER TABLE SWITCH PARTITION wird für Tabellen, die für CES konfiguriert sind, nicht unterstützt.
  • TRUNCATE TABLE wird für Tabellen, die für CES aktiviert sind, nicht unterstützt.
  • CES unterstützt keine Tabellen, die eines der folgenden Features verwenden:
    • Gruppierte Columnstore-Indizes
    • Zeitliche Verlaufstabellen oder Sachbuchverlaufstabellen
    • Immer Verschlüsselt
    • In-Memory OLTP (speicheroptimierte Tabellen)
    • Diagrammtabellen
    • Externe Tabellen

Von Bedeutung

Onlineindexvorgänge können erhebliche Mengen an Transaktionsprotokolldatensätzen generieren. CES muss deutlich mehr Daten verarbeiten, was zu einer erhöhten Ereignislatenz führen kann.

Einschränkungen auf Spaltenebene

Die folgende Liste beschreibt Einschränkungen auf Spaltenebene:

  • CES unterstützt die folgenden Datentypen nicht. Streaming überspringt Spalten dieser Typen:
    • geography
    • geometry
    • image
    • json
    • rowversion / Zeitstempel
    • sql_variant
    • Text / ntext
    • vector
    • xml
    • Benutzerdefinierte Typen (UDT)
  • Wenn eine oder mehrere gestreamte Spaltenwerte größer als 1 MB sind, verkürzt CES jeden betroffenen Spaltenwert auf 1 MB, bevor das ausgehende Ereignis entsteht. Diese Abkürzung ist bedingungslos und protokolliert keine Fehler oder Warnungen. Konfigurieren Sie die Konfigurationsoption für die maximale Textrepl-Servergröße so, dass mehr als 65.536 Bytes in LOB-Spalten geschrieben werden können, wenn CES aktiviert ist.

Berechtigungen in der Quelldatenbank und Datenresidenz

Die folgende Liste beschreibt Berechtigungen und Einschränkungen bei der Datenresidenz:

  • Für die Sicherheit auf Zeilenebene gibt CES Änderungen von allen Zeilen unabhängig von den Benutzerberechtigungen aus.
  • Die dynamische Datenmaskierung gilt nicht für Daten, die über CES gesendet werden. Daten werden ungemasket gestreamt, auch wenn die Maskierung konfiguriert ist.
  • CES gibt keine Ereignisse aus, die sich auf Berechtigungsänderungen auf Objektebene beziehen (z. B. das Erteilen von Berechtigungen für bestimmte Spalten).
  • CES streamt Daten an das konfigurierte Ziel, wenn die Netzwerkkonfiguration dies zulässt. Wenn sich das Ziel in einer anderen Region befindet, streamt CES die Daten über Regionen hinweg. Stellen Sie sicher, dass dies Ihren Anforderungen an die Datenspeicherung und Konformität entspricht.

Netzwerk und Konnektivität

Die folgende Liste beschreibt eine Netzwerk- und Konnektivitätsbeschränkung:

  • Derzeit kann CES nur auf öffentliche Azure Event Hubs-Endpunkte streamen. Dienstendpunkte und private Endpunkte werden derzeit nicht unterstützt.
  • Wenn Sie das AMQP-Protokoll verwenden, setzen Sie die Konfigurationsoption der Azure Event Hubs Minimum TLS-Version auf 1.2. CES unterstützt AMQP nicht, wenn diese Option auf 1.3 gesetzt ist.