Configurar a replicação com T-SQL
Aplica-se a:SQL Server – Linux
Neste tutorial, configure a replicação de instantâneo do SQL Server no Linux com duas instâncias do SQL Server usando Transact-SQL (T-SQL). O publicador e o distribuidor serão a mesma instância e o assinante estará em uma instância separada.
- Habilitar agentes de Replicação do SQL Server em Linux
- Criar banco de dados de exemplo
- Configurar a pasta de instantâneo para acesso aos agentes do SQL Server
- Configurar o distribuidor
- Configurar o publicador
- Configurar a publicação e artigos
- Configurar o assinante
- Executar os trabalhos de replicação
Todas as configurações de replicação podem ser definidas com procedimentos armazenados de replicação.
Pré-requisitos
Para concluir este tutorial, você precisará de:
Duas instâncias do SQL Server com a versão mais recente do SQL Server em Linux
Uma ferramenta para emitir consultas T-SQL para configurar a replicação, como SQLCMD ou SSMS
Consulte Usar o SQL Server Management Studio no Windows para gerenciar o SQL Server no Linux.
Observação
SQL Server 2017 (14.x) (CU18) e posteriores são compatíveis com a Replicação do SQL Server para instâncias do SQL Server em Linux.
Etapas detalhadas
Habilitar agentes de Replicação do SQL Server em Linux. Nas duas máquinas de host, execute os seguintes comandos no terminal.
sudo /opt/mssql/bin/mssql-conf set sqlagent.enabled true sudo systemctl restart mssql-server
Criar a tabela e um banco de dados de exemplo. No editor, crie um banco de dados de exemplo e uma tabela que atuará como os artigos de uma publicação.
CREATE DATABASE Sales; GO USE [Sales]; GO CREATE TABLE Customer ( [CustomerID] [int] NOT NULL, [SalesAmount] [decimal] NOT NULL ); GO INSERT INTO Customer (CustomerID, SalesAmount) VALUES (1, 100), (2, 200), (3, 300); GO
Na outra instância do SQL Server, o assinante, crie o banco de dados para receber os artigos.
CREATE DATABASE Sales; GO
Crie a pasta de instantâneo para os SQL Server Agents lerem/gravarem no distribuidor, crie a pasta de instantâneo e permita acesso ao usuário 'mssql'
sudo mkdir /var/opt/mssql/data/ReplData/ sudo chown mssql /var/opt/mssql/data/ReplData/ sudo chgrp mssql /var/opt/mssql/data/ReplData/
Configure o distribuidor. Neste exemplo, o publicador também será o distribuidor. Execute os seguintes comandos no publicador para configurar a instância para distribuição também.
DECLARE @distributor AS SYSNAME; DECLARE @distributorlogin AS SYSNAME; DECLARE @distributorpassword AS SYSNAME; -- Specify the distributor name. Use 'hostname' command on in terminal to find the hostname SET @distributor = N'<distributor instance name>'; --in this example, it will be the name of the publisher SET @distributorlogin = N'<distributor login>'; SET @distributorpassword = N'<distributor password>'; -- Specify the distribution database. USE master EXEC sp_adddistributor @distributor = @distributor -- this should be the hostname -- Log into distributor and create Distribution Database. In this example, our publisher and distributor is on the same host EXEC sp_adddistributiondb @database = N'distribution', @log_file_size = 2, @deletebatchsize_xact = 5000, @deletebatchsize_cmd = 2000, @security_mode = 0, @login = @distributorlogin, @password = @distributorpassword; GO DECLARE @snapshotdirectory AS NVARCHAR(500); SET @snapshotdirectory = N'/var/opt/mssql/data/ReplData/'; -- Log into distributor and create Distribution Database. In this example, our publisher and distributor is on the same host USE [distribution]; GO IF (NOT EXISTS (SELECT * FROM sysobjects WHERE name = 'UIProperties' AND type = 'U')) CREATE TABLE UIProperties (id INT); IF (EXISTS (SELECT * FROM::fn_listextendedproperty('SnapshotFolder', 'user', 'dbo', 'table', 'UIProperties', NULL, NULL))) EXEC sp_updateextendedproperty N'SnapshotFolder', @snapshotdirectory, 'user', dbo, 'table', 'UIProperties'; ELSE EXEC sp_addextendedproperty N'SnapshotFolder', @snapshotdirectory, 'user', dbo, 'table', 'UIProperties'; GO
Configurar o editor. Execute os seguintes comandos de T-SQL no fornecedor.
DECLARE @publisher AS SYSNAME; DECLARE @distributorlogin AS SYSNAME; DECLARE @distributorpassword AS SYSNAME; -- Specify the distributor name. Use 'hostname' command on in terminal to find the hostname SET @publisher = N'<instance name>'; SET @distributorlogin = N'<distributor login>'; SET @distributorpassword = N'<distributor password>'; -- Specify the distribution database. -- Adding the distribution publishers EXEC sp_adddistpublisher @publisher = @publisher, @distribution_db = N'distribution', @security_mode = 0, @login = @distributorlogin, @password = @distributorpassword, @working_directory = N'/var/opt/mssql/data/ReplData', @trusted = N'false', @thirdparty_flag = 0, @publisher_type = N'MSSQLSERVER'; GO
Configure o trabalho de publicação. Execute os seguintes comandos de T-SQL no fornecedor.
DECLARE @replicationdb AS SYSNAME; DECLARE @publisherlogin AS SYSNAME; DECLARE @publisherpassword AS SYSNAME; SET @replicationdb = N'Sales'; SET @publisherlogin = N'<Publisher login>'; SET @publisherpassword = N'<Publisher Password>'; USE [Sales]; GO EXEC sp_replicationdboption @dbname = N'Sales', @optname = N'publish', @value = N'true'; -- Add the snapshot publication EXEC sp_addpublication @publication = N'SnapshotRepl', @description = N'Snapshot publication of database ''Sales'' from Publisher ''<PUBLISHER HOSTNAME>''.', @retention = 0, @allow_push = N'true', @repl_freq = N'snapshot', @status = N'active', @independent_agent = N'true'; EXEC sp_addpublication_snapshot @publication = N'SnapshotRepl', @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, @publisher_security_mode = 0, @publisher_login = @publisherlogin, @publisher_password = @publisherpassword;
Crie artigos a partir da tabela Vendas.
Execute os seguintes comandos de T-SQL no fornecedor.
USE [Sales]; GO EXEC sp_addarticle @publication = N'SnapshotRepl', @article = N'customer', @source_owner = N'dbo', @source_object = N'customer', @type = N'logbased', @description = NULL, @creation_script = NULL, @pre_creation_cmd = N'drop', @schema_option = 0x000000000803509D, @identityrangemanagementoption = N'manual', @destination_table = N'customer', @destination_owner = N'dbo', @vertical_partition = N'false';
Configure a assinatura. Execute os seguintes comandos de T-SQL no fornecedor.
DECLARE @subscriber AS SYSNAME; DECLARE @subscriber_db AS SYSNAME; DECLARE @subscriberLogin AS SYSNAME; DECLARE @subscriberPassword AS SYSNAME; SET @subscriber = N'<Instance Name>'; -- for example, MSSQLSERVER SET @subscriber_db = N'Sales'; SET @subscriberLogin = N'<Subscriber Login>'; SET @subscriberPassword = N'<Subscriber Password>'; USE [Sales]; GO EXEC sp_addsubscription @publication = N'SnapshotRepl', @subscriber = @subscriber, @destination_db = @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'SnapshotRepl', @subscriber = @subscriber, @subscriber_db = @subscriber_db, @subscriber_security_mode = 0, @subscriber_login = @subscriberLogin, @subscriber_password = @subscriberPassword, @frequency_type = 1, @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 = 0, @active_start_date = 0, @active_end_date = 19950101; GO
Execute trabalhos do agente de replicação. Execute a seguinte consulta para obter uma lista de trabalhos:
SELECT name, date_modified FROM msdb.dbo.sysjobs ORDER BY date_modified DESC;
Execute o trabalho de replicação de instantâneo para gerar o instantâneo:
USE msdb; GO --generate snapshot of publications, for example EXEC dbo.sp_start_job N'PUBLISHER-PUBLICATION-SnapshotRepl-1'; GO
Execute o trabalho de replicação de instantâneo para gerar o instantâneo:
USE msdb; GO --distribute the publication to subscriber, for example EXEC dbo.sp_start_job N'DISTRIBUTOR-PUBLICATION-SnapshotRepl-SUBSCRIBER'; GO
Conectar assinante e consultar dados replicados.
No assinante, verifique se a replicação está funcionando executando a consulta a seguir:
SELECT * from [Sales].[dbo].[Customer];
Neste tutorial, você configurou a replicação de instantâneo do SQL Server no Linux com duas instâncias do SQL Server usando T-SQL.
- Habilitar agentes de Replicação do SQL Server em Linux
- Criar banco de dados de exemplo
- Configurar a pasta de instantâneo para acesso aos agentes do SQL Server
- Configurar o distribuidor
- Configurar o publicador
- Configurar a publicação e artigos
- Configurar o assinante
- Executar os trabalhos de replicação
Conteúdo relacionado
Comentários
https://aka.ms/ContentUserFeedback.
Em breve: Ao longo de 2024, eliminaremos os problemas do GitHub como o mecanismo de comentários para conteúdo e o substituiremos por um novo sistema de comentários. Para obter mais informações, consulteEnviar e exibir comentários de