Cómo crear una publicación (programación de la replicación con Transact-SQL)

Las publicaciones pueden crearse mediante programación con procedimientos almacenados de replicación. Los procedimientos almacenados que se usen dependerán del tipo de publicación creado.

Nota de seguridadNota de seguridad

Siempre que sea posible, utilice la autenticación de Windows. Cuando sea posible, pida a los usuarios que especifiquen credenciales de seguridad en tiempo de ejecución. Si debe almacenar las credenciales en un archivo de script, proteja el archivo para evitar el acceso no autorizado.

Para crear una publicación transaccional o de instantáneas

  1. En la base de datos de publicación del publicador, ejecute sp_replicationdboption (Transact-SQL) para habilitar la publicación de la base de datos actual con la replicación transaccional o de instantáneas.

  2. En el caso de una publicación transaccional, determine si existe un trabajo de Agente de registro del LOG para la base de datos de publicación. Este paso no es necesario para las publicaciones de instantáneas.

    • Si existe un trabajo de Agente de registro del LOG para la base de datos de publicación, continúe en el paso 3.

    • Si no está seguro de que exista un Agente de registro del LOG para una base de datos publicada, ejecute sp_helplogreader_agent (Transact-SQL) en la base de datos de publicación del publicador.

    • Si el conjunto de resultados está vacío, cree un trabajo de Agente de registro del LOG. En el publicador, ejecute sp_addlogreader_agent (Transact-SQL). Especifique las credenciales de Windows de Microsoft con las que se ejecuta el agente para @job_name y @password. Si el agente va a usar la autenticación de SQL Server al conectarse al publicador, también debe especificar un valor de 0 para @publisher_security_mode y la información de inicio de sesión de MicrosoftSQL Server para @publisher_login y @publisher_password. Continúe en el paso 3.

  3. En el publicador, ejecute sp_addpublication (Transact-SQL). Especifique un nombre de publicación para @publicationy, en el caso del parámetro @repl_freq, especifique un valor de snapshot para una publicación de instantáneas o un valor de continuous para una publicación transaccional. Especifique cualquier otra opción de publicación. Esto define la publicación.

    [!NOTA]

    Los nombres de publicación no pueden incluir los caracteres siguientes:

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

  4. En el publicador, ejecute sp_addpublication_snapshot (Transact-SQL). Especifique el nombre de publicación usado en el paso 3 para @publication y las credenciales de Windows con las que se ejecuta el Agente de instantáneas para @snapshot_job_name y @password. Si el agente va a usar la autenticación de SQL Server al conectarse al publicador, también debe especificar un valor de 0 para @publisher_security_mode y la información de inicio de sesión de SQL Server para @publisher_login y @publisher_password. Esto crea un trabajo de Agente de instantáneas para la publicación.

    Nota de seguridadNota de seguridad

     Al configurar un publicador con un distribuidor remoto, los valores suministrados para todos los parámetros, incluidos job_login y job_password, se envían al distribuidor como texto simple. Antes de ejecutar este procedimiento almacenado, se recomienda cifrar la conexión entre el publicador y su distribuidor remoto. Para obtener más información, vea Cifrar conexiones a SQL Server.

  5. Agregue artículos a la publicación. Para obtener más información, vea Cómo definir un artículo (programación de la replicación con Transact-SQL).

  6. Inicie el trabajo del Agente de instantáneas para generar la instantánea inicial de esta publicación. Para obtener más información, vea Cómo crear la instantánea inicial (programación de la replicación con Transact-SQL).

Para crear una publicación de mezcla

  1. En el publicador, ejecute sp_replicationdboption (Transact-SQL) para habilitar la publicación de la base de datos actual con la replicación de mezcla.

  2. En la base de datos de publicación del publicador, ejecute sp_addmergepublication (Transact-SQL). Especifique un nombre de publicación para @publication y cualquier otra opción de publicación. Esto define la publicación.

    [!NOTA]

    Los nombres de publicación no pueden incluir los caracteres siguientes:

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

  3. En el publicador, ejecute sp_addpublication_snapshot (Transact-SQL). Especifique el nombre de publicación usado en el paso 2 para @publication y las credenciales de Windows con las que se ejecuta el Agente de instantáneas para @snapshot_job_name y @password. Si el agente va a usar la autenticación de SQL Server al conectarse al publicador, también debe especificar un valor de 0 para @publisher_security_mode y la información de inicio de sesión de SQL Server para @publisher_login y @publisher_password. Esto crea un trabajo de Agente de instantáneas para la publicación.

    Nota de seguridadNota de seguridad

     Al configurar un publicador con un distribuidor remoto, los valores suministrados para todos los parámetros, incluidos job_login y job_password, se envían al distribuidor como texto simple. Antes de ejecutar este procedimiento almacenado, se recomienda cifrar la conexión entre el publicador y su distribuidor remoto. Para obtener más información, vea Cifrar conexiones a SQL Server.

  4. Agregue artículos a la publicación. Para obtener más información, vea Cómo definir un artículo (programación de la replicación con Transact-SQL).

  5. Inicie el trabajo del Agente de instantáneas para generar la instantánea inicial de esta publicación. Para obtener más información, vea Cómo crear la instantánea inicial (programación de la replicación con Transact-SQL).

Ejemplo

Este ejemplo crea una publicación transaccional. Las variables de scripting se usan para pasar las credenciales de Windows necesarias para crear los trabajos del Agente de instantáneas y del Agente de registro del LOG.

-- 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'AdventureWorks'; 
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 ejemplo crea una publicación de mezcla. Las variables de scripting se usan para pasar las credenciales de Windows necesarias para crear el trabajo del Agente de instantáneas.

-- 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'AdventureWorks'; 
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 [AdventureWorks]
EXEC sp_addmergepublication 
-- These parameters are optional.
  @publication = @publication,
  -- optional parameters 
  @description = N'Merge publication of AdventureWorks.',
  @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