Peer-to-peer - Replica transazionalePeer-to-Peer - Transactional Replication

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

La replica peer-to-peer rappresenta una soluzione per la scalabilità orizzontale ad elevata disponibilità in quanto consente di gestire copie dei dati in più istanze del server, definite nodi.Peer-to-peer replication provides a scale-out and high-availability solution by maintaining copies of data across multiple server instances, also referred to as nodes. Compilata sulle basi della replica transazionale, la replica peer-to-peer propaga quasi in tempo reale modifiche coerenti dal punto di vista transazionale.Built on the foundation of transactional replication, peer-to-peer replication propagates transactionally consistent changes in near real-time. In tal modo le applicazioni che richiedono la scalabilità orizzontale delle operazioni di lettura possono distribuire le operazioni di lettura dei client in più nodi.This enables applications that require scale-out of read operations to distribute the reads from clients across multiple nodes. Perché i dati vengono gestiti nei nodi quasi in tempo reale, la replica peer-to-peer offre quella funzionalità di ridondanza dei dati che consente di aumentare la disponibilità dei dati.Because data is maintained across the nodes in near real-time, peer-to-peer replication provides data redundancy, which increases the availability of data.

Un'applicazione WebConsider a Web application. può ad esempio trarre vantaggio dalla replica peer-to-peer nei modi seguenti:This can benefit from peer-to-peer replication in the following ways:

  • Query sul catalogo e altre operazioni di lettura vengono estese a più nodi,Catalog queries and other reads are spread across multiple nodes. garantendo in tal modo prestazioni coerenti anche in caso di aumento delle operazioni di lettura.This enables performance to remain consistent as reads increase.

  • In caso di errore in un nodo del sistema, un livello dell'applicazione può reindirizzare a un altro nodo le operazioni di scrittura destinate a tale nodo,If one of the nodes in the system fails, an application layer can redirect the writes for that node to another node. garantendo in tal modo la disponibilità.This maintains availability.

  • Se è necessario eseguire la manutenzione di un nodo o un aggiornamento dell'intero sistema, è possibile portare offline il singolo nodo riaggiungerlo al sistema senza influire sulla disponibilità dell'applicazione.If a node requires maintenance or the whole system requires an upgrade, each node can be taken offline and added back to the system without affecting the availability of the application.

    Anche se la replica peer-to-peer consente di abilitare la scalabilità orizzontale per le operazioni di lettura, le prestazioni delle operazioni di scrittura eseguite nella topologia sono simili a quelle di un singolo nodo,Although peer-to-peer replication enables scaling out of read operations, write performance for the topology is like that for a single node. poiché alla fine tutti gli inserimenti, gli aggiornamenti e le eliminazioni vengono propagati in tutti i nodi.This is because ultimately all inserts, updates, and deletes are propagated to all nodes. La replica è in grado di stabilire quando una modifica è stata applicata a un determinato nodo e quindi di impedire che le modifiche passino da un nodo all'altro più volte.Replication recognizes when a change has been applied to a given node and prevents changes from cycling through the nodes more than one time. È consigliabile eseguire nel solo nodo le operazioni di scrittura a livello di singola riga per i motivi seguenti:We strongly recommend that write operations for each row be performed at only node, for the following reasons:

  • Se una riga viene modificata in più nodi, può causare un conflitto o persino la perdita di un aggiornamento quando viene propagata in altri nodi.If a row is modified at more than one node, it can cause a conflict or even a lost update when the row is propagated to other nodes.

  • La replica delle modifiche implica sempre una certa latenza.There is always some latency involved when changes are replicated. Per le applicazioni che richiedono la disponibilità immediata dell'ultima modifica, il bilanciamento dinamico carico dell'applicazione in più nodi può risultare problematico.For applications that require the latest change to be seen immediately, dynamically load balancing the application across multiple nodes can be problematic.

    La replica peer-to-peer include l'opzione che consente di abilitare il rilevamento dei conflitti in una topologia peer-to-peer.Peer-to-peer replication includes the option to enable conflict detection across a peer-to-peer topology. Questa opzione consente di prevenire i problemi causati da conflitti non rilevati, incluso il comportamento incoerente dell'applicazione e la perdita di aggiornamenti.This option helps prevent the issues that are caused from undetected conflicts, including inconsistent application behavior and lost updates. Se questa opzione è attivata, per impostazione predefinita, una modifica in conflitto viene considerata come un errore critico che impedisce il corretto funzionamento dell'agente di distribuzione.By enabling this option, by default a conflicting change is treated as a critical error that causes the failure of the Distribution Agent. In caso di conflitto la topologia rimane in uno stato incoerente finché il conflitto non viene risolto manualmente e i dati non vengono resi coerenti nell'intera topologia.In the event of a conflict, the topology remains in an inconsistent state until the conflict is resolved manually and the data is made consistent across the topology. Per altre informazioni, vedere Conflict Detection in Peer-to-Peer Replication.For more information, see Conflict Detection in Peer-to-Peer Replication.

