Perguntas Frequentes

Configurar a replicação com T-SQL
Última atualização 4 ano(s) atrás

Configurar a replicação com T-SQL

  • 09/12/2019
  • 3 minutos para o fim da leitura
    • image
    • image
Aplica-se a:
sim
SQL Server (todas as versões compatíveis) – 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.

  • 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

  1. 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
    
  2. 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.

    SQLCopiar
    CREATE DATABASE Sales
    GO
    
  3. 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/
    
  4. 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
    
  5. 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
    
  6. 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
    
  7. 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'
    
  8. 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
    
  9. 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:

    SQLCopiar
    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:

    SQLCopiar
    USE msdb;
    --distribute the publication to subscriber, for example
    EXEC dbo.sp_start_job N'DISTRIBUTOR-PUBLICATION-SnapshotRepl-SUBSCRIBER'
    GO
    
  10. Conectar assinante e consultar dados replicados.

    No assinante, verifique se a replicação está funcionando executando a consulta a seguir:

    SQLCopiar
    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.

  • 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

  1. 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
  2. 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
  3. 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/
  4. 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
  5. 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
  6. 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
  7. 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'
  8. 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
  9. 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
  10. 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.


Por favor, aguarde!

Por favor aguarde... vai levar um segundo!