Créer une publicationCreate a Publication

S’APPLIQUE À : ouiSQL Server ouiAzure SQL Database (Managed Instance uniquement) nonAzure Synapse Analytics (SQL DW) nonParallel Data Warehouse APPLIES TO: yesSQL Server yesAzure SQL Database (Managed Instance only) noAzure Synapse Analytics (SQL DW) noParallel Data Warehouse

Cette rubrique explique comment créer une publication dans SQL Server 2019 (15.x)SQL Server 2019 (15.x) à l'aide de SQL Server Management StudioSQL Server Management Studio, de Transact-SQLTransact-SQLou d'objets RMO (Replication Management Objects).This topic describes how to create a publication in SQL Server 2019 (15.x)SQL Server 2019 (15.x) by using SQL Server Management StudioSQL Server Management Studio, Transact-SQLTransact-SQL, or Replication Management Objects (RMO).

Dans cette rubriqueIn This Topic

Avant de commencerBefore You Begin

Limitations et restrictionsLimitations and Restrictions

  • Les noms de publications et d’articles ne peuvent pas contenir les caractères suivants : % , * , [ , ] , | , : , " , ?Publication and article names cannot include any of the following characters: % , * , [ , ] , | , : , " , ? , ' , \ , / , < , >., ' , \ , / , < , >. Si les objets de la base de données contiennent l’un de ces caractères, et si vous voulez les répliquer, vous devez spécifier un nom d’article différent du nom de l’objet dans la boîte de dialogue Propriétés de l’article - <Article> , qui est disponible dans la page Articles de l’Assistant.If objects in the database include any of these characters and you want to replicate them, you must specify an article name that is different from the object name in the Article Properties - <Article> dialog box, which is available from the Articles page in the wizard.

SécuritéSecurity

Lorsque c'est possible, demande aux utilisateurs de fournir les informations d'identification au moment de l'exécution.When possible, prompt users to enter security credentials at runtime. Si vous devez stocker des informations d'identification, utilisez les Services de chiffrement fournis par MicrosoftMicrosoft Windows .NET Framework.If you must store credentials, use the cryptographic services provided by the MicrosoftMicrosoft Windows .NET Framework.

Utilisation de SQL Server Management StudioUsing SQL Server Management Studio

Créez des publication et définissez des articles avec l'Assistant Nouvelle publication.Create publications and define articles with the New Publication Wizard. Après avoir créé une publication, affichez et modifiez les propriétés de publication dans la boîte de dialogue Propriétés de la publication - <Publication> .After a publication is created, view and modify publication properties in the Publication Properties - <Publication> dialog box. Pour plus d’informations sur la création d’une publication à partir d’une base de données Oracle, consultez Créer une publication à partir d’une base de données Oracle.For information about creating a publication from an Oracle database, see Create a Publication from an Oracle Database.