Nota

Per prevenire potenziali incoerenze dei dati, evitare che si verifichino conflitti in una topologia peer-to-peer, anche quando il rilevamento dei conflitti è abilitato.To avoid potential data inconsistency, make sure that you avoid conflicts in a peer-to-peer topology, even with conflict detection enabled. Per garantire che le operazioni di scrittura relative a una determinata riga vengano eseguite in un unico nodo, le applicazioni che accedono e modificano i dati devono partizionare le operazioni di inserimento, aggiornamento ed eliminazione.To ensure that write operations for a particular row are performed at only one node, applications that access and change data must partition insert, update, and delete operations. Tale partizionamento assicura che modifiche apportate a una determinata riga in un singolo nodo vengano sincronizzate con tutti gli altri nodi della topologia prima che la riga venga modificata da un nodo diverso.This partitioning ensures that modifications to a given row originating at one node are synchronized with all other nodes in the topology before the row is modified by a different node. Se un'applicazione richiede funzionalità avanzate di rilevamento e risoluzione dei conflitti, utilizzare la replica di tipo merge.If an application requires sophisticated conflict detection and resolution capabilities, use merge replication. Per altre informazioni, vedere Replica di tipo merge e Rilevare e risolvere i conflitti tra repliche di tipo merge.For more information, see Merge Replication and Detect and Resolve Merge Replication Conflicts.

Topologie peer-to-peerPeer-to-Peer Topologies

Negli scenari seguenti vengono illustrati gli utilizzi tipici della replica peer-to-peer.The following scenarios illustrate typical uses for peer-to-peer replication.

Topologia con due databaseTopology That Has Two Participating Databases

Replica peer-to-peer, due nodiPeer-to-peer replication, two nodes

In entrambe le figure precedenti vengono illustrati due database coinvolti e il traffico di dati utente viene diretto ai database tramite un server applicazioni.Both of the preceding illustrations show two participating databases, with user traffic directed to the databases through an application server. Questa configurazione può essere utilizzata per numerose applicazioni diverse, dai siti Web alle applicazioni per gruppi di lavoro e offre i vantaggi seguenti:This configuration can be used for a variety of applications, from Web sites to workgroup applications, and provides the following benefits:

  • Migliori prestazioni di lettura, poiché le operazioni di lettura sono distribuite a due server.Improved read performance, because reads are spread out over two servers.

  • Maggiore disponibilità in caso di manutenzione o di errore in uno dei nodi.Higher availability if maintenance is required or in case of failure at one node.

    In entrambe le figure il carico dell'attività di lettura è bilanciato tra i database partecipanti, mentre gli aggiornamenti sono gestiti diversamente:In both illustrations, read activity is load-balanced between the participating databases, but updates are handled differently:

  • A sinistra, gli aggiornamenti vengono partizionati tra due server.On the left, updates are partitioned between the two servers. Ad esempio, se nel database fosse disponibile un catalogo dei prodotti, un'applicazione personalizzata potrebbe dirigere gli aggiornamenti al nodo A per i prodotti con nomi che iniziano per A-M e al nodo B per i prodotti con nomi che iniziano per N-Z. Gli aggiornamenti verrebbero quindi replicati all'altro nodo.If the database contained a product catalog, you could, for example, have a custom application direct updates to node A for product names that start with A through M, and direct updates to node B for product names that start with N through Z. Updates are then replicated to the other node.

  • A destra tutti gli aggiornamenti vengono diretti al nodo B e da questo nodo vengono quindi replicati al nodo A. Se B è offline, ad esempio per manutenzione, il server applicazioni può dirigere tutte le attività al nodo A. Quando B sarà nuovamente online, potrà essere raggiunto dagli aggiornamenti e il server applicazioni potrà spostare tutti gli aggiornamenti a B o continuare a dirigerli ad A.On the right, all updates are directed to node B. From there, updates are replicated to node A. If B is offline (for example, for maintenance), the application server can direct all activity to A. When B is back online, updates can flow to it, and the application server can move all updates back to B or keep directing them to A.

    La replica peer-to-peer può supportare entrambi gli approcci, ma l'esempio di aggiornamento centrale illustrato a destra viene spesso utilizzato nella replica transazionale standard.Peer-to-peer replication can support either approach, but the central update example on the right is also often used with standard transactional replication.

