Replication Management Objects ConceptsReplication Management Objects Concepts

QUESTO ARGOMENTO SI APPLICA A:sìSQL Server (a partire dalla versione 2008)noDatabase SQL di AzurenoAzure SQL Data Warehouse noParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server (starting with 2008)noAzure SQL DatabasenoAzure SQL Data Warehouse noParallel Data Warehouse

RMO (Replication Management Objects) è un assembly di codice gestito che incapsula le funzionalità di replica per SQL ServerSQL Server.Replication Management Objects (RMO) is a managed code assembly that encapsulates replication functionalities for SQL ServerSQL Server. RMO viene implementato dallo spazio dei nomi Microsoft.SqlServer.Replication.RMO is implemented by the Microsoft.SqlServer.Replication namespace.

Negli argomenti seguenti viene descritto come utilizzare RMO a livello di programmazione per controllare le attività di replica:The topics in the following sections describe how you can use RMO to programmatically control replication tasks:

Configurare la distribuzioneConfigure Distribution
Negli argomenti inclusi in questa sezione viene illustrato come utilizzare RMO per configurare la pubblicazione e la distribuzione.Topics in this section show how to use RMO to configure publishing and distribution.

Creare, modificare ed eliminare pubblicazioni e articoli (replica)Create, Modify, and Delete Publications and Articles (Replication)
Negli argomenti inclusi in questa sezione viene illustrato come utilizzare RMO per creare, eliminare e modificare pubblicazioni e articoli.Topics in this section show how to use RMO to create, delete, and modify publications and articles.

Sottoscrivere le pubblicazioniSubscribe to Publications
Negli argomenti inclusi in questa sezione viene illustrato come utilizzare RMO per creare, eliminare e modificare sottoscrizioni.Topics in this section show how to use RMO to create, delete, and modify subscriptions.

Proteggere una topologia di replicaSecure a Replication Topology
Negli argomenti inclusi in questa sezione viene illustrato come utilizzare RMO per visualizzare e modificare le impostazioni di sicurezza.Topics in this section show how to use RMO to view and modify security settings.

Sincronizzare le sottoscrizioni (replica)Synchronize Subscriptions (Replication)
Negli argomenti inclusi in questa sezione viene illustrato come sincronizzare le sottoscrizioni.Topics in this section show how to synchronize subscriptions.

Monitoraggio della replicaMonitoring Replication
Negli argomenti inclusi in questa sezione viene illustrato come monitorare a livello di codice una topologia di replica.Topics in this section show how to programmatically monitor a replication topology.

Introduzione alla programmazione RMOIntroduction to RMO Programming

RMO è progettato per consentire la programmazione di tutti gli aspetti della replica di SQL ServerSQL Server.RMO is designed for programming all aspects of SQL ServerSQL Server replication. Lo spazio dei nomi di RMO è Microsoft.SqlServer.Replication e viene implementato da Microsoft.SqlServer.Rmo.dll, un assembly di MicrosoftMicrosoft .NET Framework.The RMO namespace is Microsoft.SqlServer.Replication, and it is implemented by the Microsoft.SqlServer.Rmo.dll, which is a MicrosoftMicrosoft .NET Framework assembly. L'assembly Microsoft.SqlServer.Replication.dll, che appartiene allo spazio dei nomi Microsoft.SqlServer.Replication, implementa un'interfaccia di codice gestito per la programmazione dei vari agenti di replica (Agente snapshot, Agente di distribuzione e Agente di merge).The Microsoft.SqlServer.Replication.dll assembly, which also belongs to the Microsoft.SqlServer.Replication namespace, implements a managed code interface for programming the various replication agents (Snapshot Agent, Distribution Agent, and Merge Agent). È possibile accedere alle classi corrispondenti da RMO per sincronizzare le sottoscrizioni.Its classes can be accessed from RMO to synchronize subscriptions. Le classi nello spazio dei nomi Microsoft.SqlServer.Replication.BusinessLogicSupport, implementato dall'assembly Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, vengono utilizzate per creare la logica di business personalizzata per la replica di tipo merge.Classes in the Microsoft.SqlServer.Replication.BusinessLogicSupport namespace, implemented by the Microsoft.SqlServer.Replication.BusinessLogicSupport.dll assembly, are used to create custom business logic for merge replication. Questo assembly è indipendente da RMO.This assembly is independent from RMO.

