Freigeben über


Konfigurieren der Veröffentlichung und der Verteilung

Gilt für: SQL Server Azure SQL Managed Instance

In diesem Thema wird beschrieben, wie Sie die Veröffentlichung und Verteilung in SQL Server mithilfe von SQL Server Management Studio, Transact-SQL oder Replikationsverwaltungsobjekten (RMO) konfigurieren.

Vorbereitungen

Sicherheit

Weitere Informationen finden Sie unter Anzeigen und Ändern von Replikationssicherheitseinstellungen.

Verwendung von SQL Server Management Studio

Sie konfigurieren die Verteilung mit dem Assistenten für neue Veröffentlichung oder mit dem Verteilungskonfigurations-Assistenten. Rufen Sie nach der Konfiguration des Verteilers das Dialogfeld Verteilereigenschaften - <Distributor> auf, und ändern Sie die Eigenschaften. Verwenden Sie den Verteilungskonfigurations-Assistenten, wenn Sie einen Verteiler so konfigurieren möchten, dass die Mitglieder der festen Datenbankrollen db_owner Veröffentlichungen erstellen können, oder wenn Sie einen Remoteverteiler konfigurieren möchten, bei dem es sich nicht um einen Verleger handelt.

So konfigurieren Sie die Verteilung

  1. Stellen Sie in Microsoft SQL Server Management Studio eine Verbindung mit dem Server her, der als Verteiler fungieren soll, und erweitern Sie den Serverknoten (in vielen Fällen handelt es sich beim Verleger und beim Verteiler um denselben Server).

  2. Klicken Sie mit der rechten Maustaste auf den Ordner Replikation , und klicken Sie dann auf Verteilung konfigurieren.

  3. Befolgen Sie die Anweisungen im Verteilungskonfigurations-Assistenten, um folgende Vorgänge auszuführen:

  • Auswählen eines Verteilers. Wählen Sie zum Verwenden eines lokalen Verteilers Servername als seinen eigenen Verteiler verwenden. SQL Server erstellt eine Verteilungsdatenbank und ein Protokoll. Aktivieren Sie zum Verwenden eines Remoteverteilers Folgenden Server als Verteiler verwenden, und wählen Sie dann einen Server aus. Der Server muss bereits als Verteiler konfiguriert sein, und auf dem Verleger muss die Verwendung des Verteilers aktiviert sein. Weitere Informationen hierzu finden Sie unter Aktivieren eines Remoteverlegers auf einem Verteiler (SQL Server Management Studio).

    Wenn Sie einen Remoteverteiler auswählen, müssen Sie auf der Seite Administratorkennwort ein Kennwort für Verbindungen eingeben, die zwischen dem Verleger und dem Verteiler hergestellt werden. Dieses Kennwort muss mit dem Kennwort übereinstimmen, dass bei der Aktivierung des Verlegers auf dem Remoteverteiler angegeben wurde.

  • Geben Sie einen Stammordner der Momentaufnahmen an (für einen lokalen Verteiler). Der Momentaufnahmeordner ist lediglich ein von Ihnen freigegebenes Verzeichnis. Agents, die aus diesem Ordner lesen bzw. in den Ordner schreiben, benötigen ausreichende Zugriffsberechtigungen. Jeder Verleger, der diesen Verteiler verwendet, erstellt einen Unterordner des Stammordners, und jede Veröffentlichung erstellt Unterordner des Verlegerordners, in dem die Momentaufnahmedateien gespeichert werden. Weitere Informationen zum angemessenen Sichern des Ordners finden Sie unter Sichern des Momentaufnahmeordners.

  • Geben Sie die Verteilungsdatenbank (für einen lokalen Verteiler) an. In der Verteilungsdatenbank werden Metadaten und Verlaufsdaten für alle Replikations- und Transaktionstypen für die Transaktionsreplikation gespeichert.

  • Optional können Sie weitere Verleger für die Verwendung des Verteilers aktivieren. Wenn die Verwendung des Verteilers auf anderen Verlegern aktiviert ist, müssen Sie auf der Seite Verteilerkennwort ein Kennwort für Verbindungen eingeben, die zwischen diesen Verlegern und dem Verteiler hergestellt werden.

  • Erstellen Sie optional ein Skript für die Konfigurationseinstellungen. Weitere Informationen finden Sie unter Scripting Replication.

