Configurer la diffusion en continu des événements de modification (préversion) vers Azure Event Hubs

S'applique à : SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceBase de données SQL dans Microsoft Fabric

Cet article explique comment configurer la fonctionnalité de flux d’événements de changement (CES) dans SQL Server 2025 (17.x), Azure SQL Database, Azure SQL Managed Instance et SQL database dans Microsoft Fabric pour diffuser vers Azure Event Hubs.

Pour configurer le CES de manière à diffuser vers Fabric Eventstream, consultez Diffuser vers Fabric Eventstream.

Remarque

Le streaming des événements de changement est actuellement en aperçu, et présente des différences de supportabilité selon les produits. Pendant la préversion, cette fonctionnalité est susceptible de changer.

Procédure pour le streaming d’événements de changement

  1. Utilisez un espace de noms Azure Event Hubs existant ou créez une instance Event Hubs. L’instance Event Hubs reçoit des événements.
  2. Activez le streaming d’événements de modification pour une base de données utilisateur.
  3. Créez un groupe de stream. Avec ce groupe, configurez la destination, les informations d’identification, les limites de taille des messages et le schéma de partitionnement.
  4. Ajoutez une ou plusieurs tables au groupe de flux.

Chaque étape est décrite en détail dans les sections suivantes de cet article.

Conditions préalables

Important

Depuis le 15 août 2026, le protocole AMQP est obsolété pour le flux d’événements de changement (CES). Il y a des différences entre les plateformes. Pour les étapes de migration et les échéances, consultez dépréciation du protocole AMQP.

Pour configurer la diffusion en continu des événements, vous avez besoin des ressources, des autorisations et de la configuration suivantes :

Lors de l’utilisation du streaming d’événements de modification avec Azure SQL Managed Instance, l’instance doit être configurée avec la stratégie de mise à jour sql Server 2025 ou Always-up-to-date.

Configurer Azure Event Hubs

Pour savoir comment créer Azure Event Hubs, consultez Créer un hub d’événements à l’aide du portail Azure.

Contrôle d’accès Azure Event Hubs

Configurez le contrôle d’accès pour votre ressource SQL sur Azure Event Hubs. L’authentification Microsoft Entra est la méthode la plus sûre. CES prend en compte l’authentification Microsoft Entra dans Azure SQL Database et Azure SQL Managed Instance. Pour SQL Server 2025, l’authentification Microsoft Entra est prise en charge à partir de Cumulative Update 3 (CU3) pour les instances activées par Azure Arc ou fonctionnant sur une VM Azure. Bien que les stratégies d'accès partagé soient prises en charge, utilisez-les uniquement quand Microsoft Entra'authentification n'est pas une option.

Les stratégies d’accès partagé fournissent l’authentification et l’autorisation à Azure Event Hubs. Chaque stratégie d’accès partagé a besoin d’un nom, d’un niveau d’accès (ManageouSendListen) et d’une liaison de ressources (espace de noms Event Hubs ou instance Event Hub spécifique). Les stratégies au niveau de l’instance offrent davantage de sécurité en suivant le principe du privilège minimum. Bien que les produits SQL Moteur de base de données prennent en charge les politiques d’accès partagé, utilisez l’authentification Microsoft Entra dès que possible, car elle offre une meilleure sécurité.

Si vous utilisez une politique d’accès partagé pour l’authentification et l’autorisation, les clients envoyant des données à une instance Event Hubs doivent fournir le nom de la politique qu’ils souhaitent utiliser, ainsi que la clé de service de la politique.

Pour configurer le streaming vers Azure Event Hubs, créez ou réutilisez une politique d’accès partagé avec la permission d’envoi. Vous pouvez vous authentifier en utilisant une clé de service (clé primaire ou secondaire).

Remarque

Pour améliorer la sécurité, utilisez le contrôle d’accès basé sur Microsoft Entra dans la mesure du possible. Si le contrôle d'accès basé sur Microsoft Entra n'est pas possible et que vous utilisez des politiques d'accès partagées, la meilleure pratique est de faire pivoter la clé de service périodiquement. Stockez tous les secrets en toute sécurité à l’aide d’Azure Key Vault ou d’un service similaire.

Définir une stratégie

