Configurer la publication et la distribution

S’applique à : SQL Server Azure SQL Managed Instance

Cette rubrique décrit comment configurer une publication et une distribution dans SQL Server en utilisant SQL Server Management Studio, Transact-SQL ou Replication Management Objects (RMO).

Avant de commencer

Sécurité

Pour plus d’informations, consultez Afficher et modifier les paramètres de sécurité de la réplication.

Utilisation de SQL Server Management Studio

Configurez la distribution à l'aide de l'Assistant Nouvelle publication ou de l'Assistant Configuration de la distribution. Après avoir configuré le serveur de distribution, affichez et modifiez les propriétés dans la boîte de dialogue Propriétés du serveur de distribution - <serveur_distribution>. Utilisez l'Assistant Configuration de la distribution si vous voulez configurer un serveur de distribution de telle sorte que les membres des rôles de base de données fixes db_owner puissent créer des publications, ou si vous souhaitez configurer un serveur de distribution distant qui ne soit pas un serveur de publication.

Pour configurer la distribution

  1. Dans Microsoft SQL Server Management Studio, connectez-vous au serveur qui servira de serveur de distribution (souvent, le serveur de publication et le serveur de distribution sont les mêmes), puis développez le nœud du serveur.

  2. Cliquez avec le bouton droit sur le dossier Réplication , puis cliquez sur Configurer la distribution.

  3. Suivez les instructions de l'Assistant Configuration de la distribution pour :

  • Sélectionner un serveur de distribution. Pour utiliser un serveur de distribution local, sélectionnez nom_serveur agit comme son propre serveur de distribution ; SQL Server crée une base de données de distribution et un journal. Pour utiliser un serveur de distribution distant, sélectionnez l'option Utiliser le serveur suivant comme serveur de distribution, puis sélectionnez un serveur. Ce dernier doit déjà être configuré comme un serveur de distribution et le serveur de publication configuré pour utiliser ce serveur de distribution. Pour plus d’informations, consultez Activer un serveur de publication distant sur un serveur de distribution (SQL Server Management Studio).

    Si vous sélectionnez un serveur de distribution distant, vous devez entrer un mot de passe dans la page Mot de passe d'administration pour les connexions effectuées à partir du serveur de publication sur le serveur de distribution. 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.

  • Spécifier un dossier d'instantanés racine (pour un serveur de distribution local). 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. Chaque serveur de publication qui utilise ce serveur de distribution crée un dossier sous le dossier racine, et chaque publication crée des dossiers sous le dossier Serveur de publication, pour y stocker les fichiers d'instantanés. Pour plus d’informations sur une sécurisation appropriée du dossier, consultez Sécuriser le dossier d’instantané.

  • Spécifier la base de données de distribution (pour un serveur de distribution local). La base de données de distribution stocke les métadonnées et les données d'historique pour tous les types de réplications, et les transactions pour la réplication transactionnelle.

  • Permettre en option aux autres serveurs de publication d'utiliser le serveur de distribution. Si d'autres serveurs de publication sont activés pour utiliser le serveur de distribution, vous devez entrer un mot de passe dans la page Mot de passe du serveur de distribution pour les connexions effectuées à partir de ces serveurs de publication sur le serveur de distribution.

  • Scripter en option les paramètres de configuration. Pour plus d'informations, voir Scripting Replication.

Utilisation de Transact-SQL

La publication et la distribution de réplication peuvent être configurées par programme à l'aide de procédures stockées de réplication.

Pour configurer la publication à l'aide d'un serveur de distribution local

  1. Exécutez sp_get_distributor (Transact-SQL) pour déterminer si le serveur est déjà configuré comme serveur de distribution.
  • Dans le jeu de résultats, si installed a la valeur 0, exécutez sp_adddistributor (Transact-SQL) sur le serveur de distribution, sur la base de données MASTER.

  • Dans le jeu de résultats, si distribution db installed a la valeur 0, exécutez sp_adddistributiondb (Transact-SQL) sur le serveur de distribution, sur la base de données MASTER. Spécifiez le nom de la base de données de distribution pour @database. Vous pouvez si vous le souhaitez spécifier la période maximale de rétention de transaction de @max_distretention et la période de rétention de l'historique de @history_retention. Si une nouvelle base de données est créée, spécifiez les paramètres de propriété de base de données de votre choix.

  1. Sur le serveur de distribution, qui est également le serveur de publication, exécutez sp_adddistpublisher (Transact-SQL) en spécifiant le partage UNC qui sera utilisé comme dossier d’instantanés par défaut pour @working_directory.

    Pour un serveur de distribution sur SQL Managed Instance, utilisez un compte de stockage Azure pour @working_directory et la clé d’accès de stockage pour @storage_connection_string.

  2. Sur le serveur de publication, exécutez sp_replicationdboption (Transact-SQL). Spécifiez la base de données publiée pour @dbname, le type de réplication pour @optname et la valeur true pour @value.