Verwenden von Transact-SQL

Die Replikationsveröffentlichung und -verteilung kann mit gespeicherten Replikationsprozeduren programmgesteuert konfiguriert werden.

So konfigurieren Sie die Veröffentlichung mit einem lokalen Verteiler

  1. Führen Sie sp_get_distributor (Transact-SQL) aus, um zu ermitteln, ob der Server bereits als Verteiler konfiguriert ist.
  • Wenn der Wert von installed im Resultset gleich 0 ist, führen Sie sp_adddistributor (Transact-SQL) auf dem Verteiler für die Masterdatenbank aus.

  • Wenn der Wert von distribution db installed im Resultset gleich 0 ist, führen Sie sp_adddistributiondb (Transact-SQL) auf dem Verteiler für die Masterdatenbank aus. Geben Sie den Namen der Verteilungsdatenbank für @database an. Optional können Sie die maximale Transaktionsbeibehaltungsdauer für @max_distretention und die Verlaufsbeibehaltungsdauer für @history_retention angeben. Wenn eine neue Datenbank erstellt wird, geben Sie die gewünschten Eigenschaftenparameter für die Datenbank an.

  1. Führen Sie auf dem Verteiler, der zugleich der Verleger ist, sp_adddistpublisher (Transact-SQL) aus, und geben Sie dabei die UNC-Freigabe, die als Standardmomentaufnahmeordner verwendet werden soll, für @working_directory an.

    Verwenden Sie ein Azure-Speicherkonto für @working_directory und den Speicherzugriffsschlüssel für @storage_connection_string als Verteiler in SQL Managed Instance.

  2. Führen Sie sp_replicationdboption (Transact-SQL) auf dem Verleger aus. Geben Sie die zu veröffentlichende Datenbank für @dbname, den Replikationstyp für @optname und den Wert true für @value an.

So konfigurieren Sie die Veröffentlichung mit einem Remoteverteiler

  1. Führen Sie sp_get_distributor (Transact-SQL) aus, um zu ermitteln, ob der Server bereits als Verteiler konfiguriert ist.

    • Wenn der Wert von installed im Resultset gleich 0 ist, führen Sie sp_adddistributor (Transact-SQL) auf dem Verteiler für die Masterdatenbank aus. Geben Sie ein starkes Kennwort für @password an. Dieses Kennwort für das distributor_admin-Konto wird vom Verleger verwendet, wenn er eine Verbindung zum Verteiler herstellt.

    • Wenn der Wert von distribution db installed im Resultset gleich 0 ist, führen Sie sp_adddistributiondb (Transact-SQL) auf dem Verteiler für die Masterdatenbank aus. Geben Sie den Namen der Verteilungsdatenbank für @database an. Optional können Sie die maximale Transaktionsbeibehaltungsdauer für @max_distretention und die Verlaufsbeibehaltungsdauer für @history_retention angeben. Wenn eine neue Datenbank erstellt wird, geben Sie die gewünschten Eigenschaftenparameter für die Datenbank an.

  2. Führen Sie auf dem Verteiler sp_adddistpublisher (Transact-SQL) aus, und geben Sie dabei die UNC-Freigabe, die als Standardmomentaufnahmeordner verwendet werden soll, für @working_directory an. Wenn der Verteiler zum Herstellen der Verbindung mit dem Verleger die SQL Server-Authentifizierung verwendet, müssen Sie zudem den Wert 0 für @security_mode und die Microsoft SQL Server-Anmeldeinformationen für @login und @password angeben.

    Verwenden Sie ein Azure-Speicherkonto für @working_directory und den Speicherzugriffsschlüssel für @storage_connection_string als Verteiler in SQL Managed Instance.

  3. Führen Sie auf dem Verleger für die Masterdatenbank sp_adddistributor (Transact-SQL) aus. Geben Sie das starke Kennwort an, das in Schritt 1 für @password verwendet wurde. Dieses Kennwort wird vom Verleger verwendet, wenn er eine Verbindung zum Verteiler herstellt.

  4. Führen Sie sp_replicationdboption (Transact-SQL) auf dem Verleger aus. Geben Sie die zu veröffentlichende Datenbank für @dbname, den Replikationstyp für @optname und den Wert „true“ für @value an.

