Konfigurace publikování a distribuce

Platí pro:SQL ServerAzure SQL Managed Instance

Toto téma popisuje, jak nastavit publikování a distribuci v SQL Server pomocí SQL Server Management Studio, Transact-SQL nebo Replication Management Objects (RMO).

Zabezpečení

Další informace naleznete v tématu Zobrazení a úprava nastavení zabezpečení replikace.

Použití aplikace SQL Server Management Studio

Distribuci nakonfigurujte pomocí průvodce Novou publikací nebo Průvodce konfigurací distribuce. Po nastavení distributora zobrazit a upravit vlastnosti v dialogovém okně Distributor Properties - <Distributor> . Použijte průvodce Konfigurovat distribuci, pokud chcete nakonfigurovat distributora tak, aby členové db_owner pevných databázových rolí mohli vytvářet publikace, nebo pokud chcete nastavit vzdáleného distributora, který není Publisher.

Pro konfiguraci distribuce

  1. V Microsoft SQL Server Management Studio se připojte k serveru, který bude distributorem (v mnoha případech jsou Publisher a Distributor stejný server), a poté rozšiřte server node.

  2. Klikněte pravým tlačítkem na složku Replikace a poté klikněte na Nastavit distribuci.

  3. Postupujte podle Průvodce Konfigurovat distribuci, abyste:

  • Vyberte distributora. Chcete-li použít místního distributora, vyberte možnost ServerName bude fungovat jako vlastní distributor; SQL Server vytvoří distribuční databázi a protokol. Pro použití vzdáleného distributora vyberte Použít následující server jako distributora a poté vyberte server. Server musí být již nakonfigurován jako Distributor a Publisher musí být umožněn používat Distributora. Pro více informací viz Enable a Remote Publisher at a Distributor (SQL Server Management Studio).

    Pokud zvolíte vzdáleného distributora, musíte zadat heslo na stránce Administrátorského hesla pro spojení z Publisher a distributorem. Toto heslo musí odpovídat heslu stanovenému při aktivaci Publisher u vzdáleného distributora.

  • Určete složku root snapshot (pro lokálního distributora). Složka snapshot je jednoduše adresář, který jste označili jako sdílený soubor; Agenti, kteří z této složky čtou a zapisují do ní, musí mít dostatečná oprávnění k jejímu přístupu. Každý Publisher, který používá tento Distributor, vytvoří složku pod kořenovou složkou a každá publikace vytvoří složky pod složkou Publisher, do které ukládá snapshot soubory. Pro více informací o správném zabezpečení složky viz Secure the Snapshot Folder.

  • Specifikujte distribuční databázi (pro lokálního distributora). Distribuční databáze uchovává metadata a historická data pro všechny typy replikace a transakce pro transakční replikaci.

  • Volitelně povolte použití distributora i dalším vydavatelům. Pokud mají ostatní vydavatele povolení používat distributora, musíte zadat heslo na stránce hesla distributora pro spojení navázané mezi těmito vydavateli a distributorem.

  • Volitelně nastavení konfigurace skriptů. Další informace najdete v tématu Scripting Replication.

Použití Transact-SQL

Publikování a distribuce replikací lze programově konfigurovat pomocí uložených procedur replikace.

Pro konfiguraci publikování pomocí lokálního distributora

  1. Proveďte sp_get_distributor (Transact-SQL), abyste zjistili, zda je server již nakonfigurován jako distributor.
  • Pokud je hodnota installed v sadě výsledků 0, spusťte u Distribučního serveru v databázi master příkaz sp_adddistributor (Transact-SQL).

  • Pokud je hodnota distribution db installed v sadě výsledků 0, spusťte příkaz sp_adddistributiondb (Transact-SQL) na serveru Distributor v databázi master. Zadejte název distribuční databáze pro @database. Volitelně můžete zadat maximální dobu uchovávání transakcí pro @max_distretention a dobu uchování historie pro @history_retention. Pokud se vytváří nová databáze, zadejte požadované parametry vlastností databáze.

  1. U distributora, který je zároveň Publisherem, spusťte sp_adddistpublisher (Transact-SQL) a zadejte sdílenou složku UNC, která bude použita jako výchozí složka pro snímky pro @working_directory.

    Pro distribuční databázi na SQL Managed Instance použijte účet úložiště Azure pro @working_directory a přístupový klíč k úložišti pro @storage_connection_string.

  2. Na serveru Publisher spusťte sp_replicationdboption (Transact-SQL). Specifikujte databázi, která se publikuje pro @dbname, typ replikace pro @optname, a hodnotu true pro @value.