Topologie con tre o più databaseTopologies That Have Three or More Participating Databases

Replica peer-to-peer in posizioni diversePeer-to-peer replication to dispersed locations

Nella figura precedente vengono illustrati tre database partecipanti che rappresentano i dati per un'organizzazione di assistenza software internazionale, con uffici a Los Angeles, Londra e Taipei.The preceding illustration shows three participating databases that provide data for a worldwide software support organization, with offices in Los Angeles, London, and Taipei. I tecnici del supporto tecnico in tutti gli uffici ricevono le chiamate dei clienti e immettono o aggiornano informazioni su ogni chiamata.The support engineers at each office take customer calls and enter and update information about each customer call. I fusi orari dei tre uffici sono separati da un intervallo di otto ore, quindi non si verificano sovrapposizioni nella giornata lavorativa.The time zones for the three offices are eight hours apart, so there is no overlap in the workday. Quando l'ufficio di Taipei chiude, quello di Londra apre.As the Taipei office closes, the London office is opening for the day. Se è in corso una chiamata al momento della chiusura di un ufficio, la chiamata viene trasferita all'operatore dell'altro ufficio.If a call is still in progress as one office is closing, the call is transferred to a representative at the next office to open.

Ogni sede dispone di un database e di un server applicazioni, che vengono utilizzati dai tecnici del supporto tecnico per l'immissione e l'aggiornamento delle informazioni sulle chiamate dei clienti.Each location has a database and an application server, which are used by the support engineers as they enter and update information about customer calls. La topologia viene partizionata in base al tempo,The topology is partitioned by time. pertanto gli aggiornamenti vengono eseguiti solo nel nodo in uso e successivamente vengono distribuiti agli altri database coinvolti.Therefore, updates occur only at the node that is currently open for business, and then the updates flow to the other participating databases. Questa topologia offre i vantaggi seguenti:This topology provides the following benefits:

  • Indipendenza senza isolamento: ogni ufficio può inserire, aggiornare o eliminare dati in modo indipendente e, al contempo, condividere i dati poiché essi vengono replicati in tutti gli altri database coinvolti.Independence without isolation: Each office can insert, update, or delete data independently but can also share the data because it is replicated to all other participating databases.

  • Maggiore disponibilità in caso di errore o manutenzione in uno o più dei database coinvolti.Higher availability in case of failure or to allow maintenance at one or more of the participating databases.

    Replica peer-to-peer, tre e quattro nodiPeer-to-peer replication, three and four nodes

    Nella figura precedente viene illustrata l'aggiunta di un nodo alla topologia a tre nodi.The preceding illustration shows the addition of a node to the three-node topology. È possibile scegliere di aggiungere un nodo in questo scenario per i motivi seguenti:A node could be added in this scenario for the following reasons:

  • All'apertura di un altro ufficio.Because another office is opened.

  • Per garantire maggiore disponibilità in caso di manutenzione o per incrementare la tolleranza di errore in caso di errore del disco o di altro errore grave.To provide higher availability to support maintenance or increase fault tolerance if a disk failure or other major failure occurs.

    Si noti che nelle topologie a tre e quattro nodi tutti i database pubblicano e sottoscrivono dati in tutti gli altri database,Notice that in both the three- and four-node topologies, all databases publish and subscribe to all other databases. garantendo così la massima disponibilità in caso di manutenzione o di errore in uno o più nodi.This provides maximum availability in case of maintenance needs or failure of one or more nodes. In seguito all'aggiunta di nodi, è necessario bilanciare le esigenze di disponibilità e scalabilità in base alle prestazioni e alla complessità della distribuzione e dell'amministrazione.As nodes are added, you must balance availability and scalability needs against performance and the complexity of deployment and administration.

