Configurar la transmisión de eventos de cambios (vista previa) a Azure Event Hubs

Se aplica a: SQL Server 2025 (17.x) Azure SQL DatabaseAzure SQL Managed InstanceBase de datos SQL en Microsoft Fabric

Este artículo describe cómo configurar la función de streaming de eventos de cambios (CES) en SQL Server 2025 (17.x), Azure SQL Database, Azure SQL Managed Instance y base de datos SQL en Microsoft Fabric para transmitir a Azure Event Hubs.

Para configurar CES a Fabric Eventstream, consulte Stream a Fabric Eventstream.

Nota:

La transmisión de eventos de cambio está actualmente en vista previa y presenta diferencias en la compatibilidad entre productos. Durante la versión preliminar, esta característica está sujeta a cambios.

Procedimiento para la transmisión de eventos de cambio

  1. Use un espacio de nombres existente o cree un nuevo espacio de nombres de Azure Event Hubs y una instancia de Event Hubs. La instancia de Event Hubs recibe eventos.
  2. Habilite el streaming de eventos de cambio para una base de datos de usuario.
  3. Crea un grupo de streaming. Con este grupo, configure el destino, las credenciales, los límites de tamaño del mensaje y el esquema de creación de particiones.
  4. Añade una o más tablas al grupo de stream.

Cada paso se describe en detalle en las secciones siguientes de este artículo.

Prerrequisitos

Importante

Desde el 15 de agosto de 2026, el protocolo AMQP está obsoleto para la transmisión de eventos de cambio (CES). Hay diferencias entre plataformas. Para los pasos y plazos de migración, véase la deprecación del protocolo AMQP.

Para configurar el streaming de eventos de cambio, necesita los siguientes recursos, permisos y configuración:

Al usar el streaming de eventos de cambio con una Instancia Administrada de Azure SQL, la instancia debe configurarse con SQL Server 2025 o con la directiva de actualización Always-up-to-date.

Configuración de Azure Event Hubs

Para aprender a crear Azure Event Hubs, consulte Creación de un centro de eventos mediante Azure Portal.

Control de acceso de Azure Event Hubs

Configure el control de acceso para el recurso de SQL en Azure Event Hubs. La autenticación de Microsoft Entra es el método más seguro. CES soporta la autenticación Microsoft Entra en Azure SQL Database y Azure SQL Managed Instance. Para SQL Server 2025, se soporta la autenticación Microsoft Entra a partir de Cumulative Update 3 (CU3) para instancias habilitadas por Azure Arc o ejecutándose en una máquina virtual de Azure. Aunque se admiten directivas de acceso compartido, úselas solo cuando la autenticación de Microsoft Entra no sea una opción.

Las directivas de acceso compartido proporcionan autenticación y autorización a Azure Event Hubs. Cada directiva de acceso compartido necesita un nombre, un nivel de acceso (Manage, Sendo Listen) y un enlace de recursos (espacio de nombres de Event Hubs o una instancia específica del centro de eventos). Las directivas de nivel de instancia ofrecen más seguridad siguiendo el principio de privilegios mínimos. Aunque los productos SQL Motor de base de datos soportan políticas de acceso compartido, utiliza la autenticación Microsoft Entra siempre que sea posible, ya que proporciona una mejor seguridad.

Si usas una política de acceso compartido para autenticación y autorización, los clientes que envían datos a una instancia de Event Hubs deben proporcionar el nombre de la política que desean usar, junto con la clave de servicio de la política.

Para configurar la transmisión a Azure Event Hubs, crea o reutiliza una política de acceso compartido con permiso de enviar. Puedes autenticarte usando una clave de servicio (clave primaria o secundaria valor).

Nota:

Para mejorar la seguridad, use el control de acceso basado en Microsoft Entra siempre que sea posible. Si el control de acceso basado en Microsoft Entra no es posible y usas políticas de acceso compartido, la mejor práctica es rotar la clave de servicio periódicamente. Almacene todos los secretos de forma segura mediante Azure Key Vault o un servicio similar.

Definición de una directiva