Pour créer une publication et définir des articlesTo create a publication and define articles

  1. Connectez-vous au serveur de publication dans MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio, puis développez le nœud du serveur.Connect to the Publisher in MicrosoftMicrosoft SQL Server Management StudioSQL Server Management Studio, and then expand the server node.

  2. Développez le dossier Réplication , puis cliquez avec le bouton droit sur le dossier Publications locales .Expand the Replication folder, and then right-click the Local Publications folder.

  3. Cliquez sur Nouvelle publication.Click New Publication.

  4. Exécutez les pages de l'Assistant Nouvelle publication pour.Follow the pages in the New Publication Wizard to:

    • Spécifier un serveur de distribution si la distribution n'a pas été configurée sur le serveur.Specify a Distributor if distribution has not been configured on the server. Pour plus d’informations sur la configuration de la distribution, consultez Configurer la publication et la distribution.For more information about configuring distribution, see Configure Publishing and Distribution.

      Si vous spécifiez dans la page Serveur de distribution que le serveur de publication se comportera comme son propre serveur de distribution (serveur de distribution local), et si ce serveur n'est pas configuré comme serveur de distribution, l'Assistant Nouvelle publication configurera ce serveur.If you specify on the Distributor page that the Publisher server will act as its own Distributor (a local Distributor), and the server is not configured as a Distributor, the New Publication Wizard will configure the server. Vous spécifierez un dossier d'instantanés par défaut pour le serveur de distribution dans la page Dossier d'instantanés .You will specify a default snapshot folder for the Distributor on the Snapshot Folder page. Le dossier d'instantanés correspond à un simple répertoire que vous définissez sous la forme d'un partage ; les agents qui lisent et écrivent dans le dossier doivent disposer des autorisations suffisantes pour pouvoir y accéder.The snapshot folder is simply a directory that you have designated as a share; agents that read from and write to this folder must have sufficient permissions to access it. Pour plus d’informations sur une sécurisation appropriée du dossier, consultez Sécuriser le dossier d’instantanés.For more information about securing the folder appropriately, see Secure the Snapshot Folder.

      Si vous spécifiez qu'un autre serveur doit jouer le rôle de serveur de distribution, vous devez entrer un mot de passe dans la page Mot de passe d'administration pour les connexions effectuées du serveur de publication sur le serveur de distribution.If you specify that another server should act as the Distributor, you must enter a password on the Administrative Password page for connections made from the Publisher to the Distributor. Ce mot de passe doit correspondre à celui qui a été spécifié lorsque le serveur de publication a été activé sur le serveur de distribution distant.This password must match the password specified when the Publisher was enabled at the remote Distributor.

      Pour plus d'informations, voir Configure Distribution.For more information, see Configure Distribution.

    • Choisissez une base de données de publication.Choose a publication database.

    • Sélectionnez un type de publication.Select a publication type. Pour plus d’informations, consultez Types de réplication.For more information, see Types of Replication.

    • Spécifiez les données et les objets de base de données à publier ; en option, filtrez les colonnes des articles des tables, et définissez des propriétés d'articles.Specify data and database objects to publish; optionally filter columns from table articles, and set article properties.

    • En option, filtrez les lignes des articles des tables.Optionally filter rows from table articles. Pour plus d’informations, consultez Filtrer des données publiées.For more information, see Filter Published Data.

    • Définissez la planification de l'Agent d'instantané.Set the Snapshot Agent schedule.

    • Spécifiez les informations de connexion sous lesquelles les Agents de réplication suivants s'exécuteront et se connecteront :Specify the credentials under which the following replication agents run and make connections:

      - Agent d’instantané pour toutes les publications.- Snapshot Agent for all publications.

      - Agent de lecture du journal pour toutes les publications transactionnelles.- Log Reader Agent for all transactional publications.

      - Agent de lecture de la file d’attente pour les publications transactionnelles acceptant les abonnements avec mise à jour.- Queue Reader Agent for transactional publications that allow updating subscriptions.

      Pour plus d'informations, consultez Replication Agent Security Model et Replication Security Best Practices.For more information, see Replication Agent Security Model and Replication Security Best Practices.

    • En option, scriptez la publication.Optionally script the publication. Pour plus d'informations, voir Scripting Replication.For more information, see Scripting Replication.

    • Spécifiez le nom de la publication.Specify a name for the publication.

Utilisation de Transact-SQLUsing Transact-SQL

Il est possible de créer des publications par programme en utilisant les procédures stockées de réplication.Publications can be created programmatically using replication stored procedures. Les procédures stockées à utiliser dépendent du type de publication à créer.The stored procedures that are used will depend on the type of publication being created.