Configurazione della replica peer-to-peerConfiguring Peer-to-Peer Replication

La configurazione di una topologia di replica peer-to-peer è molto simile alla configurazione di una serie di pubblicazioni e sottoscrizioni transazionali standard.Configuring a peer-to-peer replication topology is very similar to configuring a series of standard transactional publications and subscriptions. La procedura descritta negli argomenti seguenti illustra la configurazione di un sistema a tre nodi, simile alla configurazione illustrata nel diagramma precedente a sinistra in cui è raffigurata la topologia peer-to-peer.The steps described in the following topics show the configuration of a three-node system, similar to the configuration shown on the left in the previous illustration that shows peer-to-peer topology.

Considerazioni per l'utilizzo della replica peer-to-peerConsiderations for Using Peer-to-Peer Replication

In questa sezione vengono fornite informazioni e linee guida da considerare quando si utilizza la replica peer-to-peer.This section provides information and guidelines to consider when you use peer-to-peer replication.

Considerazioni generaliGeneral Considerations

  • La replica peer-to-peer è disponibile solo nelle versioni Enterprise di SQL ServerSQL Server.Peer-to-peer replication is available only in Enterprise versions of SQL ServerSQL Server.

  • Tutti i database coinvolti nella replica peer-to-peer devono contenere lo stesso schema e gli stessi dati:All databases that participate in peer-to-peer replication should contain identical schema and data:

    • I nomi degli oggetti, lo schema degli oggetti e i nomi delle pubblicazioni devono essere identici.Object names, object schema, and publication names should be identical.

    • Le pubblicazioni devono consentire la replica delle modifiche dello schema.Publications must allow schema changes to be replicated. Il valore è 1 per la proprietà della pubblicazione replicate_ddl, che corrisponde all'impostazione predefinita. Per altre informazioni, vedere Apportare modifiche allo schema nei database di pubblicazione.(This is a setting of 1 for the publication property replicate_ddl, which is the default setting.) For more information, see Make Schema Changes on Publication Databases.

    • Non è supportata l'applicazioni di filtri alle righe e alle colonne.Row and column filtering are not supported.

  • È consigliabile configurare la replica in modo che ogni nodo utilizzi un database di distribuzione specifico.We recommend that each node use its own distribution database. In questo modo si evita il rischio che si verifichi un singolo punto di errore.This eliminates the potential of having a single point of failure.

  • Non è possibile includere tabelle e altri oggetti in più pubblicazioni peer-to-peer di un singolo database di pubblicazione.Tables and other objects cannot be included in multiple peer-to-peer publications in a single publication database.

  • Per poter creare sottoscrizioni, è necessario abilitare una pubblicazione per la replica peer-to-peer.A publication must be enabled for peer-to-peer replication before any subscriptions are created.

  • Le sottoscrizioni devono essere inizializzate mediante una copia di backup o tramite l'opzione 'replication support only' .Subscriptions must be initialized by using a backup or with the 'replication support only' option. Per altre informazioni, vedere Initialize a Transactional Subscription Without a Snapshot.For more information, see Initialize a Transactional Subscription Without a Snapshot.

  • L'utilizzo di colonne Identity non è consigliato.We do not recommend the use of identity columns. Quando si utilizzano valori Identity, è necessario unire manualmente gli intervalli assegnati alle tabelle in ogni database coinvolto.When using identities, you must manually manage the ranges assigned to the tables at each participating database. Per altre informazioni, vedere la sezione "Assegnazione di intervalli per la gestione manuale degli intervalli di valori Identity" nell'argomento Replicare colonne Identity.For more information, see the section "Assigning Ranges for Manual Identity Range Management" in Replicate Identity Columns.