Distribuzione di applicazioni basate su RMODeploying Applications Based on RMO

RMO dipende dai componenti di replica e dai componenti di connettività del client inclusi in tutte le versioni di SQL ServerSQL Server, tranne SQL Server Compact.RMO depends on the replication components and client connectivity components that are included with all versions of SQL ServerSQL Server except SQL Server Compact. Per distribuire un'applicazione basata su RMO, è necessario installare una versione di SQL ServerSQL Server che includa componenti di replica e componenti di connettività del client nel computer in cui verrà eseguita l'applicazione.To deploy an application based on RMO, you must install a version of SQL ServerSQL Server that includes replication components and client connectivity components on the computer on which the application will run.

Introduzione a RMOGetting Started with RMO

In questa sezione viene descritto come creare un progetto RMO semplice utilizzando MicrosoftMicrosoft Visual Studio.This section describes how to start a simple RMO project using MicrosoftMicrosoft Visual Studio.

Per creare un nuovo progetto di Microsoft Visual C#To create a new Microsoft Visual C# project

  1. Avviare Visual Studio.Start Visual Studio.

  2. Scegliere Nuovo progetto dal menu File.On the File menu, click NewProject. Verrà visualizzata la finestra di dialogo Nuovo progetto .The New Project dialog box appears.

  3. Nella finestra di dialogo Tipi progetto selezionare Progetti di Visual C#.In the Project Types dialog box, select Visual C# Projects. Nel riquadro Modelli selezionare Applicazione Windows.In the Templates pane, select Windows Application.

  4. (Facoltativo) In Nome digitare il nome della nuova applicazione.(Optional) In Name, type the name of the new application.

  5. Fare clic su OK per caricare il modello di Windows per Visual C#.Click OK to load the Visual C# Windows template.

  6. Scegliere Aggiungi riferimento dal menu Progetto.On the Project menu, select Add Reference item. Verrà visualizzata la finestra di dialogo Aggiungi riferimento.The Add Reference dialog box appears.

  7. Selezionare gli assembly seguenti nell'elenco della scheda .NET e quindi fare clic su OK.Select the following assemblies from the list on the .NET tab, and then click OK.

    • Interfaccia di programmazione .NET per Microsoft.SqlServer.ReplicationMicrosoft.SqlServer.Replication .NET Programming Interface

    • Microsoft.SqlServer.ConnectionInfoMicrosoft.SqlServer.ConnectionInfo

    • Libreria dell'agente di replicaReplication Agent Library

    Nota

    Per selezionare più file, utilizzare il tasto CTRL.Use the CTRL key to select more than one file.

  8. (Facoltativo) Ripetere il passaggio 6.(Optional) Repeat step 6. Fare clic sulla scheda Sfoglia, passare a C:\Program Files\Microsoft SQL Server\nnn\C:\Program Files\Microsoft SQL Server\nnn\COM, selezionare Microsoft.SqlServer.Replication.BusinessLogicSupport.dll e quindi fare clic su OK.Click the Browse tab, navigate to C:\Program Files\Microsoft SQL Server\nnn\C:\Program Files\Microsoft SQL Server\nnn\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, and then click OK.

  9. Scegliere Codice dal menu Visualizza.On the View menu, click Code.

  10. Nel codice, prima dell'istruzione dello spazio dei nomi, digitare le istruzioni using seguenti per qualificare i tipi negli spazi dei nomi di RMO:In the code, before the namespace statement, type the following using statements to qualify the types in the RMO namespaces:

    // These namespaces are required.  
    using Microsoft.SqlServer.Replication;  
    using Microsoft.SqlServer.Management.Common;  
    // This namespace is only used when creating custom business  
    // logic for merge replication.  
    using Microsoft.SqlServer.Replication.BusinessLogicSupport;   
    