Vous avez besoin d’une politique d’accès partagé avec des droits d’envoi . Vous pouvez :

  • Créer une stratégie

    ou

  • Utiliser une stratégie existante

Remarque

La politique doit avoir des droits d’envoi.

Une fois la politique déterminée, notez la valeur clé du service. Vous l’utilisez, ainsi que le nom de la politique, lors de la création de l’identifiant en SQL avant de configurer CES.

Activer et configurer le streaming d’événements de modification

Important

Depuis le 15 août 2026, le protocole AMQP est obsolété pour le flux d’événements de changement (CES). Il y a des différences entre les plateformes. Pour les étapes de migration et les échéances, consultez dépréciation du protocole AMQP.

Pour activer et configurer le streaming des événements de modification, remplacez le contexte de base de données par la base de données utilisateur, puis procédez comme suit :

  1. S’il n’est pas déjà configuré, définissez la base de données sur le modèle de récupération complète.
  2. Créer une clé principale et des informations d’identification délimitées à la base de données.
  3. Activer la diffusion en continu d’événements.
  4. Créez le groupe de stream.
  5. Ajoutez une ou plusieurs tables au groupe de flux.

Les exemples suivants montrent comment activer le CES par plateforme :

Le tableau suivant liste des valeurs de paramètres d’exemple pour les exemples de cette section :

Paramètre Valeur d'échantillon Remarques
@stream_group_name N'myStreamGroup' Nom du groupe du flux d’événements.
@destination_location Voir Notes Le FQDN de l’espace de noms Azure Event Hubs et du nom de l’instance, y compris le port 9093. Format : <namespace>.servicebus.windows.net:9093/<instance>. Pour Fabric Eventstream, utilisez le point d’entrée personnalisé.
@partition_key_scheme N'None' (Par défaut) Les partitions sont choisies selon l’approche de type tourniquet (round robin). D’autres options sont StreamGroup, Table, et Column.
@max_message_size_kb 256 256 Ko est la taille maximale par défaut du message. Alignez cette valeur avec vos limites de destination.

Les exemples utilisent également les valeurs suivantes :

  • [optionnel, si des politiques d’accès partagé via clé de service sont utilisées] Valeur clé primaire ou secondaire issue de la politique d’accès partagé : Secret = 'BVFnT3baC/K6I8xNZzio4AeoFt6nHeK0i+ZErNGsxiw='
  • EXEC sys.sp_add_object_to_event_stream_group N'myStreamGroup', N'dbo.myTable'

Exemple : Stream vers Azure Event Hubs depuis Azure SQL Database

Les exemples suivants montrent comment diffuser en continu des événements de modification vers Azure Event Hubs depuis Azure SQL Database en utilisant AzureEventHubs comme destination_type. Cette valeur est la seule acceptée pour Azure SQL Database et SQL Database dans Microsoft Fabric.

L’exemple de cette section utilise l’authentification Microsoft Entra. Cette méthode est la plus sécurisée.

Remplacez les valeurs entre crochets (<value>) par des valeurs pour votre environnement.

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

Exemple : Flux vers Azure Event Hubs depuis Azure SQL MI ou SQL Server 2025

Les exemples suivants montrent comment diffuser des événements de changement vers Azure Event Hubs depuis Azure SQL Managed Instance ou SQL Server 2025 en utilisant AzureEventHubsApacheKafka comme le destination_type.

Important

Depuis le 15 août 2026, le protocole AMQP est obsolété pour le flux d’événements de changement (CES). Il y a des différences entre les plateformes. Pour les étapes de migration et les échéances, consultez dépréciation du protocole AMQP.

L’exemple de cette section utilise l’authentification Microsoft Entra pour s’authentifier auprès de votre instance Azure Event Hubs via le protocole Apache Kafka. Cette méthode est la plus sécurisée.

Remplacez les valeurs entre crochets (<value>) par des valeurs pour votre environnement.

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

Pour confirmer que le streaming est activé et pour consulter les tables configurées pour un groupe de flux, voir Voir la configuration et la fonction CES.

Taille du message et troncature de colonne

Azure Event Hubs et Fabric Eventstream limitent la taille maximale de chaque message qu’ils reçoivent. CES utilise ce @max_message_size_kb paramètre pour diviser un grand événement sortant en plusieurs blocs de message adaptés à la destination configurée. Réglez cette valeur pour qu’elle corresponde aux limites de votre destination. Pour les attributs JSON qui identifient les blocs de message, voir JSON message format - change event streaming.