Pour créer une publication d'instantané ou une publication transactionnelleTo create a snapshot or transactional publication

  1. Dans la base de données de publication sur le serveur de publication, exécutez sp_replicationdboption (Transact-SQL) pour activer la publication de la base de données actuelle à l’aide de la réplication transactionnelle ou d’instantané.At the Publisher on the publication database, execute sp_replicationdboption (Transact-SQL) to enable publication of the current database using snapshot or transactional replication.

  2. Pour une publication transactionnelle, déterminez si un travail de l'Agent de lecture du journal existe pour la base de données de publication.For a transactional publication, determine whether a Log Reader Agent job exists for the publication database. (Cette étape n'est pas requise pour les publications d'instantané.)(This step is not required for snapshot publications.)

    • Si un travail de l'Agent de lecture du journal existe pour la base de données de publication, passez à l'étape 3.If a Log Reader Agent job exists for the publication database, proceed to step 3.

    • Si vous ne savez pas si un travail de l’Agent de lecture du journal existe pour une base de données publiée, exécutez sp_helplogreader_agent (Transact-SQL) au niveau du serveur de publication dans la base de données de publication.If you are unsure whether a Log Reader Agent job exists for a published database, execute sp_helplogreader_agent (Transact-SQL) at the Publisher on the publication database.

    • Si le jeu de résultats est vide, créez un travail de l'Agent de lecture du journal.If the result set is empty, create a Log Reader Agent job. Sur le serveur de publication, exécutez sp_addlogreader_agent (Transact-SQL).At the Publisher, execute sp_addlogreader_agent (Transact-SQL). Indiquez les informations d’identification Windows MicrosoftMicrosoft sous lesquelles l’agent s’exécute pour @job_login et @job_password.Specify the MicrosoftMicrosoft Windows credentials under which the agent runs for @job_name and @password. Si l’agent doit utiliser l’authentification SQL Server lors de la connexion au serveur de publication, vous devez également affecter la valeur 0 à @publisher_security_mode et spécifier les informations de connexion MicrosoftMicrosoft SQL ServerSQL Server pour @publisher_login et @publisher_password.If the agent will use SQL Server Authentication when connecting to the Publisher, you must also specify a value of 0 for @publisher_security_mode and the MicrosoftMicrosoft SQL ServerSQL Server login information for @publisher_login and @publisher_password. Passez à l'étape 3.Proceed to step 3.

  3. Sur le serveur de publication, exécutez sp_addpublication (Transact-SQL).At the Publisher, execute sp_addpublication (Transact-SQL). Spécifiez un nom de publication pour @publication et, pour le paramètre @repl_freq, spécifiez la valeur snapshot pour une publication d’instantané ou la valeur continuous pour une publication transactionnelle.Specify a publication name for @publication, and, for the @repl_freq parameter, specify a value of snapshot for a snapshot publication or a value of continuous for a transactional publication. Spécifiez d'autres options de publication éventuelles.Specify any other publication options. Cela définit la publication.This defines the publication.

    Notes

    Un nom de publication ne doit pas contenir les caractères suivants :Publication names cannot include the following characters:

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

  4. Sur le serveur de publication, exécutez sp_addpublication_snapshot (Transact-SQL).At the Publisher, execute sp_addpublication_snapshot (Transact-SQL). Spécifiez le nom de publication utilisé à l’étape 3 pour @publication et les informations d’identification Windows sous lesquelles l’Agent d’instantané s’exécute pour @snapshot_job_name et @password.Specify the publication name used in step 3 for @publication and the Windows credentials under which the Snapshot Agent runs for @snapshot_job_name and @password. Si l’agent doit utiliser l’authentification SQL Server lors de la connexion au serveur de publication, vous devez également affecter la valeur 0 à @publisher_security_mode et spécifier les informations de connexion SQL ServerSQL Server pour @publisher_login et @publisher_password.If the agent will use SQL Server Authentication when connecting to the Publisher, you must also specify a value of 0 for @publisher_security_mode and the SQL ServerSQL Server login information for @publisher_login and @publisher_password. Il s'ensuit la création d'un travail de l'Agent d'instantané pour la publication.This creates a Snapshot Agent job for the publication.

    Important

    Lors de la configuration d'un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour tous les paramètres, y compris job_login et job_password, sont envoyées en texte brut au serveur de distribution.When configuring a Publisher with a remote Distributor, the values supplied for all parameters, including job_login and job_password, are sent to the Distributor as plain text. Vous devez chiffrer la connexion entre le serveur de publication et son serveur de distribution distant avant d'exécuter cette procédure stockée.You should encrypt the connection between the Publisher and its remote Distributor before executing this stored procedure. Pour plus d’informations, consultez Activer des connexions chiffrées dans le moteur de base de données (Gestionnaire de configuration SQL Server).For more information, see Enable Encrypted Connections to the Database Engine (SQL Server Configuration Manager).

  5. Ajoutez des articles à la publication.Add articles to the publication. Pour plus d’informations, consultez définir un Article.For more information, see Define an Article.

  6. Démarrez le travail de l'Agent d'instantané pour générer l'instantané initial pour cette publication.Start the Snapshot Agent job to generate the initial snapshot for this publication. Pour plus d’informations, voir Create and Apply the Initial Snapshot.For more information, see Create and Apply the Initial Snapshot.