Necesitas una política de acceso compartido con derechos de envío . Puede hacer lo siguiente:

  • Crear una nueva directiva

    Or

  • Uso de una directiva existente

Nota:

La directiva debe tener derechos de Enviar.

Una vez determinada la política, anota el valor clave del servicio. Lo usas, junto con el nombre de la política, al crear la credencial en SQL antes de configurar CES.

Habilitación y configuración del streaming de eventos de cambio

Importante

Desde el 15 de agosto de 2026, el protocolo AMQP está obsoleto para la transmisión de eventos de cambio (CES). Hay diferencias entre plataformas. Para los pasos y plazos de migración, véase la deprecación del protocolo AMQP.

Para habilitar y configurar el streaming de eventos de cambio, cambie el contexto de la base de datos a la base de datos de usuario y siga estos pasos:

  1. Si aún no está configurado, establezca la base de datos en el modelo de recuperación completa.
  2. Crea una clave maestra y una credencial con ámbito de base de datos.
  3. Habilite el streaming de eventos.
  4. Crea el grupo de streaming.
  5. Añade una o más tablas al grupo de stream.

Los siguientes ejemplos muestran cómo habilitar el CES por plataforma:

La siguiente tabla muestra los valores de los parámetros de los ejemplos de esta sección:

Parameter Valor de ejemplo Notas
@stream_group_name N'myStreamGroup' Nombre del grupo de la transmisión del evento.
@destination_location Ver Notas El FQDN del espacio de nombres y nombre de la instancia de Azure Event Hubs, incluyendo el puerto 9093. Formato: <namespace>.servicebus.windows.net:9093/<instance>. Para Fabric Eventstream, usa el endpoint de entrada personalizado.
@partition_key_scheme N'None' (Por defecto) Las particiones se seleccionan por turnos. Otras opciones son StreamGroup, Table, y Column.
@max_message_size_kb 256 256 KB es el tamaño máximo predeterminado del mensaje. Alinea este valor con tus límites de destino.

Los ejemplos también utilizan los siguientes valores:

  • [opcional, si se utilizan políticas de acceso compartido mediante clave de servicio] Valor clave primario o secundario extraído de la política de acceso compartido: Secret = 'BVFnT3baC/K6I8xNZzio4AeoFt6nHeK0i+ZErNGsxiw='
  • EXEC sys.sp_add_object_to_event_stream_group N'myStreamGroup', N'dbo.myTable'

Ejemplo: Transmitir a Azure Event Hubs desde Azure SQL Database

Los siguientes ejemplos muestran cómo transmitir eventos de cambio a Azure Event Hubs desde Azure SQL Database usando AzureEventHubs como el destination_typearchivo . Este valor es el único aceptado para Azure SQL Database y SQL Database en Microsoft Fabric.

El ejemplo de esta sección utiliza autenticación Microsoft Entra. Este método es el más seguro.

Reemplace los valores entre corchetes angulares (<value>) por los valores de su entorno.

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

Ejemplo: Transmitir a Azure Event Hubs desde Azure SQL MI o SQL Server 2025

Los siguientes ejemplos muestran cómo transmitir eventos de cambio a Azure Event Hubs desde Azure SQL Managed Instance o SQL Server 2025 usando AzureEventHubsApacheKafka como el destination_type.

Importante

Desde el 15 de agosto de 2026, el protocolo AMQP está obsoleto para la transmisión de eventos de cambio (CES). Hay diferencias entre plataformas. Para los pasos y plazos de migración, véase la deprecación del protocolo AMQP.

En el ejemplo de esta sección se usa la autenticación de Microsoft Entra para autenticarse en la instancia de Azure Event Hubs mediante el protocolo Apache Kafka. Este método es el más seguro.

Reemplace los valores entre corchetes angulares (<value>) por los valores de su entorno.

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

Para confirmar que el streaming está habilitado y para ver las tablas configuradas para un grupo de stream, consulte Ver configuración y función CES.

Tamaño del mensaje y truncamiento de columnas

