Como criar uma publicação (Programação Transact-SQL de replicação)

Publicações podem ser criadas programaticamente usando procedimentos armazenados de replicação. Os procedimentos armazenados a serem usados dependerão do tipo de publicação a ser criada.

Observação sobre segurançaObservação sobre segurança

Quando possível, use a Autenticação do Windows.Quando possível, solicite que os usuários insiram as credenciais de segurança em tempo de execução. Se for necessário armazenar credenciais em um arquivo de script, você deverá proteger o arquivo para evitar acesso não autorizado.

Para criar uma publicação de instantâneo ou transacional

  1. No Publicador do banco de dados de publicação, execute sp_replicationdboption (Transact-SQL) para habilitar publicação do banco de dados atual usando replicação de instantâneo ou transacional.

  2. Para uma publicação transacional, determine se um existe um trabalho do Log Reader Agent para o banco de dados de publicação. (Essa etapa não é requerida para publicações de instantâneo.)

    • Se já houver um trabalho do Log Reader Agent para o banco de dados de publicação, passe à etapa 3.

    • Se você não estiver seguro quanto à existência de um trabalho do Log Reader Agent para um banco de dados publicado, execute sp_helplogreader_agent (Transact-SQL) no Publicador do banco de dados de publicação.

    • Se o conjunto de resultados estiver vazio, crie um trabalho do Log Reader Agent. No Publicador, execute sp_addlogreader_agent (Transact-SQL). Especifique as credenciais do Microsoft Windows com as quais o agente é executado para @job_name e @password. Se o agente usar autenticação do SQL Server ao se conectar ao Publicador, será necessário especificar também um valor 0 para @publisher_security_mode e as informações de logon do Microsoft SQL Server para @publisher_login e @publisher_password. Passe à etapa 3.

  3. No Publicador, execute sp_addpublication (Transact-SQL). Especifique um nome de publicação para @publication, e, para o parâmetro @repl_freq, especifique um valor de snapshot para uma publicação de instantâneo ou um valor de continuous para uma publicação transacional. Especifique quaisquer outras opções de publicação. Isso define a publicação.

    ObservaçãoObservação

    Os nomes de publicação não podem incluir nenhum dos seguintes caracteres:

    % * [ ] | : " ? \ / < >

  4. No Publicador, execute sp_addpublication_snapshot (Transact-SQL). Especifique o nome de publicação usado na etapa 3 para @publication e as credenciais do Windows com as quais o Snapshot Agent é executado para @snapshot_job_name e @password. Se o agente usar autenticação do SQL Server ao se conectar ao Publicador, será preciso especificar também um valor 0 para @publisher_security_mode e as informações de logon do SQL Server para @publisher_login e @publisher_password. Isso cria um trabalho do Snapshot Agent para a publicação.

    Observação sobre segurançaObservação sobre segurança

     Quando um Publicador é configurado com um Distribuidor remoto, os valores fornecidos para todos os parâmetros, inclusive job_login e job_password, são enviados ao Distribuidor como texto sem formatação. Você deve criptografar a conexão entre o Publicador e seu Distribuidor remoto antes de executar esse procedimento armazenado. Para obter mais informações, consulte Criptografando conexões com o SQL Server.

  5. Adicione artigos à publicação. Para obter mais informações, consulte Como definir um artigo (Programação Transact-SQL de replicação).

  6. Inicie o trabalho do Snapshot Agent para gerar o instantâneo inicial para essa publicação. Para obter mais informações, consulte Como criar o instantâneo inicial (Programação Transact-SQL de replicação).