Pour créer une publication de fusionTo create a merge publication

  1. Sur le serveur de publication, exécutez sp_replicationdboption (Transact-SQL) pour activer la publication de la base de données actuelle à l’aide de la réplication de fusion.At the Publisher, execute sp_replicationdboption (Transact-SQL) to enable publication of the current database using merge replication.

  2. Dans la base de données de publication sur le serveur de publication, exécutez sp_addmergepublication (Transact-SQL).At the Publisher on the publication database, execute sp_addmergepublication (Transact-SQL). Spécifiez le nom de la publication pour @publication et d’autres options de publication éventuelles.Specify a name for the publication for @publication and any other publication options. Cela définit la publication.This defines the publication.

    Notes

    Un nom de publication ne doit pas contenir les caractères suivants :Publication names cannot include the following characters:

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

  3. Sur le serveur de publication, exécutez sp_addpublication_snapshot (Transact-SQL).At the Publisher, execute sp_addpublication_snapshot (Transact-SQL). Spécifiez le nom de publication utilisé à l’étape 2 pour @publication et les informations d’identification Windows sous lesquelles l’Agent d’instantané s’exécute pour @snapshot_job_name et @password.Specify the publication name used in step 2 for @publication and the Windows credentials under which the Snapshot Agent runs for @snapshot_job_name and @password. Si l’agent doit utiliser l’authentification SQL Server lors de la connexion au serveur de publication, vous devez également affecter la valeur 0 à @publisher_security_mode et spécifier les informations de connexion SQL ServerSQL Server pour @publisher_login et @publisher_password.If the agent will use SQL Server Authentication when connecting to the Publisher, you must also specify a value of 0 for @publisher_security_mode and the SQL ServerSQL Server login information for @publisher_login and @publisher_password. Il s'ensuit la création d'un travail de l'Agent d'instantané pour la publication.This creates a Snapshot Agent job for the publication.

    Important

    Lors de la configuration d'un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour tous les paramètres, y compris job_login et job_password, sont envoyées en texte brut au serveur de distribution.When configuring a Publisher with a remote Distributor, the values supplied for all parameters, including job_login and job_password, are sent to the Distributor as plain text. Vous devez chiffrer la connexion entre le serveur de publication et son serveur de distribution distant avant d'exécuter cette procédure stockée.You should encrypt the connection between the Publisher and its remote Distributor before executing this stored procedure. Pour plus d’informations, consultez Activer des connexions chiffrées dans le moteur de base de données (Gestionnaire de configuration SQL Server).For more information, see Enable Encrypted Connections to the Database Engine (SQL Server Configuration Manager).

  4. Ajoutez des articles à la publication.Add articles to the publication. Pour plus d’informations, consultez définir un Article.For more information, see Define an Article.

  5. Démarrez le travail de l'Agent d'instantané pour générer l'instantané initial pour cette publication.Start the Snapshot Agent job to generate the initial snapshot for this publication. Pour plus d’informations, voir Create and Apply the Initial Snapshot.For more information, see Create and Apply the Initial Snapshot.

Exemple (Transact-SQL)Example (Transact-SQL)

Cet exemple crée une publication transactionnelle.This example creates a transactional publication. Des variables de script sont utilisées pour transmettre les informations d'identification Windows nécessaires pour créer les travaux pour l'Agent d'instantané et l'Agent de lecture du journal.Scripting variables are used to pass Windows credentials that are needed to create jobs for the Snapshot Agent and 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'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

Cet exemple crée une publication de fusion.This example creates a merge publication. Des variables de script sont utilisées pour transmettre les informations d'identification Windows nécessaires pour créer le travail pour l'Agent d'instantané.Scripting variables are used to pass Windows credentials that are needed to create the job for the 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'AdventureWorks2012'; 
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 [AdventureWorks2012]
EXEC sp_addmergepublication 
-- These parameters are optional.
  @publication = @publication,
  -- optional parameters 
  @description = N'Merge publication of AdventureWorks2012.',
  @publication_compatibility_level  = N'120RTM';

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

Utilisation d'objets RMO (Replication Management Objects)Using Replication Management Objects (RMO)

Vous pouvez créer des publications par programme à l'aide d'objets RMO (Replication Management Objects).You can create publications programmatically by using Replication Management Objects (RMO). Les classes RMO que vous utilisez pour créer une publication dépendent du type de publication créé.The RMO classes that you use to create a publication depend on the type of publication you create.