Per creare un nuovo progetto di Microsoft Visual Basic .NETTo create a new Microsoft Visual Basic .NET project

  1. Avviare Visual Studio.Start Visual Studio.

  2. Scegliere Nuovo progetto dal menu File.On the File menu, select New Project. Verrà visualizzata la finestra di dialogo Nuovo progetto .The New Project dialog box appears.

  3. Nel riquadro Tipi progetto selezionare Visual Basic.In the Project Types pane, select Visual Basic. Nel riquadro Modelli selezionare Applicazione Windows.In the Templates pane, select Windows Application.

  4. (Facoltativo) Nella casella Nome digitare il nome della nuova applicazione.(Optional) In the Name box, type the name of the new application.

  5. Fare clic su OK per caricare il modello di Windows per Visual Basic.Click OK to load the Visual Basic Windows template.

  6. Scegliere Aggiungi riferimento dal menu Progetto.On the Project menu, select Add Reference. Verrà visualizzata la finestra di dialogo Aggiungi riferimento.The Add Reference dialog box appears.

  7. Selezionare gli assembly seguenti nell'elenco della scheda .NET e quindi fare clic su OK.Select the following assemblies from the list on the .NET tab, and then click OK.

    • Interfaccia di programmazione .NET per Microsoft.SqlServer.ReplicationMicrosoft.SqlServer.Replication .NET Programming Interface

    • Microsoft.SqlServer.ConnectionInfoMicrosoft.SqlServer.ConnectionInfo

    • Libreria dell'agente di replicaReplication Agent Library

    Nota

    Per selezionare più file, utilizzare il tasto CTRL.Use the CTRL key to select more than one file.

  8. (Facoltativo) Ripetere il passaggio 6.(Optional) Repeat step 6. Fare clic sulla scheda Sfoglia, passare a C:\Program Files\Microsoft SQL Server\nnn\C:\Program Files\Microsoft SQL Server\nnn\COM, selezionare Microsoft.SqlServer.Replication.BusinessLogicSupport.dll e quindi fare clic su OK.Click the Browse tab, navigate to C:\Program Files\Microsoft SQL Server\nnn\C:\Program Files\Microsoft SQL Server\nnn\COM, select Microsoft.SqlServer.Replication.BusinessLogicSupport.dll, and then click OK.

  9. Scegliere Codice dal menu Visualizza.On the View menu, click Code.

  10. Nel codice, prima di qualsiasi dichiarazione, digitare le istruzioni Imports seguenti per qualificare i tipi nello spazio dei nomi di RMO.In the code, before any declarations, type the following Imports statements to qualify the types in the RMO namespaces.

    ' These namespaces are required.  
    Imports Microsoft.SqlServer.Replication  
    Imports Microsoft.SqlServer.Management.Common  
    ' This namespace is only used when creating custom business  
    ' logic for merge replication.  
    Imports Microsoft.SqlServer.Replication.BusinessLogicSupport   
    

Connessione a un server di replicaConnecting to a Replication Server