Si une ou plusieurs valeurs de colonnes en flux sont supérieures à 1 Mo, le CES tronque chaque valeur de colonne affectée à 1 Mo avant qu’elle ne forme l’événement sortant. La limite de 1 Mo s’applique à chaque valeur de colonne séparément. Cette troncature est distincte de la séparation des messages. Après avoir tronqué les valeurs des colonnes surdimensionnées, le CES forme l’événement sortant, le divise en morceaux selon les besoins selon @max_message_size_kb, et envoie chaque morceau à destination.

Définissez l’option de configuration du serveur max text repl size pour permettre l’écriture de plus de 65 536 octets dans les colonnes LOB lorsque CES est activé.

Par exemple, si une ligne compte cinq colonnes et que les trois premières valeurs de colonnes dépassent chacune 1 Mo, CES :

  1. Tronque la valeur de la première colonne à 1 Mo.
  2. Tronque la valeur de la deuxième colonne à 1 Mo.
  3. Tronque la valeur de la troisième colonne à 1 Mo.
  4. Prépare l’événement sortant, le divise en le nombre requis de morceaux selon @max_message_size_kb, et envoie chaque morceau à destination.

Remarque

La troncature des données de colonnes est inconditionnelle. CES tronque chaque valeur de colonne en flux supérieure à 1 Mo et n’enregistre pas les erreurs ni les avertissements lorsque cette troncature se produit.

Afficher la configuration et la fonction CES

Dans sys.databases, is_event_stream_enabled = 1 indique que le streaming d’événements de modification est activé pour la base de données.

La requête suivante retourne toutes les bases de données avec le streaming d’événements de modification activé :

SELECT *
FROM sys.databases
WHERE is_event_stream_enabled = 1;

Dans sys.tables, is_replicated = 1 indique qu’une table est diffusée en continu et sp_help_change_feed_table fournit des informations sur le groupe de tables et les métadonnées de table pour le streaming des événements de modification.

La requête suivante retourne toutes les tables avec le streaming d’événements de modification activé et fournit des informations de métadonnées :

SELECT name,
       is_replicated
FROM sys.tables;

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

Procédures stockées CES, fonctions système et DMV

Le tableau suivant répertorie les procédures stockées, les fonctions système et les DMV que vous pouvez utiliser pour configurer, désactiver et surveiller le streaming des événements de modification :

objet système Descriptif
Configurer CES
sys.sp_enable_event_stream Active CES pour la base de données utilisateur actuelle.
sys.sp_create_event_stream_group Crée un groupe de flux, qui est une configuration de streaming pour un groupe de tables. Le groupe de flux définit également la destination et les détails associés (par exemple, l’authentification, la taille des messages, le partitionnement). Le stream_group_id est automatiquement généré et affiché pour l’utilisateur final une fois la procédure terminée.
sys.sp_add_object_to_event_stream_group Ajoute une table au groupe de flux.
Désactiver CES
sys.sp_remove_object_from_event_stream_group Supprime une table du groupe de flux de données.
sys.sp_drop_event_stream_group Supprime le groupe de flux. Le groupe de flux ne doit pas être utilisé.
sys.sp_disable_event_stream Désactive CES pour la base de données utilisateur actuelle.
Superviser l’instance CES
sys.dm_change_feed_errors Retourne des erreurs de livraison.
sys.dm_change_feed_log_scan_sessions Retourne des informations sur l’activité d’analyse des journaux.
sys.sp_help_change_feed_settings Fournit l’état et les informations du streaming des événements de modification configurés.
sys.sp_help_change_feed Surveille la configuration actuelle du flux de modification.
sys.sp_help_change_feed_table_groups Retourne les métadonnées utilisées pour configurer les groupes de streaming d’événements de modification.
sys.sp_help_change_feed_table Fournit l’état et les informations du groupe de flux, ainsi que les métadonnées de la table pour le streaming des événements de modification.

Croissance du journal des transactions

Étant donné que la remise des messages est garantie, le journal des transactions d’une base de données activée par CES peut continuer à croître. La troncation du journal est empêchée tant qu’il existe des modifications CES à diffuser à partir du journal. Une fois que la taille du journal des transactions atteint la limite maximale définie, les écritures dans la base de données échouent.

