Condividi tramite


Configurazione della pubblicazione e della distribuzione

Si applica a: SQL Server Istanza gestita di SQL di Azure

Questo argomento illustra come configurare la pubblicazione e la distribuzione in SQL Server tramite SQL Server Management Studio, Transact-SQL o Replication Management Objects.

Prima di iniziare

Sicurezza

Per altre informazioni, vedere Visualizzare e modificare le impostazioni di sicurezza della replica.

Utilizzo di SQL Server Management Studio

Configurare la distribuzione mediante la Creazione guidata nuova pubblicazione o la Configurazione guidata distribuzione. Dopo la configurazione iniziale del database di distribuzione, è possibile visualizzare e modificare le proprietà nella finestra di dialogo Proprietà database di distribuzione - <Distributore>. Usare la Configurazione guidata distribuzione se si vuole configurare un database di distribuzione in modo che i membri dei ruoli predefiniti del database db_owner possano creare pubblicazioni o per configurare un server di distribuzione remoto che non è un server di pubblicazione.

Per configurare la distribuzione

  1. In Microsoft SQL Server Management Studio, connettersi al server che diventerà il server di distribuzione (in molti casi, il server di distribuzione e quello di pubblicazione coincidono) e quindi espandere il nodo del server.

  2. Fare clic con il pulsante destro del mouse sulla cartella Replica e quindi fare clic su Configura distribuzione.

  3. Eseguire i vari passaggi della Configurazione guidata distribuzione per:

  • Selezionare un server di distribuzione. Per usare un server di distribuzione locale, selezionare NomeServer fungerà da server di distribuzione per se stesso. Verranno creati un database di distribuzione e un log. Per utilizzare un server di distribuzione remoto, selezionare Usa il server seguente come server di distribuzionee quindi specificare un server. È necessario che il server sia già configurato come server di distribuzione e che il server di pubblicazione sia abilitato per l'utilizzo del server di distribuzione. Per altre informazioni, vedere Abilitazione di un server di pubblicazione remoto in un database di distribuzione (SQL Server Management Studio).

    Se si seleziona un server di distribuzione remoto, è necessario immettere la password nella pagina Password amministrativa per le connessioni effettuate dal server di pubblicazione a quello di distribuzione. Questa password deve corrispondere a quella specificata quando il server di pubblicazione è stato attivato nel server di distribuzione remoto.

  • Specificare una cartella snapshot radice per un server di distribuzione locale. La cartella snapshot è semplicemente una directory designata come condivisione. Gli agenti che eseguono letture e scritture in questa cartella devono disporre di autorizzazioni sufficienti per accedervi. Ogni server di pubblicazione che utilizza questo server di distribuzione crea una cartella nella cartella radice e ogni pubblicazione crea cartelle nella cartella del server di pubblicazione per l'archiviazione dei file snapshot. Per altre informazioni sulle impostazioni di sicurezza appropriate per la cartella, vedere Sicurezza della cartella snapshot.

  • Specificare il database di distribuzione (per un server di distribuzione locale). Nel database di distribuzione vengono memorizzati metadati e dati di cronologia relativi a tutti i tipi di replica e alle transazioni per la replica transazionale.

  • Facoltativamente, consentire ad altri server di pubblicazione di utilizzare il server di distribuzione. Se viene consentito ad altri server di pubblicazione di utilizzare il server di distribuzione, è necessario immettere la password nella pagina Password server di distribuzione per le connessioni effettuate da questi server di pubblicazione al server di distribuzione.

  • Facoltativamente, creare lo script delle impostazioni di configurazione. Per altre informazioni, vedere Scripting Replication.

Utilizzo di Transact-SQL

La pubblicazione e la distribuzione della replica possono essere configurate a livello di programmazione tramite le stored procedure di replica.

Per configurare la pubblicazione utilizzando un server di distribuzione locale

  1. Eseguire sp_get_distributor (Transact-SQL) per determinare se il server è già configurato come database di distribuzione.
  • Se il valore di installednel set di risultati è 0, eseguire sp_adddistributor (Transact-SQL) nel database master del server di distribuzione.

  • Se il valore di distribution db installed nel set di risultati è 0, eseguire sp_adddistributiondb (Transact-SQL) nel database master del server di distribuzione. Specificare il nome del database di distribuzione per @database. Facoltativamente, è possibile specificare il periodo di memorizzazione massimo delle transazioni per @max_distretention e il periodo di memorizzazione della cronologia per @history_retention. Se viene creato un nuovo database, specificare i parametri desiderati per le relative proprietà.

  1. Nel database di distribuzione, che è anche il server di pubblicazione, eseguire sp_adddistpublisher (Transact-SQL), specificando la condivisione UNC che verrà usata come cartella snapshot predefinita per @working_directory.

    Per un server di distribuzione in Istanza gestita di SQL usare un account di archiviazione di Azure per @working_directory e la chiave di accesso alle risorse di archiviazione per @storage_connection_string.

  2. Nel server di pubblicazione eseguire sp_replicationdboption (Transact-SQL). Specificare il database da pubblicare per @dbname, il tipo di replica per @optname e il valore true per @value.