Azure Event Hubs y Fabric Eventstream limitan el tamaño máximo de cada mensaje que reciben. CES utiliza esta @max_message_size_kb configuración para dividir un gran evento saliente en varios bloques de mensajes que se ajusten al destino configurado. Establece este valor para que se alinee con los límites de tu destino. Para los atributos JSON que identifican fragmentos de mensaje, véase formato de mensaje JSON - cambiar secuencia de eventos.

Si uno o más valores de columna en flujo son mayores a 1 MB, CES trunca cada valor de columna afectado a 1 MB antes de que forme el evento saliente. El límite de 1 MB se aplica a cada valor de columna por separado. Esta truncación es independiente de la división de mensajes. Tras truncar los valores de columnas sobredimensionadas, CES forma el evento saliente, lo divide en fragmentos según sea necesario según @max_message_size_kb, y envía cada fragmento al destino.

Establezca la opción de configuración del servidor max text repl size para permitir que se escriban más de 65.536 bytes en columnas LOB cuando CES está habilitado.

Por ejemplo, si una fila tiene cinco columnas y los tres primeros valores de columna son mayores cada uno a 1 MB, CES:

  1. Trunca el valor de la primera columna a 1 MB.
  2. Reduce el valor de la segunda columna a 1 MB.
  3. Reduce el valor de la tercera columna a 1 MB.
  4. Prepara el evento saliente, lo divide en el número requerido de bloques según @max_message_size_kb, y envía cada fragmento al destino.

Nota:

El truncamiento de datos de columna es incondicional. CES trunca cada valor de columna transmitido mayor a 1 MB y no registra errores ni advertencias cuando ocurre este truncamiento.

Ver la configuración y función del CES

En sys.databases, is_event_stream_enabled = 1 indica que el streaming de eventos de cambio está habilitado para la base de datos.

La consulta siguiente devuelve todas las bases de datos con el streaming de eventos de cambio habilitado:

SELECT *
FROM sys.databases
WHERE is_event_stream_enabled = 1;

En sys.tables, is_replicated = 1 indica que se transmite una tabla y sp_help_change_feed_table proporciona información sobre el grupo de tablas y los metadatos de tabla para el streaming de eventos de cambio.

La consulta siguiente devuelve todas las tablas con el streaming de eventos de cambio habilitado y proporciona información de metadatos:

SELECT name,
       is_replicated
FROM sys.tables;

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

Procedimientos almacenados, funciones del sistema y DMV de CES

En la tabla siguiente se enumeran los procedimientos almacenados, las funciones del sistema y las DMV que puede usar para configurar, deshabilitar y supervisar el streaming de eventos de cambio:

Objeto de sistema Descripción
Configurar CES
sys.sp_enable_event_stream Habilita CES para la base de datos del usuario actual.
sys.sp_create_event_stream_group Crea un grupo de flujos, que es una configuración de transmisión para un grupo de tablas. El grupo de secuencias también define el destino y los detalles relacionados (como la autenticación, el tamaño del mensaje, la creación de particiones). El stream_group_id se genera automáticamente y se muestra para el usuario final cuando se completa el procedimiento.
sys.sp_add_object_to_event_stream_group Añade una tabla al grupo de flujos.
Deshabilitar CES
sys.sp_remove_object_from_event_stream_group Elimina una tabla del grupo de flujos.
sys.sp_drop_event_stream_group Elimina el grupo de flujos. El grupo de flujos no debe estar en uso.
sys.sp_disable_event_stream Deshabilita CES para la base de datos del usuario actual.
Supervisar CES
sys.dm_change_feed_errors Devuelve errores de entrega.
sys.dm_change_feed_log_scan_sessions Devuelve información sobre la actividad del escaneo de registros.
sys.sp_help_change_feed_settings Proporciona el estado e información del streaming de eventos de cambio configurado.
sys.sp_help_change_feed Supervisa la configuración actual del flujo de cambios.
sys.sp_help_change_feed_table_groups Devuelve los metadatos que se utilizan para configurar los grupos de transmisión de eventos de cambio.
sys.sp_help_change_feed_table Proporciona el estado y la información del grupo de transmisión, así como los metadatos de las tablas para la transmisión de eventos de cambio.

Crecimiento del registro de transacciones

