Perguntas Frequentes
Configurar a replicação com T-SQL
Aplica-se a: SQL Server (todas as versões compatíveis) – LinuxNeste tutorial, configure a replicação de instantâneo do SQL Server no Linux com duas instâncias do SQL Server usando Transact-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
Neste 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
Confira Usar o SSMS para gerenciar o SQL Server em 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.BashCopiar
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.SQLCopiar
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)
Na outra instância do SQL Server, o assinante, crie o banco de dados para receber os artigos.
SQLCopiarCREATE 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'BashCopiar
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.SQLCopiar
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''--in this example, it will be the name of the publisher SET @distributorlogin = N'' SET @distributorpassword = N'' -- 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] 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 TSQL no editor.SQLCopiar
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'' SET @distributorlogin = N'' SET @distributorpassword = N'' -- 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 TSQL no editor.SQLCopiar
DECLARE @replicationdb AS sysname DECLARE @publisherlogin AS sysname DECLARE @publisherpassword AS sysname SET @replicationdb = N'Sales' SET @publisherlogin = N'' SET @publisherpassword = N'' use [Sales] 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 ''''.', @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
- Criar artigos da tabela de vendas Execute os seguintes comandos TSQL no publicador.SQLCopiar
use [Sales] 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 TSQL no editor.SQLCopiar
DECLARE @subscriber AS sysname DECLARE @subscriber_db AS sysname DECLARE @subscriberLogin AS sysname DECLARE @subscriberPassword AS sysname SET @subscriber = N'' -- for example, MSSQLSERVER SET @subscriber_db = N'Sales' SET @subscriberLogin = N'' SET @subscriberPassword = N'' use [Sales] 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:SQLCopiar
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:
SQLCopiarUSE msdb; --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:
SQLCopiarUSE msdb; --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:
SQLCopiarSELECT * 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 Transact-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
Confira também
Para obter informações detalhadas sobre a replicação, confira Documentação da Replicação do SQL Server.
Próximas etapas
Conceitos: Replicação do SQL Server em Linux
Procedimentos armazenados de replicação.
Configurar a replicação com T-SQL
[!INCLUDE 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. O publicador e o distribuidor serão a mesma instância e o assinante estará em uma instância separada.
[!div class="checklist"]
- 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
Neste 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
Confira Usar o SSMS para gerenciar o SQL Server em Linux.
[!NOTE] [!INCLUDESQL Server 2017] (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)
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''--in this example, it will be the name of the publisher SET @distributorlogin = N'' SET @distributorpassword = N'' -- 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] 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 TSQL no editor.
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'' SET @distributorlogin = N'' SET @distributorpassword = N'' -- 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 TSQL no editor.
DECLARE @replicationdb AS sysname DECLARE @publisherlogin AS sysname DECLARE @publisherpassword AS sysname SET @replicationdb = N'Sales' SET @publisherlogin = N'' SET @publisherpassword = N'' use [Sales] 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 ''''.', @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
- Criar artigos da tabela de vendas Execute os seguintes comandos TSQL no publicador.
use [Sales] 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 TSQL no editor.
DECLARE @subscriber AS sysname DECLARE @subscriber_db AS sysname DECLARE @subscriberLogin AS sysname DECLARE @subscriberPassword AS sysname SET @subscriber = N'' -- for example, MSSQLSERVER SET @subscriber_db = N'Sales' SET @subscriberLogin = N'' SET @subscriberPassword = N'' use [Sales] 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; --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; --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 Transact-SQL.
[!div class="checklist"]
- 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
Confira também
Para obter informações detalhadas sobre a replicação, confira Documentação da Replicação do SQL Server.
Próximas etapas
Conceitos: Replicação do SQL Server em Linux
Procedimentos armazenados de replicação.