Pour éviter cela dans Azure SQL Database et Azure SQL Managed Instance, lorsque la taille du journal des transactions approche de la limite maximale définie, Microsoft peut désactiver CES ou tuer des transactions de longue durée. Pour les instances SQL Server non managées, telles que localement ou sur SQL Server sur des machines virtuelles Azure, vous êtes responsable de la surveillance de la taille du journal des transactions et de la garantie qu’elle n’atteint pas la limite maximale définie, et de désactiver manuellement ces transactions ou de tuer manuellement des transactions de longue durée si nécessaire.

Une fois que CES est désactivé ou qu’une transaction de longue durée est interrompue, le journal des transactions est tronqué pour libérer de l’espace. Vous devez réactiver manuellement l’instance CES après sa désactivation, ou réessayer les transactions longues qui ont été arrêtées. Les modifications apportées aux données lors de la désactivation de CES ne sont pas capturées. Seules les modifications apportées après le redémarrage de CES sont diffusées en continu.

Voici une liste de scénarios typiques qui peuvent entraîner une croissance du journal des transactions avec CES activé :

  • Erreurs persistantes. CES réessaie d’envoyer un message qui est rejeté à plusieurs reprises et CES ne peut pas continuer. Les raisons pour lesquelles des erreurs persistantes peuvent entraîner des messages rejetés sont les suivantes :
    • Problèmes réseau ou configuration incorrecte.
    • Configuration incorrecte des informations d’identification.
    • Taille de message maximale mal configurée que la destination rejette.
  • La destination limite les événements entrants. Par exemple, les limites de débit d’Azure Event Hubs sont déterminées par sa référence SKU.
  • Transactions longues qui génèrent un grand nombre d’enregistrements de journal et empêchent la troncation du journal.

Pour garantir des opérations fluides, surveillez régulièrement la taille du journal des transactions et des erreurs de remise CES .

Efficacité

Sur SQL Server, Azure SQL Managed Instance et les pools élastiques Azure SQL Database, vous pouvez activer CES sur plusieurs bases de données. Chaque base de données compatible CES consomme des ressources de serveur et concurrence d’autres charges de travail serveur. Assurez-vous que votre serveur est correctement mis en ressource pour la charge de travail attendue et surveillez régulièrement les performances de vos serveurs et bases de données.

Limites

Change Event Streaming (CES) présente les limitations suivantes :

Limitations spécifiques à la plateforme

Sur les produits SQL configurés avec un fuseau horaire non UTC, le committime champ dans un message de diffusion d’événement de changement inclut incorrectement un suffixe Z , même si ce champ affiche l’heure locale de la base de données publiante. Lorsque la base de données utilise UTC, la valeur et le suffixe concordent. Ce problème est connu, et une correction est en attente dans une future version de la fonctionnalité.

Les limitations suivantes s’appliquent à certaines plateformes pour le CES :

Le CES dans SQL Server 2025 présente les limitations suivantes :

Limitations générales et au niveau du serveur

La liste suivante décrit les limitations au niveau du serveur et générales :

  • CES n’est pas pris en charge sur SQL Server 2025 (17.x) sur Linux.
  • CES émet des événements uniquement pour les modifications de données provenant des instructions INSERT, UPDATE et DELETE DML.
  • CES ne gère pas les modifications de schéma (opérations DDL), ce qui signifie qu’elle n’émet pas d’événements pour les opérations DDL. Toutefois, les opérations DDL ne sont pas bloquées. Par conséquent, si vous les exécutez, le schéma des événements DML suivants reflète la structure de table mise à jour. Vous êtes censé gérer correctement les événements avec le schéma mis à jour.
  • Actuellement, CES ne transmet pas les données qui existent dans une table avant d’être activé. Les données existantes ne sont ni amorcées ni envoyées comme un instantané lorsque CES est activé.
  • Si un message dépasse la limite de taille du message Azure Event Hubs, l’échec n’est actuellement observable que par le biais d’événements étendus. Ces xEvents sont actuellement disponibles uniquement dans SQL Server 2025, et non dans Azure SQL Database.
  • Le changement de nom des tables et des colonnes configurées pour CES n’est pas pris en charge. Le changement de nom d’une table ou d’une colonne échoue. Les renommages de base de données sont autorisés.
  • CES n’est pas disponible pour Azure SQL Managed Instance configuré avec la stratégie de mise à jour SQL Server 2022. Il est disponible uniquement pour les instances configurées avec la stratégie de mise à jour SQL Server 2025 ou Always-up-to-date.
  • Lorsqu’on utilise le protocole Kafka, le CES ne prend pas en charge l’authentification par jeton SAS. Les seules méthodes d’authentification disponibles sont Microsoft Entra et la valeur de clé de stratégie d’accès partagé.