Gli oggetti di programmazione RMO richiedono che una connessione a un'istanza di SQL ServerSQL Server venga stabilita mediante un'istanza della classe ServerConnection.RMO programming objects require that a connection to an instance of SQL ServerSQL Server is made by using an instance of the ServerConnection class. Questa connessione al server viene stabilita indipendentemente da qualsiasi oggetto di programmazione RMO.This connection to the server is made independently of any RMO programming objects. Viene quindi passata all'oggetto RMO durante la creazione dell'istanza o mediante l'assegnazione alla proprietà P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContex dell'oggetto.It is then passed to the RMO object either during instance creation or by assignment to the P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext property of the object. In questo modo, un oggetto di programmazione RMO e le istanze dell'oggetto connessione possono essere creati e gestiti separatamente e un singolo oggetto connessione può essere riutilizzato con più oggetti di programmazione RMO.In this manner, an RMO programming object and the connection object instances can be created and managed separately, and a single connection object can be reused with multiple RMO programming objects. Le regole seguenti sono valide per le connessioni a un server di replica:The following rules apply for connections to a replication server:

  • Tutte le proprietà per la connessione sono definite per un oggetto ServerConnection specificato.All properties for the connection are defined for a given ServerConnection object.

  • La connessione a ogni istanza di SQL ServerSQL Server deve disporre del relativo oggetto ServerConnection.A connection to each instance of SQL ServerSQL Server must have its own ServerConnection object.

  • L'oggetto ServerConnection è assegnato alla proprietà P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext dell'oggetto di programmazione RMO creato o a cui si accede nel server.The ServerConnection object is assigned to the P:Microsoft.SqlServer.Replication.ReplicationObject.ConnectionContext property of the RMO programming object being created or accessed on the server.

  • Il metodo Connect apre la connessione al server.The Connect method opens the connection to the server. Questo metodo deve essere chiamato prima di chiamare i metodi che consentono di accedere al server su qualsiasi oggetto di programmazione RMO utilizzando la connessione.This method must be called before calling any methods that access the server on any RMO programming objects using the connection.

  • Poiché RMO e SMO ( SQL ServerSQL Server Management Objects) utilizzano entrambi la classe ServerConnection per le connessioni a SQL ServerSQL Server, la stessa connessione può essere utilizzata sia da oggetti RMO che SMO.Because RMO and SQL ServerSQL Server Management Objects (SMO) both use the ServerConnection class for connections to SQL ServerSQL Server, the same connection can be used by both RMO and SMO objects. Per altre informazioni, vedere Connessione a un'istanza di SQL Server.For more information, see Connecting to an Instance of SQL Server.

  • Tutte le informazioni di autenticazione che consentono di stabilire la connessione e accedere correttamente al server vengono fornite nell'oggetto ServerConnection.All authentication information to make the connection and successfully log on to the server is supplied in the ServerConnection object.

  • L'autenticazione di Windows rappresenta l'impostazione predefinita.Windows Authentication is the default. Per usare SQL ServerSQL ServerAutenticazione, la proprietà LoginSecure deve essere impostata su False e Login e Password devono essere impostate su un account di accesso e una password di SQL ServerSQL Server validi.To use SQL ServerSQL Server Authentication, LoginSecure must be set to false and Login and Password must be set to a valid SQL ServerSQL Server logon and password. Le credenziali di sicurezza devono essere sempre archiviate e gestite in modo protetto, nonché fornite in fase di esecuzione quando possibile.Security credentials must always be stored and handled securely, and supplied at run-time whenever possible.

  • Per le applicazioni multithreading, in ogni thread è necessario utilizzare un oggetto ServerConnection separato.For multithreaded applications, a separate ServerConnection object should be used in each thread.

    Chiamare il metodo Disconnect sull'oggetto ServerConnection per chiudere le connessioni al server attive utilizzate da oggetti RMO.Call the Disconnect method on the ServerConnection object to close active server connections used by RMO objects.

Impostazione delle proprietà RMOSetting RMO Properties

Le proprietà degli oggetti di programmazione RMO rappresentano le proprietà di tali oggetti di replica nel server.The properties of RMO programming objects represent the properties of these replication objects at the server. Quando si creano nuovi oggetti di replica nel server, le proprietà RMO vengono utilizzate per definire tali oggetti.When creating new replication objects at the server, RMO properties are used to define these objects. Per gli oggetti esistenti, le proprietà RMO rappresentano le proprietà dell'oggetto esistente, che possono essere modificate solo per le proprietà scrivibili o configurabili.For existing objects, the RMO properties represent the existing object's properties, which can be modified only for properties that are writable or settable. Le proprietà possono essere impostate su oggetti nuovi o esistenti.Properties can be set on new objects or existing objects.