Limitazioni delle funzionalitàFeature Restrictions

La replica peer-to-peer supporta le funzionalità di base della replica transazionale, ma non le opzioni descritte di seguito:Peer-to-peer replication supports the core features of transactional replication, but does not support the following options:

  • Inizializzazione e reinizializzazione con uno snapshot.Initialization and reinitialization with a snapshot.

  • Filtri di riga e colonna.Row and column filters.

  • Colonne di tipo timestamp.Timestamp columns.

  • Server di pubblicazione e Sottoscrittori non SQL ServerSQL Server .Non- SQL ServerSQL Server Publishers and Subscribers.

  • Aggiornamento immediato e sottoscrizioni ad aggiornamento in coda.Immediate updating and queued updating subscriptions.

  • Sottoscrizioni anonime.Anonymous subscriptions.

  • Sottoscrizioni parziali.Partial subscriptions.

  • Sottoscrizioni collegabili e trasformabiliAttachable subscriptions and transformable subscriptions. (opzioni entrambe deprecate in SQL Server 2005SQL Server 2005).(Both of these options were deprecated in SQL Server 2005SQL Server 2005.)

  • Agenti di distribuzione condivisi.Shared Distribution Agents.

  • Il parametro -SubscriptionStreams dell'agente di distribuzione e il parametro -MaxCmdsInTrandell'agente di lettura log.The Distribution Agent parameter -SubscriptionStreams and the Log Reader Agent parameter -MaxCmdsInTran.

  • Le proprietà di articolo @destination_owner e @destination_table.The article properties @destination_owner and @destination_table.

  • La replica transazionale peer-to-peer non supporta la creazione di una sottoscrizione transazionale unidirezionale di una pubblicazione peer-to-peer.Peer-to-Peer transactional replication does not support creating a one-way transactional subscription to a Peer-to-Peer publication

    Per le proprietà indicate di seguito sono presenti considerazioni speciali:The following properties have special considerations:

  • La proprietà di pubblicazione @allow_initialize_from_backup richiede il valore true.The publication property @allow_initialize_from_backup requires a value of true.

  • La proprietà di articolo @replicate_ddl richiede il valore true, @identityrangemanagementoption richiede il valore manuale @status richiede che l'opzione 24 sia impostata.The article property @replicate_ddl requires a value of true; @identityrangemanagementoption requires a value of manual; and @status requires that option 24 is set.

  • Il valore delle proprietà di articolo @ins_cmd, @del_cmde @upd_cmd non può essere impostato su SQL.The value for article properties @ins_cmd, @del_cmd, and @upd_cmd cannot be set to SQL.

  • La proprietà di sottoscrizione @sync_type richiede il valore none o automatic.The subscription property @sync_type requires a value of none or automatic.

Considerazioni relative alla manutenzioneMaintenance Considerations

Per alcune operazioni è necessario mettere il sistema in stato di inattività,Some actions require the system to be quiescent. ovvero arrestare le attività sulle tabelle pubblicate in tutti i nodi e verificare che ogni nodo abbia ricevuto tutte le modifiche dagli altri nodi:This means stopping activity on published tables at all nodes and making sure that each node has received all changes from all other nodes.

