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.
Importante
El conector de Microsoft SQL Server está en versión preliminar pública.
En esta página se proporcionan instrucciones para habilitar la captura de datos modificados integrada (CDC) en Microsoft SQL Server. Debe habilitar el seguimiento de cambios o CDC para usar el conector de SQL Server. Databricks recomienda usar el seguimiento de cambios para cualquier tabla que tenga una clave principal para minimizar la carga en la base de datos de origen. Si la captura de datos modificados y la CDC están habilitados, el conector usa el seguimiento de cambios. Para obtener instrucciones sobre qué opción elegir, consulte Seguimiento de cambios frente a captura de datos modificados.
Habilitar CDC integrado para la base de datos de origen
Inicie sesión en la base de datos que desea habilitar para CDC.
Ejecute el siguiente comando T-SQL en el contexto de la base de datos:
Azure SQL Database y SQL Server local
EXEC sys.sp_cdc_enable_db
Amazon RDS para SQL Server
EXEC msdb.dbo.rds_cdc_enable_db '<database-name>'
Para obtener más información, consulte Habilitación de la captura de datos modificados para una base de datos en la documentación de SQL Server.
Habilitación de CDC integrada en la tabla de origen
Para habilitar CDC en la tabla de origen, ejecute el siguiente procedimiento almacenado en Azure SQL. Reemplace los valores de source_schema
, source_name
y role_name
.
@support_net_changes
solo admite un valor de 1
si la tabla tiene una clave principal.
- Reemplace los valores de
source_schema
,source_name
yrole_name
. - Si la tabla tiene una clave principal,
@support_net_changes
solo admite un valor de1
.
EXEC sys.sp_cdc_enable_table
@source_schema = N'MySchema',
@source_name = N'MyTable',
@role_name = NULL,
@supports_net_changes = 1
Para obtener más información, consulte Habilitación de la captura de datos modificados para una tabla en la documentación de SQL Server.
Concesión de SELECT
en el esquema de CDC
Además de los privilegios descritos en la configuración de origen, el usuario de la base de datos necesita el SELECT
privilegio en el esquema cdc
. Este esquema contiene las tablas de cambios que se crean cuando CDC está habilitado. Ejecute el siguiente comando de T-SQL:
GRANT SELECT ON SCHEMA::cdc to <database-user>;
Concesión de VIEW SERVER STATE
(local y RDS)
Solo para las instancias locales y RDS, el VIEW SERVER STATE
privilegio es necesario para consultar sys.dm_server_services
, que se usa para comprobar el estado del Agente SQL Server. Ejecute el siguiente comando de T-SQL:
GRANT VIEW SERVER STATE to <database-user>
Configuración de la evolución del esquema y la captura de DDL
El conector de SQL Server puede realizar un seguimiento del lenguaje de definición de datos (DDL) en objetos de base de datos replicados y aplicar los cambios pertinentes del esquema de tabla a las tablas de destino o agregar nuevas tablas en caso de replicación de esquema completa.
La captura DDL requiere una configuración adicional de objetos de base de datos, como tablas internas, procedimientos almacenados y desencadenadores. El script de Transact-SQL (T-SQL) proporcionado en este artículo (ddl_support_objects.sql
) quita los objetos de compatibilidad con DDL preexistentes y crea los objetos de compatibilidad DDL necesarios para capturar los cambios de DDL que se producen en la base de datos.
Descargue el script de ddl_support_objects.sql.
Modifique el script para establecer el
mode
valor:-
BOTH
: inicializa objetos CT y CDC (valor predeterminado) -
CT
: Inicializa objetos CT -
CDC
: Inicializa objetos CDC -
NONE
: elimina todos los objetos CT y CDC preexistentes
-
(Recomendado) Opcionalmente, modifique el script para ajustar la variable
replicationUser
al usuario de su base de datos SQL Server.Si
replicationUser
se define, el script concede todos los privilegios necesarios para trabajar con los objetos de compatibilidad de DDL para el usuario. En caso contrario, deberá conceder cada privilegio manualmente.Ejecute el script en cada base de datos que quiera ingerir.
Importante
No ejecute el script en la base de datos maestra.
Si ejecuta el script en una herramienta de terceros, seleccione todo el script antes de ejecutarlo.
Requisitos de privilegios de captura de datos modificados (CDC)
Si establece la replicationUser
variable en el script, el script concede los privilegios necesarios a los objetos de compatibilidad de DDL al usuario de la base de datos. Los privilegios necesarios son:
-
VIEW DEFINITION
en el objetolakeflowDisableOldCaptureInstance_1_1
-
VIEW DEFINITION
en el objetolakeflowRefreshCaptureInstance_1_1
-
VIEW DEFINITION
en el objetolakeflowMergeCaptureInstances_1_1
-
VIEW DEFINITION
en la base de datos que se quiere ingerir -
VIEW DATABASE PERFORMANCE STATE
en la base de datos que se quiere ingerir -
UPDATE
en el objetolakeflowCaptureInstanceInfo_1_1
-
EXECUTE
en el esquemadbo
-
EXECUTE
en el objetolakeflowMergeCaptureInstances_1_1
-
EXECUTE
en el objetolakeflowDisableOldCaptureInstance_1_1
-
EXECUTE
en el objetolakeflowRefreshCaptureInstance_1_1
Si replicationUser
no se establece en el script, debe conceder manualmente los privilegios necesarios para CDC. Para ello, ejecute los siguientes comandos de T-SQL, reemplazando <database-user>
:
GRANT VIEW DEFINITION ON object::dbo.lakeflowDisableOldCaptureInstance_1_1 TO <database-user>;
GRANT VIEW DEFINITION ON object::dbo.lakeflowRefreshCaptureInstance_1_1 TO <database-user>;
GRANT VIEW DEFINITION ON object::dbo.lakeflowMergeCaptureInstances_1_1 TO <database-user>;
GRANT VIEW DEFINITION TO <database-user>;
GRANT VIEW DATABASE PERFORMANCE STATE TO <database-user>;
GRANT UPDATE ON object::dbo.lakeflowCaptureInstanceInfo_1_1 TO <database-user>;
GRANT EXECUTE ON schema::dbo TO <database-user>;
GRANT EXECUTE ON object::dbo.lakeflowMergeCaptureInstances_1_1 TO <database-user>;
GRANT EXECUTE ON object::dbo.lakeflowDisableOldCaptureInstance_1_1 TO <database-user>;
GRANT EXECUTE ON object::dbo.lakeflowRefreshCaptureInstance_1_1 TO <database-user>;