Impostazione delle proprietà per oggetti di replica nuoviSetting Properties for New Replication Objects

Quando si crea un nuovo oggetto di replica nel server, è necessario specificare tutte le proprietà obbligatorie prima di chiamare il metodo Create dell'oggetto.When creating a new replication object at the server, you must specify all required properties before calling the Create method of the object. Per altre informazioni sull'impostazione delle proprietà per un nuovo oggetto di replica, vedere Configurare la pubblicazione e la distribuzione.For more information about setting properties for a new replication object, see Configure Publishing and Distribution.

Impostazione delle proprietà per oggetti di replica esistentiSetting Properties for Existing Replication Objects

Per gli oggetti di replica che esistono nel server, a seconda dell'oggetto, RMO potrebbe supportare la possibilità di modificare alcune o tutte le proprietà corrispondenti.For replication objects that exist at the server, depending on the object, RMO might support the ability to change some or all of its properties. Solo le proprietà scrivibili o configurabili possono essere modificate.Only writable or settable properties can be changed. Prima di poter modificare le proprietà, è necessario chiamare il metodo Load o M:Microsoft.SqlServer.Replication.ReplicationObject.LoadProperties per ottenere le proprietà correnti dal server.Before properties can be changed, either the Load or the M:Microsoft.SqlServer.Replication.ReplicationObject.LoadProperties method must be called to get the current properties from the server. La chiamata di questi metodi indica che è in corso la modifica di un oggetto esistente.Calling these methods indicates that an existing object is being modified.

Per impostazione predefinita, quando si modificano le proprietà degli oggetti, RMO esegue il commit di tali modifiche nel server in base alla modalità di esecuzione dell'oggetto ServerConnection in uso.By default, when changing object properties, RMO commits these changes to the server based on the execution mode of the ServerConnection being used. Il metodo P:Microsoft.SqlServer.Replication.ReplicationObject.IsExistingObject può essere utilizzato per verificare che un oggetto esista nel server prima di tentare di recuperare o modificare le proprietà corrispondenti.The P:Microsoft.SqlServer.Replication.ReplicationObject.IsExistingObject method can be used to verify that an object exists at the server before attempting to retrieve or change its properties. Per altre informazioni sulla modifica delle proprietà di un oggetto di replica, vedere Visualizzare e modificare le proprietà del server di pubblicazione e del database di distribuzione.For more information about changing the properties of a replication object, see View and Modify Distributor and Publisher Properties.

Nota

Se più client RMO o più istanze di un oggetto di programmazione RMO stanno accedendo allo stesso oggetto di replica nel server, il metodo Refresh dell'oggetto RMO può essere chiamato per aggiornare le proprietà in base allo stato corrente dell'oggetto nel server.When multiple RMO clients or multiple instances of an RMO programming object are accessing the same replication object at the server, the Refresh method of the RMO object can be called to update the properties based on the current state of the object at the server.

Memorizzazione nella cache delle modifiche alle proprietàCaching Property Changes

Quando la proprietà SqlExecutionModes è impostata su CaptureSql, tutte le istruzioni Transact-SQLTransact-SQL generate da RMO vengono acquisite in modo che possano essere eseguite manualmente in un unico batch mediante uno dei metodo di esecuzione disponibili.When the SqlExecutionModes property is set to CaptureSql all Transact-SQLTransact-SQL statements generated by RMO are captured so that they can be executed manually in a single batch by using one of the execution methods. RMO consente di memorizzare nella cache le modifiche alle proprietà e di eseguirne il commit contemporaneamente in un unico batch mediante il metodo M:Microsoft.SqlServer.Replication.ReplicationObject.CommitPropertyChanges dell'oggetto.RMO lets you cache property changes and commit them together in a single batch by using the M:Microsoft.SqlServer.Replication.ReplicationObject.CommitPropertyChanges method of the object. Per memorizzare nella cache le modifiche alle proprietà, la proprietà P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges dell'oggetto deve essere impostata su true.To cache property changes, the P:Microsoft.SqlServer.Replication.ReplicationObject.CachePropertyChanges property of the object must be set to true. Quando si memorizzano nella cache le modifiche alle proprietà apportate in RMO, l'oggetto ServerConnection controlla comunque quando viene eseguito l'invio delle modifiche al server.When caching property changes in RMO, the ServerConnection object still controls when changes are sent to the server. Per altre informazioni sulla modifica delle proprietà di un oggetto di replica, vedere Visualizzare e modificare le proprietà del server di pubblicazione e del database di distribuzione.For more information about caching property changes for a replication object, see View and Modify Distributor and Publisher Properties.

