Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Se aplica a: SQL Server 2025 (17.x)
Azure SQL Database
Azure SQL Managed Instance
Base 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
- 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.
- Habilite el streaming de eventos de cambio para una base de datos de usuario.
- 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.
- 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:
- Espacio de nombres de Azure Event Hubs
- Instancia de Event Hubs de Azure
- Nombre de host de Azure Event Hubs
- Una cuenta de inicio de sesión con el rol db_owner o que tenga el permiso CONTROL DATABASE para la base de datos en la que se desea habilitar CES.
- Para SQL Server 2025 (17.x), habilite la configuración de ámbito de la base de datos de características en versión preliminar. Azure SQL Database no requiere esta configuración.
- Para Azure SQL Database configurada para utilizar reglas de firewall de salida, y para la configuración de la red virtual de Azure SQL Managed Instance: Puertos de firewall que se deben abrir
- En el caso de Azure SQL Database configurado para usar un perímetro de seguridad de red, permita el acceso al centro de eventos de Azure de destino:
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.
- Control de acceso compartido basado en directivas de acceso
- Control de acceso basado en Microsoft Entra
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:
- Si aún no está configurado, establezca la base de datos en el modelo de recuperación completa.
- Crea una clave maestra y una credencial con ámbito de base de datos.
- Habilite el streaming de eventos.
- Crea el grupo de streaming.
- Añade una o más tablas al grupo de stream.
Los siguientes ejemplos muestran cómo habilitar el CES por plataforma:
- Stream to Azure Event Hubs from Azure SQL Database
- Transmite a Azure Event Hubs desde Azure SQL MI o SQL Server 2025
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:
- Trunca el valor de la primera columna a 1 MB.
- Reduce el valor de la segunda columna a 1 MB.
- Reduce el valor de la tercera columna a 1 MB.
- 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 |
|---|---|
|
|
|
| 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. |
|
|
|
| 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. |
|
|
|
| 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
- Limitaciones generales y de nivel de servidor
- Limitaciones de nivel de base de datos
- Limitaciones a nivel de tabla
- Limitaciones de nivel de columna
- Permisos en la base de datos de origen
- Redes y conectividad
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:
- Debes activar la función de vista previa configuración con alcance de base de datos.
- La autenticación Microsoft Entra está soportada a partir de Cumulative Update 3 (CU3) para instancias habilitadas por Azure Arc o ejecutándose en una máquina virtual de Azure.
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, yDELETE. - 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:
- CES solo admite bases de datos configuradas con el modelo de recuperación completa.
- CES no admite bases de datos configuradas con Fabric Mirrored Databases para SQL Server, replicación transaccional, captura de cambios en los datos o Azure Synapse Link. El seguimiento de cambios se admite en las bases de datos configuradas con CES.
- CES solo puede transmitir desde bases de datos principales que se pueden escribir. Las bases de datos secundarias que forman parte de grupos de disponibilidad AlwaysOn o que usan el vínculo Instancia administrada no se pueden configurar como orígenes de streaming.
- No se puede habilitar CES en vistas ni en vistas indexadas.
- Puede configurar hasta 4096 grupos de flujos. Cada grupo de transmisión puede incluir hasta 40 000 tablas.
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 PARTITIONno es compatible con las tablas configuradas para CES. -
TRUNCATE TABLEno 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.