Pour créer une publication d'instantané ou une publication transactionnelleTo create a snapshot or transactional publication

  1. Créez une connexion au serveur de publication en utilisant la classe ServerConnection .Create a connection to the Publisher by using the ServerConnection class.

  2. Créez une instance de la classe ReplicationDatabase pour la base de données de publication, affectez à la propriété ConnectionContext l'instance de ServerConnection créée à l'étape 1, puis appelez la méthode LoadProperties .Create an instance of the ReplicationDatabase class for the publication database, set the ConnectionContext property to the instance of ServerConnection from step 1, and call the LoadProperties method. Si LoadProperties retourne false, vérifiez que la base de données existe.If LoadProperties returns false, verify that the database exists.

  3. Si la propriété EnabledTransPublishing a la valeur false, affectez-lui la valeur true.If the EnabledTransPublishing property is false, set it to true.

  4. Pour une publication transactionnelle, vérifiez la valeur de la propriété LogReaderAgentExists .For a transactional publication, check the value of the LogReaderAgentExists property. Si elle a la valeur true, un travail de l'Agent de lecture du journal existe déjà pour cette base de données.If this property is true, a Log Read Agent job already exists for this database. Si elle a la valeur false, procédez comme suit :If this property is false, do the following:

  5. Créez une instance de la classe TransPublication et définissez les propriétés suivantes pour cet objet :Create an instance of the TransPublication class, and set the following properties for this object:

  6. Appelez la méthode Create pour créer la publication.Call the Create method to create the publication.

    Important

    Lors de la configuration d'un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour toutes les propriétés, y compris SnapshotGenerationAgentProcessSecurity, sont envoyées sous forme de texte brut au serveur de distribution.When configuring a Publisher with a remote Distributor, the values supplied for all properties, including SnapshotGenerationAgentProcessSecurity, are sent to the Distributor as plain text. Vous devez chiffrer la connexion entre le serveur de publication et son serveur de distribution distant avant d'appeler la méthode Create .You should encrypt the connection between the Publisher and its remote Distributor before calling the Create method. Pour plus d’informations, consultez Activer des connexions chiffrées dans le moteur de base de données (Gestionnaire de configuration SQL Server).For more information, see Enable Encrypted Connections to the Database Engine (SQL Server Configuration Manager).

  7. Appelez la méthode CreateSnapshotAgent pour créer le travail de l'Agent d'instantané pour le serveur de publication.Call the CreateSnapshotAgent method to create the Snapshot Agent job for the publication.

Pour créer une publication de fusionTo create a merge publication

  1. Créez une connexion au serveur de publication en utilisant la classe ServerConnection .Create a connection to the Publisher by using the ServerConnection class.

  2. Créez une instance de la classe ReplicationDatabase pour la base de données de publication, affectez à la propriété ConnectionContext l'instance de ServerConnection créée à l'étape 1, puis appelez la méthode LoadProperties .Create an instance of the ReplicationDatabase class for the publication database, set the ConnectionContext property to the instance of ServerConnection from step 1, and call the LoadProperties method. Si LoadProperties retourne false, vérifiez que la base de données existe.If LoadProperties returns false, verify that the database exists.

  3. Si EnabledMergePublishing Property is false, affectez-lui la valeur trueet appelez CommitPropertyChanges.If EnabledMergePublishing Property is false, set it to true, and call CommitPropertyChanges.

  4. Créez une instance de la classe MergePublication et définissez les propriétés suivantes pour cet objet :Create an instance of the MergePublication class, and set the following properties for this object:

  5. Appelez la méthode Create pour créer la publication.Call the Create method to create the publication.

    Important

    Lors de la configuration d'un serveur de publication avec un serveur de distribution distant, les valeurs fournies pour toutes les propriétés, y compris SnapshotGenerationAgentProcessSecurity, sont envoyées sous forme de texte brut au serveur de distribution.When configuring a Publisher with a remote Distributor, the values supplied for all properties, including SnapshotGenerationAgentProcessSecurity, are sent to the Distributor as plain text. Vous devez chiffrer la connexion entre le serveur de publication et son serveur de distribution distant avant d'appeler la méthode Create .You should encrypt the connection between the Publisher and its remote Distributor before calling the Create method. Pour plus d’informations, consultez Activer des connexions chiffrées dans le moteur de base de données (Gestionnaire de configuration SQL Server).For more information, see Enable Encrypted Connections to the Database Engine (SQL Server Configuration Manager).

  6. Appelez la méthode CreateSnapshotAgent pour créer le travail de l'Agent d'instantané pour le serveur de publication.Call the CreateSnapshotAgent method to create the Snapshot Agent job for the publication.

Exemples (RMO)Examples (RMO)