Pour configurer la publication à l'aide d'un serveur de distribution distant

  1. Exécutez sp_get_distributor (Transact-SQL) pour déterminer si le serveur est déjà configuré comme serveur de distribution.

    • Dans le jeu de résultats, si installed a la valeur 0, exécutez sp_adddistributor (Transact-SQL) sur le serveur de distribution, sur la base de données MASTER. Spécifiez un mot de passe fort pour @password. Ce mot de passe du compte distributor_admin sera utilisé par le serveur de publication lors de la connexion au serveur de distribution.

    • Dans le jeu de résultats, si distribution db installed a la valeur 0, exécutez sp_adddistributiondb (Transact-SQL) sur le serveur de distribution, sur la base de données MASTER. Spécifiez le nom de la base de données de distribution pour @database. Vous pouvez si vous le souhaitez spécifier la période maximale de rétention de transaction de @max_distretention et la période de rétention de l'historique de @history_retention. Si une nouvelle base de données est créée, spécifiez les paramètres de propriété de base de données de votre choix.

  2. Sur le serveur de distribution, exécutez sp_adddistpublisher (Transact-SQL) en spécifiant le partage UNC qui sera utilisé comme dossier d’instantanés par défaut pour @working_directory. Si le serveur de distribution doit utiliser l’authentification SQL Server lors de la connexion au serveur de publication, spécifiez également la valeur 0 pour @security_mode et les informations de connexion Microsoft SQL Server pour @login et @password.

    Pour un serveur de distribution sur SQL Managed Instance, utilisez un compte de stockage Azure pour @working_directory et la clé d’accès de stockage pour @storage_connection_string.

  3. Sur le serveur de publication, sur la base de données MASTER, exécutez sp_adddistributor (Transact-SQL). Spécifiez le mot de passe fort utilisé à l'étape 1 pour @password. Ce mot de passe sera utilisé par le serveur de publication lors de la connexion au serveur de distribution.

  4. Sur le serveur de publication, exécutez sp_replicationdboption (Transact-SQL). Spécifiez la base de données publiée pour @dbname, le type de réplication pour @optname et la valeur true pour @value.

Exemple (Transact-SQL)

L'exemple ci-dessous montre comment configurer par programme la publication et la distribution. Dans cet exemple, le nom du serveur configuré comme serveur de publication et serveur de distribution local est fourni au moyen de variables de script. La publication et la distribution de réplication peuvent être configurées par programme à l'aide de procédures stockées de réplication.

-- This script uses sqlcmd scripting variables. They are in the form
-- $(MyVariable). 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".

-- Install the Distributor and the distribution database.
DECLARE @distributor AS sysname;
DECLARE @distributionDB AS sysname;
DECLARE @publisher AS sysname;
DECLARE @directory AS nvarchar(500);
DECLARE @publicationDB AS sysname;
-- Specify the Distributor name.
SET @distributor = $(DistPubServer);
-- Specify the distribution database.
SET @distributionDB = N'distribution';
-- Specify the Publisher name.
SET @publisher = $(DistPubServer);
-- Specify the replication working directory.
SET @directory = N'\\' + $(DistPubServer) + '\repldata';
-- Specify the publication database.
SET @publicationDB = N'AdventureWorks2022'; 

-- Install the server MYDISTPUB as a Distributor using the defaults,
-- including autogenerating the distributor password.
USE master
EXEC sp_adddistributor @distributor = @distributor;

-- Create a new distribution database using the defaults, including
-- using Windows Authentication.
USE master
EXEC sp_adddistributiondb @database = @distributionDB, 
    @security_mode = 1;
GO

-- Create a Publisher and enable AdventureWorks2022 for replication.
-- Add MYDISTPUB as a publisher with MYDISTPUB as a local distributor
-- and use Windows Authentication.
DECLARE @distributionDB AS sysname;
DECLARE @publisher AS sysname;
-- Specify the distribution database.
SET @distributionDB = N'distribution';
-- Specify the Publisher name.
SET @publisher = $(DistPubServer);

USE [distribution]
EXEC sp_adddistpublisher @publisher=@publisher, 
    @distribution_db=@distributionDB, 
    @security_mode = 1;
GO

Utilisation d'objets RMO (Replication Management Objects)

Pour configurer la publication et la distribution sur un serveur unique

  1. Créez une connexion au serveur en utilisant la classe ServerConnection .

  2. Créez une instance de la classe ReplicationServer. Passez l'objet ServerConnection créé à l'étape 1.

  3. Créez une instance de la classe DistributionDatabase.

  4. Affectez le nom de la base de données à la propriété Name et le ConnectionContext créé à l'étape 1 à la propriété ServerConnection .

  5. Installez le serveur de distribution en appelant la méthode InstallDistributor . Passez l'objet DistributionDatabase créé à l'étape 3.

  6. Créez une instance de la classe DistributionPublisher.

  7. Définissez les propriétés suivantes de DistributionPublisher:

  1. Appelez la méthode Create .

