Descubra como espelhar banco de dados SQL Server para Fabric
O Fabric Mirroring ingere e replica dados continuamente em tempo quase real de fontes como Azure Cosmos DB, Azure SQL Database, Snowflake no Microsoft Fabric. No entanto, ele está atualmente restrito às fontes de dados acima. Este artigo explica como podemos estender o Fabric mirroring para um banco de dados SQL Server local como uma fonte, usando uma combinação de replicação transacional do SQL Server e Fabric Mirroring.
A replicação transacional no SQL Server é um mecanismo para sincronizar dados entre bancos de dados quase em tempo real. A replicação transacional começa com um instantâneo do esquema e dos dados do objeto do banco de dados de origem. Após esse instantâneo inicial ter sido aplicado no destino, as alterações de dados subsequentes (inserções, atualizações, exclusões) feitas no banco de dados de origem (Publisher) são entregues ao banco de dados de destino (Subscriber) conforme ocorrem. Isso garante a sincronização quase em tempo real.
Existem três agentes envolvidos neste processo de replicação:
- Agente de Snapshot que prepara o snapshot inicial.
- Agente de leitor de log que monitora o log de transações e copia as transações marcadas para replicação no banco de dados de distribuição.
- Agente de distribuição que aplica todas essas alterações ao banco de dados de destino.
Vamos entender esse processo com um exemplo simples. Vamos usar uma tabela típica ‘Employee’ para o propósito deste exemplo. Demonstraremos como as alterações (inserções, atualizações, exclusões) feitas a essa tabela Employee em um servidor SQL On-prem fluem por meio da replicação transacional e do Fabric Mirroring para, eventualmente, chegar ao OneLake.
Exemplo de configuração:
Replicação transacional do SQL Server para SQLDB:
- Preparação de dados de exemplo : crie uma tabela chamada Employee no SQL Server de origem e insira alguns dados de exemplo nela.
Observação: estamos usando o SQL Server 2022 para este exemplo. No entanto, você pode usar qualquer versão do SQL Server superior ao SQL Server 2012. Verifique a documentação a seguir para configurações e versões com suporte ao replicar para o Banco de Dados SQL do Azure: Replicação para o Banco de Dados SQL do Azure – Banco de Dados SQL do Azure | Microsoft Learn . Além disso, certifique-se de que os componentes de replicação estejam instalados na sua instância do SQL Server. Siga o link abaixo se você ainda não tiver componentes de replicação instalados: Instalar a replicação do SQL Server – SQL Server | Microsoft Learn .
Crie a tabela Employee no seu banco de dados de usuários usando a sintaxe abaixo:
CREATE TABLE Employee (
EmployeeID INT PRIMARY KEY IDENTITY(1,1),
FirstName NVARCHAR(50) NOT NULL,
LastName NVARCHAR(50) NOT NULL,
DateOfBirth DATE,
HireDate DATE,
JobTitle NVARCHAR(50),
Salary DECIMAL(18, 2)
);
GO
Agora, insira alguns dados de exemplo nesta tabela:
DECLARE @i INT = 1;
WHILE @i <= 1000
BEGIN
INSERT INTO Employee (FirstName, LastName, DateOfBirth, HireDate, JobTitle, Salary)
VALUES (
'FirstName' + CAST(@i AS NVARCHAR(50)),
'LastName' + CAST(@i AS NVARCHAR(50)),
DATEADD(DAY, -@i, GETDATE()), -- Date of Birth is @i days before today
DATEADD(DAY, -@i/2, GETDATE()), -- Hire Date is @i/2 days before today
'JobTitle' + CAST(@i AS NVARCHAR(50)),
30000 + (@i * 10) -- Salary increases with each record
);
SET @i = @i + 1;
END;
2. Criar Publicação Transacional: Vamos criar uma Publicação Transacional usando a tabela criada acima.
Você pode modificar os scripts fornecidos abaixo para criar esta publicação. Habilite a replicação no seu banco de dados de origem no SQL Server local usando a seguinte sintaxe. Substitua o [Nome do BD] pelo nome do seu banco de dados de origem.
use master
exec sp_replicationdboption @dbname = N'[DB Name]', @optname = N'publish', @value = N'true'
GO
Adicione a Publicação Transacional ao seu banco de dados de origem usando os seguintes comandos, novamente após substituir o [Nome do BD] pelo nome do seu banco de dados de origem.
use [DB Name]
exec sp_addpublication @publication = N'Employee', @description = N'Transactional publication of Employee table', @sync_method = N'concurrent', @retention = 0, @allow_push = N'true', @allow_pull = N'true', @allow_anonymous = N'true', @enabled_for_internet = N'false', @snapshot_in_defaultfolder = N'true', @compress_snapshot = N'false', @ftp_port = 21, @allow_subscription_copy = N'false', @add_to_active_directory = N'false', @repl_freq = N'continuous', @status = N'active', @independent_agent = N'true', @immediate_sync = N'true', @allow_sync_tran = N'false', @allow_queued_tran = N'false', @allow_dts = N'false', @replicate_ddl = 1, @allow_initialize_from_backup = N'false', @enabled_for_p2p = N'false', @enabled_for_het_sub = N'false'
GO
exec sp_addpublication_snapshot @publication = N'Employee', @frequency_type = 1, @frequency_interval = 1, @frequency_relative_interval = 1, @frequency_recurrence_factor = 0, @frequency_subday = 8, @frequency_subday_interval = 1, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 0, @active_end_date = 0, @job_login = null, @job_password = null, @publisher_security_mode = 1
Agora,adicionara tabela Employee como um artigo para esta publicação.
use [DB Name]
exec sp_addarticle @publication = N'Employee', @article = N'Employee', @source_owner = N'dbo', @source_object = N'Employee', @type = N'logbased', @description = null, @creation_script = null, @pre_creation_cmd = N'drop', @schema_option = 0x000000000803509F, @identityrangemanagementoption = N'manual', @destination_table = N'Employee', @destination_owner = N'dbo', @vertical_partition = N'false', @ins_cmd = N'CALL sp_MSins_dboEmployee', @del_cmd = N'CALL sp_MSdel_dboEmployee', @upd_cmd = N'SCALL sp_MSupd_dboEmployee'
GO
Observação:
Você também pode seguir os passos no link abaixo para criar a publicação usando a GUI:
Tutorial: Configurar replicação transacional – SQL Server | Microsoft Learn
Agora você deve ver a Publicação aparecendo em Publicações Locais no Management Studio, como abaixo:
Você também pode clicar com o botão direito do mouse e clicar em “Exibir status do agente de instantâneo” para garantir que o instantâneo foi criado conforme abaixo:
3. Criar assinatura do Azure SQL DB: adicione um assinante do Azure SQL DB à publicação criada acima. Você pode usar a sintaxe a seguir para essa finalidade. Atualize as variáveis subscriber, destination_db, subscriber_db, subscriber_login e subscriber_password com os valores apropriados abaixo.
-----------------BEGIN: Script to be run at Publisher -----------------
use [DB Name]
exec sp_addsubscription @publication = N'Employee', @subscriber = N'yoursqlsrv.database.windows.net', @destination_db = N'your subscriber db', @subscription_type = N'Push', @sync_type = N'automatic', @article = N'all', @update_mode = N'read only', @subscriber_type = 0
exec sp_addpushsubscription_agent @publication = N'Employee', @subscriber = N'yoursqlsrv.database.windows.net', @subscriber_db = N'your subscriber db', @job_login = null, @job_password = null, @subscriber_security_mode = 0, @subscriber_login = N'your login', @subscriber_password = 'your password', @frequency_type = 64, @frequency_interval = 0, @frequency_relative_interval = 0, @frequency_recurrence_factor = 0, @frequency_subday = 0, @frequency_subday_interval = 0, @active_start_time_of_day = 0, @active_end_time_of_day = 235959, @active_start_date = 20240607, @active_end_date = 99991231, @enabled_for_syncmgr = N'False', @dts_package_location = N'Distributor'
GO
-----------------END: Script to be run at Publisher -----------------
Agora você deve ver a assinatura criada em Publicações Locais no Management Studio, conforme abaixo:
Por fim, você verá a tabela Employee criada no seu banco de dados SQL do Azure com os dados correspondendo exatamente aos da tabela Employee no seu banco de dados de origem.
Agora você está pronto para configurar o Fabric Mirroring da tabela Employee no Azure SQL DB.
Configurando o espelhamento de malha do banco de dados SQL do Azure
Nesta seção, exploraremos como usar o Fabric Mirroring para espelhar dados do Banco de Dados SQL do Azure para o Fabric OneLake.
Siga os pré-requisitos e etapas detalhadas na documentação oficial para configurar o espelhamento do Fabric do Azure SQL DB.
- Habilitar Identidade Gerenciada Atribuída pelo Sistema (SAMI) :
Conforme detalhado na documentação oficial , antes de configurar o espelhamento para se conectar ao Azure SQL DB, navegue até a seção Identidade do Azure SQL Server em Segurança e habilite a Identidade Gerenciada Atribuída pelo Sistema (SAMI) selecionando o status como “Ativado”, conforme mostrado na Figura 2a. A SAMI deve ser uma ID primária (se você tiver mais de uma identidade, como Identidades gerenciadas atribuídas pelo usuário atribuídas ao servidor).
Observação: se você tiver habilitado apenas a identidade gerenciada atribuída pelo sistema (SAMI) e não tiver nenhuma identidade gerenciada atribuída pelo usuário, a SAMI será sua identidade primária por padrão.
2. Ajuste as configurações de rede:
Na seção Networking, se o acesso à rede pública estiver desabilitado, você não poderá espelhar seu Azure SQL DB para o Fabric neste momento. Habilite ‘redes selecionadas’ e ‘permitir que serviços do Azure se conectem ao servidor’, conforme mostrado na Captura de tela abaixo.
Observação: isso permite acesso ao seu banco de dados SQL do Azure de todas as redes no Azure, incluindo as redes que estão fora do seu locatário. Certifique-se de que você esteja tomando precauções adicionais para proteger seus bancos de dados, como ‘Permitir apenas autenticação de Entra ID no seu banco de dados’.
Para criar um usuário Entra ID no seu banco de dados, você pode executar o seguinte script no seu banco de dados de origem.
create user [fabric_user_name_here] from external provider
alter role db_owner add member [fabric_user_name_here]
Observação: para configurar com êxito o espelhamento para o Banco de Dados SQL do Azure, o principal usado para se conectar ao Banco de Dados SQL do Azure de origem precisa receber permissões CONTROL ou db_owner.
3. Habilite as configurações necessárias no portal de administração do Fabric
Abra o Portal de administração do Fabric e certifique-se de que essa configuração esteja habilitada.
4. Configurar espelhamento no Fabric
Navegue até seu Fabric Workspace. Clique em New e More options. Em Options, navegue até a seção Data Warehouse e escolha Mirrored Azure SQL Database, conforme mostrado na Figura abaixo:
Se esta for a primeira vez que você configura o espelhamento para se conectar ao Azure SQL Server, selecione Banco de Dados SQL do Azure em Nova conexão, adicione os detalhes da conexão e clique em Avançar.
Você pode adicionar o servidor de origem, o banco de dados e outros detalhes de conexão e clicar em Next. Como a função de banco de dados fixo “db_owner” é definida no nível do banco de dados, é importante fornecer o nome do banco de dados além do servidor para configurar o espelhamento com sucesso.
Observação: certifique-se de inserir o servidor de origem e o banco de dados que você selecionou como assinante para replicação transacional.
Quando os detalhes da conexão forem configurados com sucesso, escolha a tabela Employee para espelhar na lista e clique em conectar. Em seguida, configure o nome do banco de dados espelhado de destino (Ex: WWI), isso criará um banco de dados espelhado no Fabric Warehouse. Isso iniciará o processo de espelhamento. Navegue até o ponto de extremidade do SQL Analytics e consulte o banco de dados/tabela espelhado.
Validação: Executar uma instrução de contagem para validar se ela corresponde ao banco de dados local de origem.
Você pode monitorar o status da replicação e o tempo de replicação navegando até Monitorar replicação.
Espelhamento em Ação
- Para demonstrar a replicação, executaremos uma consulta de Linguagem de Manipulação de Dados (DML) no banco de dados de origem no SQL Server local para inserir um registro e validar se ele está espelhado no OneLake.
Execute o seguinte comando no seu SQL Server local:
SET identity_insert Employee ON
Insert into [dbo].[Employee]
(EmployeeID, FirstName, LastName, DateOfBirth, HireDate, JobTitle, Salary)
Values (1001, 'John', 'Doe', '2021-12-12', '2021-12-12', 'Admin', 50000)
Você pode confirmar que esse registro foi replicado para o Azure SQL DB clicando com o botão direito do mouse na publicação e clicando em “Exibir status do Log Reader Agent”.
Para verificar se esse registro foi replicado para o OneLake, navegue até a seção ‘Monitor Mirroring’. Verifique o último tempo espelhado e o número de linhas replicadas, que agora deve incluir o registro recém-inserido, totalizando 1001 linhas.
Em seguida, navegue até o ponto de extremidade do Lakehouse SQL para validar melhor os dados.
2. Altere a tabela adicionando uma nova coluna TermDate à tabela Employee no banco de dados de origem.
Alter table [dbo].[Employee] add TermDate date
Após alguns minutos, atualize o ponto de extremidade SQL do Lakehouse e você deverá ver a coluna TermDate espelhada no OneLake.
Essa configuração garante que as alterações de dados no seu SQL Server local sejam continuamente espelhadas no Microsoft Fabric, fornecendo uma solução robusta e escalável para integração e análise de dados quase em tempo real.
Arbit: 25 anos transformando tecnologia em valor
Pode não ser parecer fácil gerar valor para seus dados, mas a Arbit, pode ajudá-lo. Há 25 anos atuando com inteligência de dados, a Arbit possui especialistas para implementar as melhores soluções ao seu ambiente de negócios. Fale conosco agora mesmo