Fala pessoal, tudo bem?
Quando falamos sobre Azure SQL Database, é bem comum lembrar das limitações que essa solução PaaS possui mesmo sendo muito escalável e flexível, por exemplo a ausência de recursos muito utilizados em instalações standalone do SQL Server como o DatabaseMail, SQL Agent, Cross-database etc… Na pratica sabemos que, com a utilização de outros serviços no Azure conseguimos contornar essas limitações, no entanto, mesmo assim é necessário passar por um processo de refatoração e transformações das databases ou até mesmo em alguns casos remodelar. Mas com o passar dos anos, a Microsoft cada vez mais tem lançado soluções para aprimorar o SQL Database, e no mês de abril de 2023 foi anunciado a disponibilização do Change Data Capture (CDC) para Azure SQL Database, o que antes estava disponível somente para o SQL Server e Managed Instances em decorrência da necessidade da utilização do SQL Agent e criação de jobs (Antes que o CDC fosse disponibilizado havia a possibilidade de configurar a feature chamada “temporal tables” no Azure SQL DB).
Pré-requisitos recomendados:
Estar familiarizado com a terminologia e conceitos básicos de Cloud Computer no Azure;
Possuir alguma experiencia de administração de banco de dados SQL Server;
Ter um breve conhecimento sobre o Azure SQL Database.
O que é Change Data Capture (CDC)?
Assim como detalhado na documentação da Microsoft, de forma resumida é uma funcionalidade do SQL Server que permite capturar e rastrear as alterações feitas nos dados de uma tabela, ele registra as operações de inserção, atualização e exclusão (DML) que ocorrem nos registros da tabela, permitindo que as alterações sejam rastreadas e consultadas posteriormente. Essas alterações são armazenadas em tabelas especiais chamadas “tabelas de controle de alterações”, que são criadas automaticamente pelo SQL Server. Essas tabelas contêm as informações necessárias para reconstruir os dados alterados, incluindo o tipo de operação, os valores antigos e os valores novos.
Link de referência: Clique Aqui
Ao contrário do SQL Server standalone e o Managed Instance, o CDC no SQL Database não utiliza SQL Server Agent jobs, mas oferece funcionalidade semelhante através de um scheduler que executa automaticamente os processos “capture” e “cleanup” de alterações nas tabelas.
O mais incrível de tudo, é que o processo para habilitar o CDC no SQL Database funciona da mesma forma que aos demais ambientes:
Conectar no SQL Database usando uma conta com privilégios suficientes;
Habilitar o CDC na database através da procedure [sys.sp_cdc_enable_db];
Habilitar o CDC em uma tabela específica através da procedure [sys.sp_cdc_enable_table];
Link de referência: Clique Aqui
O processo de habilitar o CDC é bem simples e fácil, para demonstração foi criado uma SQL Database no purchasing mode vCore, no Service Tier General Purpose e no Computer Tier Serverless com apenas 1 vCore, com o modelo de dados do AdventureWorksLT (Com o mínimo de recursos possíveis):
Estando conectado na database, basta executar a seguinte procedure para habilitar o CDC:
EXEC sys.sp_cdc_enable_db
Query para validar a habilitação do CDC:
SELECT name, is_cdc_enabled FROM sys.databases WHERE is_cdc_enabled = 1
Em seguida bastar habilitar o CDC nas tabelas desejadas, em nosso caso iremos habilitar somente na tabela [SalesLT].[ProductModel]:
EXEC sys.sp_cdc_enable_table @source_schema = N'SalesLT', @source_name = N'ProductModel', @role_name = NULL, @filegroup_name = NULL, @supports_net_changes = 0
Aqui finalizamos a configuração do CDC, as demais configurações seriam necessárias se houvesse necessidade de personalização ou habilita-lo em mais tabelas. Com a seguinte query conseguimos ver todas as tabelas de controle que a feature do CDC criou, incluindo a tabela [SalesLT_ProductModel_CT] que irá armazenar todas as alterações de registros (As tabelas que armazenam as alterações possuem o sufixo “CT”):
Link do GitHub com todos os scripts e queries auxiliares para criação dos comandos de forma dinâmica: Clique Aqui
Vamos fazer alguns testes para validar o CDC, primeiro iremos inserir um registro na tabela [SalesLT].[ProductModel] e verificar sua inserção, em seguida alterar um valor e por fim deleta-lo.
Inserção do registro:
Atualização e deleção do registro:
Ao consultar a tabela [SalesLT_ProductModel_CT] é possível observar todas as operações que ocorreram na tabela principal, incluindo inserção do registro, valor anterior da alteração identificado pela operação 3, e o valor posterior da alteração identificado pela operação 4, e por fim a deleção do registro:
Limitação da feature no Azure SQL Database:
No purchasing model DTU, a feature do CDC está somente disponível no service tier Premium, além disso, caso a database esteja em SQL Elastic Pool, a configuração do mesmo precisa ser superior a 100 DTUs, caso contrário será retornado o seguinte erro:
No teste realizado, para obter sucesso ao habilitar a feature houve a necessário de realizar um scale up para o service Tier Premium:
Em seguida foi obtido sucesso na habilitação da feature:
Bom pessoal, acredito que finalizamos por aqui, e espero que tenham gostado assim como eu, dessa novidade incrível que a Microsoft disponibilizou para o Azure SQL DB, sem duvidas outros serviços que não envolvem o banco de dados diretamente também terão novidades., tendo em vista que muitas ferramentas no mercados utilizam o CDC no SQL Server para replicação de dados, versionamento, migração etc.. como o caso do AWS DMS, o Apache KAFKA e dentre outros.