Cet exemple active la base de données AdventureWorks pour une publication transactionnelle, définit un travail de l'Agent de lecture du journal et crée la publication AdvWorksProductTran.This example enables the AdventureWorks database for transactional publishing, defines a Log Reader Agent job, and creates the AdvWorksProductTran publication. Un article doit être défini pour cette publication.An article must be defined for this publication. Les informations d'identification du compte Windows nécessaires pour créer le travail de l'Agent de lecture du journal et de l'Agent d'instantané sont passées au moment de l'exécution.The Windows account credentials that are needed to create the Log Reader Agent job and the Snapshot Agent job are passed at runtime. Pour savoir comment utiliser des objets RMO pour définir des articles d'instantané et des articles transactionnels, consultez Define an Article.To learn how to use RMO to define snapshot and transactional articles, see Define an Article.

// Set the Publisher, publication database, and publication names.
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";
string publisherName = publisherInstance;

ReplicationDatabase publicationDb;
TransPublication publication;

// Create a connection to the Publisher using Windows Authentication.
ServerConnection conn;
conn = new ServerConnection(publisherName);


try
{
    // Connect to the Publisher.
    conn.Connect();

    // Enable the AdventureWorks2012 database for transactional publishing.
    publicationDb = new ReplicationDatabase(publicationDbName, conn);

    // If the database exists and is not already enabled, 
    // enable it for transactional publishing.
    if (publicationDb.LoadProperties())
    {
        if (!publicationDb.EnabledTransPublishing)
        {
            publicationDb.EnabledTransPublishing = true;
        }

        // If the Log Reader Agent does not exist, create it.
        if (!publicationDb.LogReaderAgentExists)
        {
            // Specify the Windows account under which the agent job runs.
            // This account will be used for the local connection to the 
            // Distributor and all agent connections that use Windows Authentication.
            publicationDb.LogReaderAgentProcessSecurity.Login = winLogin;
            publicationDb.LogReaderAgentProcessSecurity.Password = winPassword;

            // Explicitly set authentication mode for the Publisher connection
            // to the default value of Windows Authentication.
            publicationDb.LogReaderAgentPublisherSecurity.WindowsAuthentication = true;

            // Create the Log Reader Agent job.
            publicationDb.CreateLogReaderAgent();
        }
    }
    else
    {
        throw new ApplicationException(String.Format(
            "The {0} database does not exist at {1}.",
            publicationDb, publisherName));
    }

    // Set the required properties for the transactional publication.
    publication = new TransPublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;

    // Specify a transactional publication (the default).
    publication.Type = PublicationType.Transactional;

    // Activate the publication so that we can add subscriptions.
    publication.Status = State.Active;

    // Enable push and pull subscriptions and independent Distribition Agents.
    publication.Attributes |= PublicationAttributes.AllowPull;
    publication.Attributes |= PublicationAttributes.AllowPush;
    publication.Attributes |= PublicationAttributes.IndependentAgent;

    // Specify the Windows account under which the Snapshot Agent job runs.
    // This account will be used for the local connection to the 
    // Distributor and all agent connections that use Windows Authentication.
    publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin;
    publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword;

    // Explicitly set the security mode for the Publisher connection
    // Windows Authentication (the default).
    publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = true;

    if (!publication.IsExistingObject)
    {
        // Create the transactional publication.
        publication.Create();

        // Create a Snapshot Agent job for the publication.
        publication.CreateSnapshotAgent();
    }
    else
    {
        throw new ApplicationException(String.Format(
            "The {0} publication already exists.", publicationName));
    }
}

catch (Exception ex)
{
    // Implement custom application error handling here.
    throw new ApplicationException(String.Format(
        "The publication {0} could not be created.", publicationName), ex);
}
finally
{
    conn.Disconnect();
}
' Set the Publisher, publication database, and publication names.
Dim publicationName As String = "AdvWorksProductTran"
Dim publicationDbName As String = "AdventureWorks2012"
Dim publisherName As String = publisherInstance

Dim publicationDb As ReplicationDatabase
Dim publication As TransPublication