Para criar uma publicação de mesclagem

  1. No Publicador, execute sp_replicationdboption (Transact-SQL) para habilitar publicação do banco de dados atual usando replicação de mesclagem.

  2. No Publicador do banco de dados de publicação, execute sp_addmergepublication (Transact-SQL). Especifique o nome da publicação para @publication e quaisquer outras opções de publicação. Isso define a publicação.

    ObservaçãoObservação

    Os nomes de publicação não podem incluir nenhum dos caracteres a seguir:

    % * [ ] | : " ? \ / < >

  3. No Publicador, execute sp_addpublication_snapshot (Transact-SQL). Especifique o nome de publicação usado na etapa 2 para @publication e as credenciais do Windows com as quais o Snapshot Agent é executado para @snapshot_job_name e @password. Se o agente usar autenticação do SQL Server ao se conectar ao Publicador, será preciso especificar também um valor 0 para @publisher_security_mode e as informações de logon do SQL Server para @publisher_login e @publisher_password. Isso cria um trabalho do Snapshot Agent para a publicação.

    Observação sobre segurançaObservação sobre segurança

     Quando um Publicador é configurado com um Distribuidor remoto, os valores fornecidos para todos os parâmetros, inclusive job_login e job_password, são enviados ao Distribuidor como texto sem formatação. Você deve criptografar a conexão entre o Publicador e seu Distribuidor remoto antes de executar esse procedimento armazenado. Para obter mais informações, consulte Criptografando conexões com o SQL Server.

  4. Adicione artigos à publicação. Para obter mais informações, consulte Como definir um artigo (Programação Transact-SQL de replicação).

  5. Inicie o trabalho do Snapshot Agent para gerar o instantâneo inicial para essa publicação. Para obter mais informações, consulte Como criar o instantâneo inicial (Programação Transact-SQL de replicação).

Exemplo

Este exemplo cria uma publicação transacional. As variáveis de script são usadas para passar as credenciais do Windows necessárias para criar trabalhos do Snapshot Agent e do Log Reader Agent.

-- To avoid storing the login and password in the script file, the values 
-- are passed into SQLCMD as scripting variables. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2008R2'; 
SET @publication = N'AdvWorksProductTran'; 
-- Windows account used to run the Log Reader and Snapshot Agents.
SET @login = $(Login); 
-- This should be passed at runtime.
SET @password = $(Password); 

-- Enable transactional or snapshot replication on the publication database.
EXEC sp_replicationdboption 
    @dbname=@publicationDB, 
    @optname=N'publish',
    @value = N'true';

-- Execute sp_addlogreader_agent to create the agent job. 
EXEC sp_addlogreader_agent 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;

-- Create a new transactional publication with the required properties. 
EXEC sp_addpublication 
    @publication = @publication, 
    @status = N'active',
    @allow_push = N'true',
    @allow_pull = N'true',
    @independent_agent = N'true';

-- Create a new snapshot job for the publication, using a default schedule.
EXEC sp_addpublication_snapshot 
    @publication = @publication, 
    @job_login = @login, 
    @job_password = @password,
    -- Explicitly specify the use of Windows Integrated Authentication (default) 
    -- when connecting to the Publisher.
    @publisher_security_mode = 1;
GO

Este exemplo cria uma publicação de mesclagem. As variáveis de script são usadas para passar as credenciais do Windows necessárias para criar o trabalho do Snapshot Agent.

-- To avoid storing the login and password in the script file, the value 
-- is passed into SQLCMD as a scripting variable. For information about 
-- how to use scripting variables on the command line and in SQL Server
-- Management Studio, see the "Executing Replication Scripts" section in
-- the topic "Programming Replication Using System Stored Procedures".

--Declarations for adding a merge publication
DECLARE @publicationDB AS sysname;
DECLARE @publication AS sysname;
DECLARE @login AS sysname;
DECLARE @password AS sysname;
SET @publicationDB = N'AdventureWorks2008R2'; 
SET @publication = N'AdvWorksSalesOrdersMerge'; 
SET @login = $(Login);
SET @password = $(Password);

-- Enable merge replication on the publication database, using defaults.
USE master
EXEC sp_replicationdboption 
  @dbname=@publicationDB, 
  @optname=N'merge publish',
  @value = N'true' 

-- Create a new merge publication, explicitly setting the defaults. 
USE [AdventureWorks2008R2]
EXEC sp_addmergepublication 
-- These parameters are optional.
  @publication = @publication,
  -- optional parameters 
  @description = N'Merge publication of AdventureWorks2008R2.',
  @publication_compatibility_level  = N'90RTM';

-- Create a new snapshot job for the publication.
EXEC sp_addpublication_snapshot 
  @publication = @publication, 
  @job_login = @login, 
  @job_password = @password;
GO