Limitations au niveau de la base de données

La liste suivante décrit les limitations au niveau de la base de données :

Limitations au niveau de la table

La liste suivante décrit les limitations au niveau des tables :

  • Une table ne peut appartenir qu’à un seul groupe de diffusion en continu. Vous ne pouvez pas diffuser la même table vers plusieurs destinations.
  • Vous pouvez uniquement configurer des tables utilisateur pour CES. CES ne prend pas en charge les tables système de diffusion en continu.
  • Si CES est activé sur une table, vous ne pouvez pas ajouter ou supprimer une contrainte de clé primaire sur cette table.
  • Les noms de tableaux contenant un point (.) ne sont actuellement pas pris en charge.
  • ALTER TABLE SWITCH PARTITION ne peut pas être pris en charge sur des tables configurées pour CES.
  • TRUNCATE TABLE ne peut pas être pris en charge sur des tables activées pour CES.
  • CES ne prend pas en charge les tables qui utilisent l’une des fonctionnalités suivantes :
    • Index columnstore en cluster
    • Tables d’historique temporelle ou tables d’historique de registre
    • Toujours Chiffré
    • OLTP en mémoire (tables mémoire optimisées)
    • Tableaux de graphiques
    • Tables externes

Important

Les opérations d’index en ligne peuvent générer des quantités substantielles d’enregistrements du journal des transactions. CES doit traiter beaucoup plus de données, ce qui peut entraîner une latence accrue des événements.

Limitations au niveau des colonnes

La liste suivante décrit les limitations au niveau des colonnes :

  • CES ne prend pas en charge les types de données suivants. Le streaming ignore les colonnes de ces types :
    • geography
    • geometry
    • image
    • json
    • rowversion / horodateur
    • sql_variant
    • texte / ntexte
    • vector
    • xml
    • Types définis par l’utilisateur (UDT)
  • Si une ou plusieurs valeurs de colonnes en flux sont supérieures à 1 Mo, le CES tronque chaque valeur de colonne affectée à 1 Mo avant qu’elle ne forme l’événement sortant. Cette troncation est inconditionnelle et ne consigne ni les erreurs ni les avertissements. Configurez l’option de configuration du serveur max text repl size pour permettre l’écriture de plus de 65 536 octets dans les colonnes LOB lorsque CES est activé.

Autorisations dans la base de données source et la localisation des données

La liste suivante décrit les autorisations et les limitations de résidence des données :

  • Pour la sécurité au niveau des lignes, CES émet des modifications de toutes les lignes, indépendamment des autorisations des utilisateurs.
  • Le masquage dynamique des données ne s’applique pas aux données envoyées via CES. Les données sont diffusées en continu non masquées, même si le masquage est configuré.
  • CES n’émet pas d’événements liés aux modifications d’autorisation au niveau de l’objet (par exemple, l’octroi d’autorisations à des colonnes spécifiques).
  • CES diffuse des données vers la destination configurée si la configuration réseau l’autorise. Si la destination se trouve dans une autre région, CES diffuse les données entre les régions. Vérifiez que cela est conforme à vos exigences de résidence et de conformité des données.

Mise en réseau et connectivité

La liste suivante décrit une limitation réseau et de connectivité :

  • Actuellement, CES peut uniquement diffuser en continu vers les points de terminaison publics d'Azure Event Hubs. Les points de terminaison de service et les points de terminaison privés ne sont actuellement pas pris en charge.
  • Lors de l’utilisation du protocole AMQP sur Azure SQL Managed Instance ou SQL Server 2025 (pour les groupes de flux existants non encore migrés), réglez l’option de configuration de la version TLS minimale d’Azure Event Hubs à 1.2. CES ne fonctionne pas avec TLS 1.3 via le protocole AMQP.