' Create a connection to the Publisher using Windows Authentication.
Dim conn As ServerConnection
conn = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Enable the AdventureWorks2012 database for transactional publishing.
    publicationDb = New ReplicationDatabase(publicationDbName, conn)

    ' If the database exists and is not already enabled, 
    ' enable it for transactional publishing.
    If publicationDb.LoadProperties() Then
        If Not publicationDb.EnabledTransPublishing Then
            publicationDb.EnabledTransPublishing = True
        End If

        ' If the Log Reader Agent does not exist, create it.
        If Not publicationDb.LogReaderAgentExists Then
            ' Specify the Windows account under which the agent job runs.
            ' This account will be used for the local connection to the 
            ' Distributor and all agent connections that use Windows Authentication.
            publicationDb.LogReaderAgentProcessSecurity.Login = winLogin
            publicationDb.LogReaderAgentProcessSecurity.Password = winPassword

            ' Explicitly set authentication mode for the Publisher connection
            ' to the default value of Windows Authentication.
            publicationDb.LogReaderAgentPublisherSecurity.WindowsAuthentication = True

            ' Create the Log Reader Agent job.
            publicationDb.CreateLogReaderAgent()
        End If
    Else
        Throw New ApplicationException(String.Format( _
         "The {0} database does not exist at {1}.", _
         publicationDb, publisherName))
    End If

    ' Set the required properties for the transactional publication.
    publication = New TransPublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' Specify a transactional publication (the default).
    publication.Type = PublicationType.Transactional

    'Enable push and pull subscriptions and independent Distribition Agents.
    publication.Attributes = _
    publication.Attributes Or PublicationAttributes.AllowPull
    publication.Attributes = _
    publication.Attributes Or PublicationAttributes.AllowPush
    publication.Attributes = _
    publication.Attributes Or PublicationAttributes.IndependentAgent

    ' Activate the publication so that we can add subscriptions.
    publication.Status = State.Active

    ' Specify the Windows account under which the Snapshot Agent job runs.
    ' This account will be used for the local connection to the 
    ' Distributor and all agent connections that use Windows Authentication.
    publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin
    publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword

    ' Explicitly set the security mode for the Publisher connection
    ' Windows Authentication (the default).
    publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = True

    If Not publication.IsExistingObject Then
        ' Create the transactional publication.
        publication.Create()

        ' Create a Snapshot Agent job for the publication.
        publication.CreateSnapshotAgent()
    Else
        Throw New ApplicationException(String.Format( _
            "The {0} publication already exists.", publicationName))
    End If