Solo peer di SQL Server 2005 o una combinazione di peer di SQL Server 2005 con peer di SQL Server 2008 e versioni successiveSQL Server 2005 peers only or mix of SQL Server 2005 peers with SQL Server 2008 peers and higher Solo peer di SQL Server 2005 o una combinazione di peer di SQL Server 2005 con peer di SQL Server 2008 e versioni successiveSQL Server 2005 peers only or mix of SQL Server 2005 peers with SQL Server 2008 peers and higher Peer di SQL2008 e versioni successiveSQL2008 peers and higher Peer di SQL2008 e versioni successiveSQL2008 peers and higher
Aggiunta di un nodo alla topologiaAdding a node to the topology 2 nodi nella topologia completa: disattivazione non obbligatoria.2 nodes in complete topology: No quiescing required. Usare sync_type = 'initialize with backup'.Use sync_type = 'initialize with backup'. Più di due nodi: disattivazione obbligatoria.More than 2 nodes: Quiescing required. sync_type = 'replication support only': disattivazione obbligatoria.sync_type = 'replication support only': Quiescing required. sync_type = 'initialize with backup' e 'initialize from lsn': disattivazione non obbligatoria.sync_type = 'initialize with backup' and 'initialize from lsn': No quiescing required.

Le modifiche dello schema di topologia (aggiunta o eliminazione di un articolo) richiedono la disattivazione.Topology schema changes (adding or dropping an article) requires quiescing. Per altre informazioni, vedere Amministrare una topologia peer-to-peer (programmazione Transact-SQL della replica).For more information, see Administer a Peer-to-Peer Topology (Replication Transact-SQL Programming).

La rimozione di un nodo dalla topologia non richiede mai la disattivazione.Removing a node from the topology never requires quiescing.

La modifica delle proprietà dell'articolo con sp_changearticle non richiede mai la disattivazione.Changing the article properties by using sp_changearticle never requires quiescing. Le modifiche consentite (per P2P) sono le proprietà description, ins_cmd, upd_cmde del_cmd .Allowable changes (for P2P) are the description, ins_cmd, upd_cmd, and del_cmd properties.

Le modifiche dello schema dell'articolo (aggiunta o eliminazione di una colonna) non richiedono mai la disattivazione.Article Schema changes (adding/dropping column) never requires quiescing.

  • Aggiunta di un articolo: per aggiungere un articolo alla configurazione esistente è necessario disattivare il sistema, eseguire l'istruzione CREATE TABLE e caricare i dati iniziali in ciascun nodo nella topologia, quindi aggiungere il nuovo articolo in ogni nodo nella topologia.Adding article: For adding an article to an existing configuration- we need to quiesce the system, execute CREATE TABLE statement & load initial data at each node in the topology and add the new article at each node in the topology.

  • Eliminazione di un articolo: per ottenere uno stato coerente in tutti i nodi è necessario disattivare la topologiaDropping article: If we want a consistent state on all nodes, we need to quiesce the topology

    Per altre informazioni, vedere Come mettere una topologia di replica in stato di inattività (programmazione Transact-SQL della replica) e Amministrare una topologia peer-to-peer (programmazione Transact-SQL della replica).For more information, see Quiesce a Replication Topology (Replication Transact-SQL Programming) and Administer a Peer-to-Peer Topology (Replication Transact-SQL Programming).

  • Se si aggiunge un nuovo nodo a una topologia peer-to-peer, è necessario eseguire il ripristino solo dai backup creati dopo l'aggiunta del nuovo nodo.If you add a new node to a peer-to-peer topology, you should restore only from backups that were created after the new node was added.

  • Non è possibile reinizializzare le sottoscrizioni in una topologia peer-to-peer.You cannot reinitialize subscriptions in a peer-to-peer topology. Per garantire che un nodo disponga di una nuova copia dei dati, ripristinare un backup nel nodo stesso.If you have to ensure that a node has a new copy of the data, restore a backup at the node.

Vedere ancheSee Also

Amministrare una topologia peer-to-peer (programmazione Transact-SQL della replica) Administer a Peer-to-Peer Topology (Replication Transact-SQL Programming)
Strategie per il backup e il ripristino della replica snapshot e della replica transazionale Strategies for Backing Up and Restoring Snapshot and Transactional Replication
Tipi di pubblicazioni per la replica transazionale Publication Types for Transactional Replication