Dado que se garantiza la entrega de mensajes, el registro de transacciones de una base de datos que tiene CES habilitado puede seguir creciendo. Se evita el truncamiento del registro siempre que haya cambios de CES que transmitir desde el registro. Una vez que el tamaño del registro de transacciones alcanza el límite máximo definido, se producirá un error en las escrituras en la base de datos.

Para evitar esto en Azure SQL Database e Instancia administrada de Azure SQL, cuando el tamaño del registro de transacciones se aproxima al límite máximo definido, Microsoft podría deshabilitar CES o eliminar transacciones de larga duración. En el caso de instancias de SQL Server no administradas, como locales o en SQL Server en máquinas virtuales de Azure, es responsable de supervisar el tamaño del registro de transacciones y asegurarse de que no alcanza el límite máximo definido y deshabilitar manualmente CES o eliminar transacciones de larga duración si es necesario.

Una vez que CES está deshabilitado o se elimina una transacción de larga duración, el registro de transacciones se trunca para liberar espacio. Debe volver a habilitar CES manualmente después de que se haya deshabilitado o reintentar las transacciones de larga duración que se hayan eliminado. Los cambios de datos realizados mientras CES estaba deshabilitado no se capturan. Solo se transmiten los cambios realizados después de reiniciar CES.

A continuación se muestra una lista de escenarios típicos que pueden dar lugar al crecimiento del registro de transacciones con CES habilitado:

  • Errores persistentes. CES intenta reenviar un mensaje que se rechaza repetidamente y no puede continuar. Entre los motivos de los errores persistentes que pueden provocar mensajes rechazados se incluyen los siguientes:
    • Problemas de red o configuración incorrecta.
    • Configuración incorrecta de credenciales.
    • Tamaño máximo de mensaje mal configurado que rechaza el destino.
  • El destino limita los eventos entrantes. Por ejemplo, los límites de velocidad de Azure Event Hubs se basan en su SKU.
  • Transacciones de larga duración que generan muchos registros y evitan el truncamiento del registro.

Para garantizar operaciones fluidas, supervise el tamaño del registro de transacciones y los errores de entrega de CES con regularidad.

Rendimiento

En SQL Server, Azure SQL Managed Instance y grupos elásticos de Azure SQL Database, puede habilitar CES en varias bases de datos. Cada base de datos habilitada para CES consume recursos de servidor y compite con otra carga de trabajo de servidor. Asegúrese de que el servidor tenga recursos adecuados para la carga de trabajo esperada y supervise periódicamente el rendimiento del servidor y las bases de datos.

Limitaciones

La transmisión de eventos de cambio (CES) tiene las siguientes limitaciones:

Limitaciones específicas de la plataforma

En productos SQL configurados con una zona horaria no UTC, el committime campo en un mensaje de streaming de evento de cambio incluye incorrectamente un sufijo Z , aunque este campo muestre la hora local de la base de datos que publica. Cuando la base de datos usa UTC, el valor y el sufijo coinciden. Este problema es conocido y una solución está pendiente en una futura versión de la función.

Las siguientes limitaciones se aplican a plataformas específicas para CES:

El CES en SQL Server 2025 presenta las siguientes limitaciones:

Limitaciones generales y de nivel de servidor

La siguiente lista describe limitaciones generales y a nivel de servidor:

  • CES no se admite en SQL Server 2025 (17.x) en Linux.
  • CES emite eventos solo para los cambios en los datos a partir de las instrucciones DML de INSERT, UPDATE, y DELETE.
  • CES no controla los cambios de esquema (operaciones DDL), lo que significa que no emite eventos para las operaciones DDL. Sin embargo, las operaciones DDL no están bloqueadas, por lo que, si las ejecuta, el esquema de eventos DML posteriores refleja la estructura de tabla actualizada. Se espera que maneje los eventos sin problemas con el esquema actualizado.
  • Actualmente, CES no transmite los datos que ya existen en una tabla antes de habilitar CES. Los datos existentes no se inicializan ni se envían como instantánea al habilitar CES.
  • Si un mensaje supera el límite de tamaño de mensaje de Azure Event Hubs, el error solo se puede observar actualmente a través de eventos extendidos. CES xEvents solo está disponible actualmente en SQL Server 2025 y no en Azure SQL Database.
  • No se admite el cambio de nombre de tablas y columnas configuradas para CES. Se produce un error al cambiar el nombre de una tabla o columna. Se permiten los cambios de nombre de la base de datos.
  • CES no está disponible para una instancia administrada de Azure SQL configurada con la directiva de actualización de SQL Server 2022. Solo está disponible para las instancias configuradas con SQL Server 2025 o la política de actualización Always-up-to-date.
  • Al usar el protocolo Kafka, CES no soporta autenticación por token SAS. Los únicos métodos de autenticación disponibles son Microsoft Entra y la política de acceso compartido clave de valor.