Catch ex As Exception
    ' Implement custom application error handling here.
    Throw New ApplicationException(String.Format( _
        "The publication {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try

Cet exemple active la base de données AdventureWorks pour la publication de fusion et crée la publication AdvWorksSalesOrdersMerge.This example enables the AdventureWorks database for merge publishing and creates the AdvWorksSalesOrdersMerge publication. Des articles doivent encore être définis pour cette publication.Articles must still be defined for this publication. Les informations d'identification du compte Windows nécessaires pour créer le travail de l'Agent d'instantané sont passées au moment de l'exécution.The Windows account credentials that are needed to create the Snapshot Agent job are passed at runtime. Pour savoir comment utiliser des objets RMO pour définir des articles de fusion, consultez Define an Article.To learn how to use RMO to define merge articles, see Define an Article.

// Set the Publisher, publication database, and publication names.
string publisherName = publisherInstance;
string publicationName = "AdvWorksSalesOrdersMerge";
string publicationDbName = "AdventureWorks2012";

ReplicationDatabase publicationDb;
MergePublication publication;

// Create a connection to the Publisher.
ServerConnection conn = new ServerConnection(publisherName);

try
{
    // Connect to the Publisher.
    conn.Connect();

    // Enable the database for merge publication.				
    publicationDb = new ReplicationDatabase(publicationDbName, conn);
    if (publicationDb.LoadProperties())
    {
        if (!publicationDb.EnabledMergePublishing)
        {
            publicationDb.EnabledMergePublishing = true;
        }
    }
    else
    {
        // Do something here if the database does not exist. 
        throw new ApplicationException(String.Format(
            "The {0} database does not exist on {1}.",
            publicationDb, publisherName));
    }

    // Set the required properties for the merge publication.
    publication = new MergePublication();
    publication.ConnectionContext = conn;
    publication.Name = publicationName;
    publication.DatabaseName = publicationDbName;

    // Enable precomputed partitions.
    publication.PartitionGroupsOption = PartitionGroupsOption.True;

    // Specify the Windows account under which the Snapshot Agent job runs.
    // This account will be used for the local connection to the 
    // Distributor and all agent connections that use Windows Authentication.
    publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin;
    publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword;

    // Explicitly set the security mode for the Publisher connection
    // Windows Authentication (the default).
    publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = true;

    // Enable Subscribers to request snapshot generation and filtering.
    publication.Attributes |= PublicationAttributes.AllowSubscriberInitiatedSnapshot;
    publication.Attributes |= PublicationAttributes.DynamicFilters;

    // Enable pull and push subscriptions.
    publication.Attributes |= PublicationAttributes.AllowPull;
    publication.Attributes |= PublicationAttributes.AllowPush;

    if (!publication.IsExistingObject)
    {
        // Create the merge publication.
        publication.Create();
        
        // Create a Snapshot Agent job for the publication.
        publication.CreateSnapshotAgent();
    }
    else
    {
        throw new ApplicationException(String.Format(
            "The {0} publication already exists.", publicationName));
    }
}

catch (Exception ex)
{
    // Implement custom application error handling here.
    throw new ApplicationException(String.Format(
        "The publication {0} could not be created.", publicationName), ex);
}
finally
{
    conn.Disconnect();
}
' Set the Publisher, publication database, and publication names.
Dim publisherName As String = publisherInstance
Dim publicationName As String = "AdvWorksSalesOrdersMerge"
Dim publicationDbName As String = "AdventureWorks2012"

Dim publicationDb As ReplicationDatabase
Dim publication As MergePublication

' Create a connection to the Publisher.
Dim conn As ServerConnection = New ServerConnection(publisherName)

Try
    ' Connect to the Publisher.
    conn.Connect()

    ' Enable the database for merge publication.				
    publicationDb = New ReplicationDatabase(publicationDbName, conn)
    If publicationDb.LoadProperties() Then
        If Not publicationDb.EnabledMergePublishing Then
            publicationDb.EnabledMergePublishing = True
        End If
    Else
        ' Do something here if the database does not exist. 
        Throw New ApplicationException(String.Format( _
         "The {0} database does not exist on {1}.", _
         publicationDb, publisherName))
    End If

    ' Set the required properties for the merge publication.
    publication = New MergePublication()
    publication.ConnectionContext = conn
    publication.Name = publicationName
    publication.DatabaseName = publicationDbName

    ' Enable precomputed partitions.
    publication.PartitionGroupsOption = PartitionGroupsOption.True

    ' Specify the Windows account under which the Snapshot Agent job runs.
    ' This account will be used for the local connection to the 
    ' Distributor and all agent connections that use Windows Authentication.
    publication.SnapshotGenerationAgentProcessSecurity.Login = winLogin
    publication.SnapshotGenerationAgentProcessSecurity.Password = winPassword

    ' Explicitly set the security mode for the Publisher connection
    ' Windows Authentication (the default).
    publication.SnapshotGenerationAgentPublisherSecurity.WindowsAuthentication = True

    ' Enable Subscribers to request snapshot generation and filtering.
    publication.Attributes = publication.Attributes Or _
        PublicationAttributes.AllowSubscriberInitiatedSnapshot
    publication.Attributes = publication.Attributes Or _
        PublicationAttributes.DynamicFilters

    ' Enable pull and push subscriptions
    publication.Attributes = publication.Attributes Or _
        PublicationAttributes.AllowPull
    publication.Attributes = publication.Attributes Or _
        PublicationAttributes.AllowPush

    If Not publication.IsExistingObject Then
        ' Create the merge publication.
        publication.Create()

        ' Create a Snapshot Agent job for the publication.
        publication.CreateSnapshotAgent()
    Else
        Throw New ApplicationException(String.Format( _
            "The {0} publication already exists.", publicationName))
    End If
Catch ex As Exception
    ' Implement custom application error handling here.
    Throw New ApplicationException(String.Format( _
        "The publication {0} could not be created.", publicationName), ex)
Finally
    conn.Disconnect()
End Try

Voir aussiSee Also

Utiliser sqlcmd avec des variables de script Use sqlcmd with Scripting Variables
Publier des données et des objets de base de données Publish Data and Database Objects
Concepts liés à RMO (Replication Management Objects) Replication Management Objects Concepts
Define an Article Define an Article
Afficher et modifier les propriétés d’une publication View and Modify Publication Properties
Configurer la distribution Configure Distribution
Protéger le serveur de distribution Secure the Distributor
Sécuriser le serveur de publicationSecure the Publisher