Importante

Sebbene la classe ServerConnection supporti la dichiarazione di transazioni esplicite durante l'impostazione delle proprietà, tali transazioni possono interferire con le transazioni di replica interne e produrre risultati inaspettati. Per questo motivo non devono essere utilizzate con RMO.Although the ServerConnection class supports declaring explicit transactions when setting properties, such transactions may interfere with internal replication transactions, can produce unanticipated results, and should not be used with RMO.

EsempioExample

In questo esempio viene illustrata la memorizzazione nella cache delle modifiche alle proprietà.This example demonstrates the caching of property changes. Le modifiche apportate agli attributi di una pubblicazione transazionale rimangono memorizzate nella cache fino a quando non vengono inviate in modo esplicito al server.Changes made to the attributes of a transactional publication are cached until they are explicitly sent to the server.

// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";

TransPublication publication;

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

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

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

	// Explicitly enable caching of property changes on this object.
	publication.CachePropertyChanges = true;

	// If we can't get the properties for this publication, 
	// throw an application exception.
	if (publication.LoadProperties())
	{
		// Enable support for push subscriptions and disable support 
		// for pull subscriptions.
		if ((publication.Attributes & PublicationAttributes.AllowPull) != 0)
		{
			publication.Attributes ^= PublicationAttributes.AllowPull;
		}
		if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
		{
			publication.Attributes |= PublicationAttributes.AllowPush;
		}

		// Send changes to the server.
		publication.CommitPropertyChanges();
	}
	else
	{
		throw new ApplicationException(String.Format(
			"Settings could not be retrieved for the publication. " +
			"Ensure that the publication {0} exists on {1}.",
			publicationName, publisherName));
	}
}
catch (Exception ex)
{
	// Do error handling here.
	throw new ApplicationException(
		"The publication property could not be changed.", ex);
}
finally
{
	conn.Disconnect();
}
// Define the server, database, and publication names
string publisherName = publisherInstance;
string publicationName = "AdvWorksProductTran";
string publicationDbName = "AdventureWorks2012";

TransPublication publication;

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

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

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

	// Explicitly enable caching of property changes on this object.
	publication.CachePropertyChanges = true;

	// If we can't get the properties for this publication, 
	// throw an application exception.
	if (publication.LoadProperties())
	{
		// Enable support for push subscriptions and disable support 
		// for pull subscriptions.
		if ((publication.Attributes & PublicationAttributes.AllowPull) != 0)
		{
			publication.Attributes ^= PublicationAttributes.AllowPull;
		}
		if ((publication.Attributes & PublicationAttributes.AllowPush) == 0)
		{
			publication.Attributes |= PublicationAttributes.AllowPush;
		}

		// Send changes to the server.
		publication.CommitPropertyChanges();
	}
	else
	{
		throw new ApplicationException(String.Format(
			"Settings could not be retrieved for the publication. " +
			"Ensure that the publication {0} exists on {1}.",
			publicationName, publisherName));
	}
}
catch (Exception ex)
{
	// Do error handling here.
	throw new ApplicationException(
		"The publication property could not be changed.", ex);
}
finally
{
	conn.Disconnect();
}

Vedere ancheSee Also

Concetti di base relativi alle stored procedure del sistema di replica Replication System Stored Procedures Concepts
Concetti di base relativi alla programmazione della replicaReplication Programming Concepts