Per configurare la pubblicazione utilizzando un server di distribuzione remoto

  1. Eseguire sp_get_distributor (Transact-SQL) per determinare se il server è già configurato come database di distribuzione.

    • Se il valore di installed nel set di risultati è 0, eseguire sp_adddistributor (Transact-SQL) nel database master del server di distribuzione. Specificare una password complessa per @password. Questa password per l'account distributor_admin verrà usata per la connessione del server di pubblicazione al server di distribuzione.

    • Se il valore di distribution db installed nel set di risultati è 0, eseguire sp_adddistributiondb (Transact-SQL) nel database master del server di distribuzione. Specificare il nome del database di distribuzione per @database. Facoltativamente, è possibile specificare il periodo di memorizzazione massimo delle transazioni per @max_distretention e il periodo di memorizzazione della cronologia per @history_retention. Se viene creato un nuovo database, specificare i parametri desiderati per le relative proprietà.

  2. Nel database di distribuzione eseguire sp_adddistpublisher (Transact-SQL), specificando la condivisione UNC che verrà usata come cartella snapshot predefinita per @working_directory. Se il server di distribuzione utilizza l'autenticazione di SQL Server per la connessione al server di pubblicazione, è inoltre necessario specificare il valore 0 per @security_mode e le informazioni sull'account di accesso di Microsoft SQL Server per @login e @password.

    Per un server di distribuzione in Istanza gestita di SQL usare un account di archiviazione di Azure per @working_directory e la chiave di accesso alle risorse di archiviazione per @storage_connection_string.

  3. Nel database master del server di pubblicazione eseguire sp_adddistributor (Transact-SQL). Specificare la password complessa usata nel passaggio 1 per @password. Questa password verrà utilizzata per la connessione del server di pubblicazione al server di distribuzione.

  4. Nel server di pubblicazione eseguire sp_replicationdboption (Transact-SQL). Specificare il database da pubblicare per @dbname, il tipo di replica per @optname e il valore true per @value.

Esempio (Transact-SQL)

Nell'esempio seguente viene illustrato come configurare la pubblicazione e la distribuzione a livello di programmazione. Il nome del server da configurare come server di pubblicazione e database di distribuzione locale viene specificato utilizzando variabili di scripting. La pubblicazione e la distribuzione della replica possono essere configurate a livello di programmazione tramite le stored procedure di replica.

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

Utilizzo di RMO (Replication Management Objects)

Per configurare la pubblicazione e la distribuzione su un singolo server

  1. Creare una connessione al server tramite la classe ServerConnection .

  2. Creare un'istanza della classe ReplicationServer. Passare il valore di ServerConnection ottenuto al passaggio 1.

  3. Creare un'istanza della classe DistributionDatabase.

  4. Impostare la proprietà Name sul nome del database e la proprietà ConnectionContext sul valore di ServerConnection ottenuto al passaggio 1.

  5. Installare il server di distribuzione chiamando il metodo InstallDistributor . Passare l'oggetto DistributionDatabase indicato nel passaggio 3.

  6. Creare un'istanza della classe DistributionPublisher.

  7. Impostare le proprietà seguenti di DistributionPublisher:

  1. Chiamare il metodo Create .

Per configurare la pubblicazione e la distribuzione utilizzando un server di distribuzione remoto

  1. Creare una connessione al server di distribuzione remoto tramite la classe ServerConnection .

  2. Creare un'istanza della classe ReplicationServer. Passare il valore di ServerConnection ottenuto al passaggio 1.

  3. Creare un'istanza della classe DistributionDatabase.

  4. Impostare la proprietà Name sul nome del database e la proprietà ConnectionContext sul valore di ServerConnection ottenuto al passaggio 1.

  5. Installare il server di distribuzione chiamando il metodo InstallDistributor . Specificare una password sicura (utilizzata dal server di pubblicazione per la connessione al server di distribuzione remoto) e l'oggetto DistributionDatabase ottenuto al passaggio 3. Per altre informazioni, vedere Sicurezza del database di distribuzione.

    Importante

    Se possibile, richiedere agli utenti di immettere le credenziali di sicurezza in fase di esecuzione. Se è necessario archiviare le credenziali, utilizzare i servizi di crittografia offerti da Microsoft Windows .NET Framework.

  6. Creare un'istanza della classe DistributionPublisher.

  7. Impostare le proprietà seguenti di DistributionPublisher:

  1. Chiamare il metodo Create .

  2. Creare una connessione al server di pubblicazione locale tramite la classe ServerConnection .

  3. Creare un'istanza della classe ReplicationServer. Passare l'oggetto ServerConnection indicato nel passaggio 9.

  4. Chiamare il metodo InstallDistributor . Passare il nome e la password del server di distribuzione remoto specificati al passaggio 5.

Importante

Se possibile, richiedere agli utenti di immettere le credenziali di sicurezza in fase di esecuzione. Se è necessario archiviare le credenziali, utilizzare i servizi di crittografia offerti da Windows .NET Framework.

Esempio (RMO)

È possibile configurare a livello di programmazione la pubblicazione e la distribuzione della replica utilizzando gli oggetti 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