Limitaciones de nivel de base de datos

La siguiente lista describe las limitaciones a nivel de base de datos:

Limitaciones a nivel de tabla

La siguiente lista describe las limitaciones a nivel de tabla:

  • Una tabla solo puede pertenecer a un grupo de streaming. No se puede transmitir la misma tabla a varios destinos.
  • Solo puede configurar tablas de usuario para CES. CES no admite la transmisión de tablas del sistema.
  • Aunque CES está habilitado en una tabla, no se puede agregar ni quitar una restricción de clave principal en esa tabla.
  • Los nombres de las tablas que contienen un punto (.) actualmente no están soportados.
  • ALTER TABLE SWITCH PARTITION no es compatible con las tablas configuradas para CES.
  • TRUNCATE TABLE no es compatible con tablas habilitadas para CES.
  • CES no admite tablas que usen ninguna de las siguientes características:
    • Índices de almacén de columnas agrupados
    • Tablas de historial temporal o tablas de historial de libro de contabilidad
    • Siempre Cifrado
    • OLTP en memoria (tablas optimizadas para memoria)
    • Tablas de grafos
    • Tablas externas

Importante

Las operaciones de índice en línea pueden generar cantidades considerables de registros de transacciones. CES debe procesar significativamente más datos, lo que puede dar lugar a un aumento de la latencia de eventos.

Limitaciones de nivel de columna

La siguiente lista describe las limitaciones a nivel de columna:

  • CES no admite los siguientes tipos de datos. El streaming omite las columnas de estos tipos:
    • geography
    • geometry
    • image
    • json
    • rowversion / Timestamp
    • sql_variant
    • Mensaje de texto / ntext
    • vector
    • xml
    • Tipos definidos por el usuario (UDT)
  • Si uno o más valores de columna en flujo son mayores a 1 MB, CES trunca cada valor de columna afectado a 1 MB antes de que forme el evento saliente. Esta truncación es incondicional y no registra errores ni advertencias. Configura la opción de configuración del servidor max text repl size para permitir que se escriban más de 65.536 bytes en columnas LOB cuando CES está habilitado.

Permisos en la base de datos de origen y residencia de datos

La siguiente lista describe permisos y limitaciones de residencia de datos:

  • Para seguridad de nivel de fila, CES emite cambios en todas las filas, independientemente de los permisos de usuario.
  • El enmascaramiento dinámico de datos no se aplica a los datos enviados a través de CES. Los datos se transmiten sin máscara, incluso si está configurado el enmascaramiento.
  • CES no emite eventos relacionados con los cambios de permisos de nivel de objeto (por ejemplo, conceder permisos a columnas específicas).
  • CES transmite datos al destino configurado si la configuración de red la permite. Si el destino está en otra región, CES transmite los datos entre regiones. Asegúrate de que esto cumpla con tus requisitos de residencia de datos y de cumplimiento normativo.

Redes y conectividad

La siguiente lista describe una limitación de red y conectividad:

  • Actualmente, CES solo puede transmitir a puntos de conexión públicos de Azure Event Hubs. Actualmente no se admiten puntos de conexión de servicio ni puntos de conexión privados.
  • Al usar el protocolo AMQP en Azure SQL Managed Instance o SQL Server 2025 (para grupos de flujo existentes aún no migrados), configura la opción de configuración de la versión mínima TLS de Azure Event Hubs en 1.2. CES no funciona con TLS 1.3 sobre el protocolo AMQP.