Beispiel (Transact-SQL)

Im folgenden Beispiel wird veranschaulicht, wie die Veröffentlichung und die Verteilung programmgesteuert konfiguriert werden. In diesem Beispiel werden der Name des Servers, der als Verleger konfiguriert wird, und ein lokaler Verteiler mithilfe von Skriptvariablen bereitgestellt. Die Replikationsveröffentlichung und -verteilung kann mit gespeicherten Replikationsprozeduren programmgesteuert konfiguriert werden.

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

Verwenden von Replikationsverwaltungsobjekten (RMO)

So konfigurieren Sie Veröffentlichung und Verteilung auf einem einzelnen Server

  1. Erstellen Sie eine Verbindung mit dem Server, indem Sie die ServerConnection -Klasse verwenden.

  2. Erstellen Sie eine Instanz der ReplicationServer-Klasse. Übergeben Sie ServerConnection von Schritt 1.

  3. Erstellen Sie eine Instanz der DistributionDatabase-Klasse.

  4. Legen Sie die Name -Eigenschaft auf den Datenbanknamen fest, und legen Sie die ConnectionContext -Eigenschaft auf die ServerConnection aus Schritt 1 fest.

  5. Installieren Sie den Verteiler, indem Sie die InstallDistributor -Methode aufrufen. Übergeben Sie das DistributionDatabase -Objekt aus Schritt 3.

  6. Erstellen Sie eine Instanz der DistributionPublisher-Klasse.

  7. Legen Sie dann die folgenden Eigenschaften von DistributionPublisherfest:

  1. Rufen Sie die Create-Methode auf.

So konfigurieren Sie Veröffentlichung und Verteiler mit einem Remoteverteiler

  1. Erstellen Sie mithilfe der ServerConnection -Klasse eine Verbindung zum Remoteverteilerserver.

  2. Erstellen Sie eine Instanz der ReplicationServer-Klasse. Übergeben Sie ServerConnection von Schritt 1.

  3. Erstellen Sie eine Instanz der DistributionDatabase-Klasse.

  4. Legen Sie die Name -Eigenschaft auf den Datenbanknamen fest, und legen Sie die ConnectionContext -Eigenschaft auf die ServerConnection aus dem Schritt 1 fest.

  5. Installieren Sie den Verteiler, indem Sie die InstallDistributor -Methode aufrufen. Geben Sie ein sicheres Kennwort (das vom Verteiler für den Verbindungsaufbau mit dem Remoteverteiler verwendet wird) und das DistributionDatabase -Objekt aus Schritt 3 an. Weitere Informationen finden Sie unter Schützen des Verteilers.

    Wichtig

    Benutzer sollten nach Möglichkeit dazu aufgefordert werden, Anmeldeinformationen zur Laufzeit anzugeben. Wenn Sie Anmeldeinformationen speichern müssen, verwenden Sie die Kryptografiedienste von Microsoft Windows .NET Framework.

  6. Erstellen Sie eine Instanz der DistributionPublisher-Klasse.

  7. Legen Sie dann die folgenden Eigenschaften von DistributionPublisherfest:

  1. Rufen Sie die Create-Methode auf.

  2. Erstellen Sie mithilfe der ServerConnection -Klasse eine Verbindung zum lokalen Verlegerserver.

  3. Erstellen Sie eine Instanz der ReplicationServer-Klasse. Übergeben Sie ServerConnection von Schritt 9.

  4. Rufen Sie die InstallDistributor-Methode auf. Übergeben Sie den Namen des Remoteverteilers und das Kennwort des Remoteverteilers, der in Schritt 5 angegeben wurde.

Wichtig

Benutzer sollten nach Möglichkeit dazu aufgefordert werden, Anmeldeinformationen zur Laufzeit anzugeben. Wenn Sie Anmeldeinformationen speichern müssen, verwenden Sie die Kryptografiedienste von Windows .NET Framework.

Beispiel (RMO)

Sie können die Veröffentlichung und Verteilung mithilfe von Replikationsverwaltungsobjekten (ROM) programmgesteuert konfigurieren.

// 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