Pro konfiguraci publikování pomocí vzdáleného distributora

  1. Proveďte sp_get_distributor (Transact-SQL), abyste zjistili, zda je server již nakonfigurován jako distributor.

    • Pokud je hodnota installed v sadě výsledků 0, spusťte u Distribučního serveru v databázi master příkaz sp_adddistributor (Transact-SQL). Zadejte silné heslo pro @password. Toto heslo k distributor_admin účtu použije Publisher při připojení k distributorovi.

    • Pokud je hodnota distribution db installed v sadě výsledků 0, spusťte příkaz sp_adddistributiondb (Transact-SQL) na serveru Distributor v databázi master. Zadejte název distribuční databáze pro @database. Volitelně můžete zadat maximální dobu uchovávání transakcí pro @max_distretention a dobu uchování historie pro @history_retention. Pokud se vytváří nová databáze, zadejte požadované parametry vlastností databáze.

  2. Na distributoru spusťte příkaz sp_adddistpublisher (Transact-SQL) a zadejte sdílenou složku UNC, která se použije jako výchozí složka snapshotů pro @working_directory. Pokud bude Distributor při připojení k Publisher používat SQL Server Authentication, musíte také zadat hodnotu 0 pro a @security_mode přihlašovací údaje Microsoft SQL Server pro @login a @password.

    Pro distribuční databázi na SQL Managed Instance použijte účet úložiště Azure pro @working_directory a přístupový klíč k úložišti pro @storage_connection_string.

  3. Na serveru Publisher v databázi master spusťte sp_adddistributor (Transact-SQL). Zadejte silné heslo použité v kroku 1 pro @password. Toto heslo použije Publisher při připojení k distributorovi.

  4. Na serveru Publisher spusťte sp_replicationdboption (Transact-SQL). Specifikujte databázi, která se publikuje pro @dbname, typ replikace pro @optname, a hodnotu pravdivou pro @value.

Příklad (Transact-SQL)

Následující příklad ukazuje, jak programově konfigurovat publikování a distribuci. V tomto příkladu je název serveru, který je konfigurován jako vydavatel a místní distributor, zadán pomocí skriptovacích proměnných. Publikování a distribuce replikací lze programově konfigurovat pomocí uložených procedur replikace.

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

Použití objektů správy replikace (RMO)

Pro konfiguraci publikování a distribuce na jednom serveru

  1. Vytvořte spojení se serverem pomocí této třídy ServerConnection .

  2. Vytvořte instanci ReplicationServer třídy. Přeneste ServerConnection z 1. kroku.

  3. Vytvořte instanci DistributionDatabase třídy.

  4. Nastavte vlastnost Name na název databáze a vlastnost ConnectionContext na ServerConnection z kroku 1.

  5. Nainstalujte distributor zavoláním metody InstallDistributor . Předejte objekt DistributionDatabase z kroku 3.

  6. Vytvořte instanci DistributionPublisher třídy.

  7. Nastavte následující vlastnosti :DistributionPublisher

  1. Zavolejte metodu Create .

Pro konfiguraci publikování a distribuce pomocí vzdáleného distributora

  1. Vytvořte spojení s vzdáleným serverem Distributor pomocí této třídy ServerConnection .

  2. Vytvořte instanci ReplicationServer třídy. Přeneste ServerConnection z 1. kroku.

  3. Vytvořte instanci DistributionDatabase třídy.

  4. Nastavte vlastnost Name na název databáze a vlastnost ConnectionContext nastavte na ServerConnection z kroku 1.

  5. Nainstalujte distributor zavoláním metody InstallDistributor . Zadejte bezpečné heslo (používané serverem Publisher při připojování ke vzdálenému serveru Distributor) a objekt DistributionDatabase z kroku 3. Pro více informací viz Zabezpečte distributora.

    Important

    Pokud je to možné, vyzve uživatele, aby za běhu zadali přihlašovací údaje zabezpečení. Pokud musíte uchovávat přihlašovací údaje, použijte kryptografické služby poskytované Microsoft Windows .NET Frameworkem.

  6. Vytvořte instanci DistributionPublisher třídy.

  7. Nastavte následující vlastnosti :DistributionPublisher

  1. Zavolejte metodu Create .

  2. Vytvořte spojení s lokálním serverem Publisher pomocí této třídyServerConnection.

  3. Vytvořte instanci ReplicationServer třídy. Předejte ServerConnection z kroku 9.

  4. Zavolejte metodu InstallDistributor . Předejte jméno vzdáleného distributora a heslo k vzdálenému distributorovi uvedenému v kroku 5.

Important

Pokud je to možné, vyzve uživatele, aby za běhu zadali přihlašovací údaje zabezpečení. Pokud musíte uchovávat přihlašovací údaje, použijte kryptografické služby poskytované Windows .NET Frameworkem.

Příklad (RMO)

Můžete programově konfigurovat publikování a distribuci replikace pomocí Replication Management Objects (RMO).

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