Pour configurer la publication et la distribution à l'aide d'un serveur de distribution distant

  1. Créez une connexion au serveur de distribution distant en utilisant la classe ServerConnection .

  2. Créez une instance de la classe ReplicationServer. Passez l'objet ServerConnection créé à l'étape 1.

  3. Créez une instance de la classe DistributionDatabase.

  4. Affectez le nom de la base de données à la propriété Name et le ConnectionContext créé à l'étape 1 à la propriété ServerConnection .

  5. Installez le serveur de distribution en appelant la méthode InstallDistributor . Spécifiez un mot de passe sécurisé (utilisé par le serveur de publication lors de la connexion au serveur de distribution distant) et l'objet DistributionDatabase créé à l'étape 3. Pour plus d’informations, consultez Protéger le serveur de distribution.

    Important

    Lorsque c'est possible, demande aux utilisateurs de fournir les informations d'identification au moment de l'exécution. Si vous devez stocker des informations d’identification, utilisez les Services de chiffrement fournis par Microsoft Windows .NET Framework.

  6. Créez une instance de la classe DistributionPublisher.

  7. Définissez les propriétés suivantes de DistributionPublisher:

  1. Appelez la méthode Create .

  2. Créez une connexion au serveur de publication local en utilisant la classe ServerConnection .

  3. Créez une instance de la classe ReplicationServer. Passez l’objet ServerConnection créé à l’étape 9.

  4. Appelez la méthode InstallDistributor . Passez le nom du serveur de distribution distant et son mot de passe spécifié à l'étape 5.

Important

Lorsque c'est possible, demande aux utilisateurs de fournir les informations d'identification au moment de l'exécution. Si vous devez stocker des informations d'identification, utilisez les Services de chiffrement fournis par Windows .NET Framework.

Exemple (RMO)

Vous pouvez configurer par programme la publication et la distribution de la réplication à l'aide d'objets RMO (Replication Management Objects).

// Set the server and database names
string distributionDbName = "distribution";
string publisherName = publisherInstance;
string publicationDbName = "AdventureWorks2022";

DistributionDatabase distributionDb;
ReplicationServer distributor;
DistributionPublisher publisher;
ReplicationDatabase publicationDb;

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

try
{
    // Connect to the server acting as the Distributor 
    // and local Publisher.
    conn.Connect();

    // Define the distribution database at the Distributor,
    // but do not create it now.
    distributionDb = new DistributionDatabase(distributionDbName, conn);
    distributionDb.MaxDistributionRetention = 96;
    distributionDb.HistoryRetention = 120;

    // Set the Distributor properties and install the Distributor.
    // This also creates the specified distribution database.
    distributor = new ReplicationServer(conn);
    distributor.InstallDistributor((string)null, distributionDb);

    // Set the Publisher properties and install the Publisher.
    publisher = new DistributionPublisher(publisherName, conn);
    publisher.DistributionDatabase = distributionDb.Name;
    publisher.WorkingDirectory = @"\\" + publisherName + @"\repldata";
    publisher.PublisherSecurity.WindowsAuthentication = true;
    publisher.Create();

    // Enable AdventureWorks2022 as a publication database.
    publicationDb = new ReplicationDatabase(publicationDbName, conn);

    publicationDb.EnabledTransPublishing = true;
    publicationDb.EnabledMergePublishing = true;
}
catch (Exception ex)
{
    // Implement appropriate error handling here.
    throw new ApplicationException("An error occurred when installing distribution and publishing.", ex);
}
finally
{
    conn.Disconnect();
}
' Set the server and database names
Dim distributionDbName As String = "distribution"
Dim publisherName As String = publisherInstance
Dim publicationDbName As String = "AdventureWorks2022"

Dim distributionDb As DistributionDatabase
Dim distributor As ReplicationServer
Dim publisher As DistributionPublisher
Dim publicationDb As ReplicationDatabase

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

Try
    ' Connect to the server acting as the Distributor 
    ' and local Publisher.
    conn.Connect()

    ' Define the distribution database at the Distributor,
    ' but do not create it now.
    distributionDb = New DistributionDatabase(distributionDbName, conn)
    distributionDb.MaxDistributionRetention = 96
    distributionDb.HistoryRetention = 120

    ' Set the Distributor properties and install the Distributor.
    ' This also creates the specified distribution database.
    distributor = New ReplicationServer(conn)
    distributor.InstallDistributor((CType(Nothing, String)), distributionDb)

    ' Set the Publisher properties and install the Publisher.
    publisher = New DistributionPublisher(publisherName, conn)
    publisher.DistributionDatabase = distributionDb.Name
    publisher.WorkingDirectory = "\\" + publisherName + "\repldata"
    publisher.PublisherSecurity.WindowsAuthentication = True
    publisher.Create()

    ' Enable AdventureWorks2022 as a publication database.
    publicationDb = New ReplicationDatabase(publicationDbName, conn)

    publicationDb.EnabledTransPublishing = True
    publicationDb.EnabledMergePublishing = True

Catch ex As Exception
    ' Implement appropriate error handling here.
    Throw New ApplicationException("An error occurred when installing distribution and publishing.", ex)

Finally
    conn.Disconnect()

End Try