Replica transazionaleTransactional Replication

La replica transazionale in genere ha inizio con la creazione di uno snapshot degli oggetti e dei dati del database di pubblicazione.Transactional replication typically starts with a snapshot of the publication database objects and data. Dopo la creazione dello snapshot iniziale, le successive modifiche ai dati e allo schema eseguite nel server di pubblicazione vengono generalmente recapitate al Sottoscrittore nel momento in cui vengono eseguite.As soon as the initial snapshot is taken, subsequent data changes and schema modifications made at the Publisher are usually delivered to the Subscriber as they occur (in near real time). Le modifiche ai dati vengono applicate al Sottoscrittore nello stesso ordine e negli stessi limiti della transazione con cui vengono eseguite nel server di pubblicazione. Di conseguenza, la consistenza transazionale all'interno di una pubblicazione è garantita.The data changes are applied to the Subscriber in the same order and within the same transaction boundaries as they occurred at the Publisher; therefore, within a publication, transactional consistency is guaranteed.

La replica transazionale viene solitamente utilizzata negli ambienti da server a server ed è appropriata ai casi seguenti:Transactional replication is typically used in server-to-server environments and is appropriate in each of the following cases:

  • Si desidera propagare modifiche incrementali ai Sottoscrittori appena vengono apportate.You want incremental changes to be propagated to Subscribers as they occur.

  • L'applicazione richiede una bassa latenza tra il momento in cui le modifiche vengono apportate nel server di pubblicazione e il momento in cui raggiungono il Sottoscrittore.The application requires low latency between the time changes are made at the Publisher and the changes arrive at the Subscriber.

  • L'applicazione richiede l'accesso a stati dei dati intermedi.The application requires access to intermediate data states. Se una riga viene modificata cinque volte, ad esempio, la replica transazionale consente a un'applicazione di rispondere a ogni modifica, ad esempio attivando un trigger, anziché soltanto alla modifica di dati netta apportata alla riga.For example, if a row changes five times, transactional replication allows an application to respond to each change (such as firing a trigger), not simply the net data change to the row.

  • Il server di pubblicazione è caratterizzato da un'intensa attività di inserimento, aggiornamento ed eliminazione.The Publisher has a very high volume of insert, update, and delete activity.

  • Il server di pubblicazione o il Sottoscrittore è un database non SQL ServerSQL Server , ad esempio Oracle.The Publisher or Subscriber is a non- SQL ServerSQL Server database, such as Oracle.

    Per impostazione predefinita, i Sottoscrittori di pubblicazioni transazionali devono essere considerati di sola lettura poiché le modifiche non vengono trasferite al server di pubblicazione.By default, Subscribers to transactional publications should be treated as read-only, because changes are not propagated back to the Publisher. La replica transazionale offre tuttavia opzioni che consentono aggiornamenti nel Sottoscrittore.However, transactional replication does offer options that allow updates at the Subscriber.

    Contenuto dell'argomentoIn This Topic

    Funzionamento della replica transazionaleHow Transactional Replication Works

    Set di dati inizialeInitial Dataset

    agente snapshotSnapshot Agent

    Agente di lettura logLog Reader Agent

    Agente di distribuzioneDistribution Agent

Funzionamento della replica transazionale How Transactional Replication Works

La replica transazionale viene implementata dall'agente snapshot, dall'agente di lettura log e dall'agente di distribuzione SQL ServerSQL Server .Transactional replication is implemented by the SQL ServerSQL Server Snapshot Agent, Log Reader Agent, and Distribution Agent. L'agente snapshot prepara i file di snapshot contenenti lo schema e i dati delle tabelle pubblicate e degli oggetti di database, archivia i file nella cartella snapshot e registra i processi di sincronizzazione nel database di distribuzione sul server di distribuzione.The Snapshot Agent prepares snapshot files containing schema and data of published tables and database objects, stores the files in the snapshot folder, and records synchronization jobs in the distribution database on the Distributor.

L'agente di lettura log esegue il monitoraggio del log delle transazioni di tutti i database configurati per la replica transazionale e copia le transazioni contrassegnate per la replica dal log delle transazioni al database di distribuzione, che agisce come coda di archiviazione e inoltro affidabile.The Log Reader Agent monitors the transaction log of each database configured for transactional replication and copies the transactions marked for replication from the transaction log into the distribution database, which acts as a reliable store-and-forward queue. L'agente di distribuzione copia nei Sottoscrittori i file snapshot iniziali dalla cartella snapshot e le transazioni archiviate nelle tabelle del database di distribuzione.The Distribution Agent copies the initial snapshot files from the snapshot folder and the transactions held in the distribution database tables to Subscribers.

Le modifiche incrementali effettuate nel server di pubblicazione vengono trasferite nei Sottoscrittori in base alla pianificazione dell'agente di distribuzione, che può essere eseguito in modo continuo per una latenza minima o a intervalli pianificati.Incremental changes made at the Publisher flow to Subscribers according to the schedule of the Distribution Agent, which can run continuously for minimal latency, or at scheduled intervals. Quando la replica transazionale viene utilizzata senza l'opzione di aggiornamento immediato o in coda, le modifiche ai dati devono essere apportate nel server di pubblicazione. Di conseguenza tra gli aggiornamenti non si verifica alcun conflitto.Because changes to the data must be made at the Publisher (when transactional replication is used without immediate updating or queued updating options), update conflicts are avoided. Alla fine in tutti i Sottoscrittori saranno disponibili gli stessi valori inclusi del server di pubblicazione.Ultimately, all Subscribers will achieve the same values as the Publisher. Se si utilizza la replica transazionale con l'opzione di aggiornamento immediato o in coda, è possibile apportare aggiornamenti nel Sottoscrittore. Nel caso dell'aggiornamento in coda, è possibile che si verifichino conflitti.If immediate updating or queued updating options are used with transactional replication, updates can be made at the Subscriber, and with queued updating, conflicts might occur.

Nella figura seguente vengono illustrati i componenti principali della replica transazionale.The following illustration shows the principal components of transactional replication.

Componenti e flusso di dati per la replica transazionaleTransactional replication components and data flow

Set di dati iniziale Initial Dataset

Un nuovo Sottoscrittore per la replica transazionale può ricevere modifiche incrementali da un server di pubblicazione solo quando contiene lo stesso schema e gli stessi dati disponibili nelle tabelle del server di pubblicazione.Before a new transactional replication Subscriber can receive incremental changes from a Publisher, the Subscriber must contain tables with the same schema and data as the tables at the Publisher. Il set di dati iniziale è generalmente uno snapshot creato dall'agente snapshot e distribuito e applicato dall'agente di distribuzione.The initial dataset is typically a snapshot that is created by the Snapshot Agent and distributed and applied by the Distribution Agent. È inoltre possibile ottenerlo mediante un backup o altri strumenti, come SQL ServerSQL Server Integration Services.The initial dataset can also be supplied through a backup or other means, such as SQL ServerSQL Server Integration Services.

La distribuzione e l'applicazione degli snapshot nei Sottoscrittori ha effetto solo sui Sottoscrittori in attesa degli snapshot inizialiWhen snapshots are distributed and applied to Subscribers, only those Subscribers waiting for initial snapshots are affected. e non sugli altri Sottoscrittori della pubblicazione che sono stati già inizializzati.Other Subscribers to that publication (those that have already been initialized) are unaffected.

Elaborazione di snapshot concorrentiConcurrent Snapshot Processing

La replica snapshot colloca blocchi condivisi su tutte le tabelle pubblicate durante la replica e per tutta la durata della generazione degli snapshot.Snapshot replication places shared locks on all tables published as part of replication for the duration of snapshot generation. La presenza di tali blocchi può impedire l'esecuzione di aggiornamenti nelle tabelle di pubblicazione.This can prevent updates from being made on the publishing tables. Tramite l'elaborazione degli snapshot concorrenti, ovvero l'impostazione predefinita nella replica transazionale, i blocchi di condivisione non vengono mantenuti attivi durante l'intero processo di generazione degli snapshot. In questo modo gli utenti possono lavorare senza essere interrotti mentre è in corso la creazione dei file dello snapshot iniziale.Concurrent snapshot processing, the default with transactional replication, does not hold the share locks in place during the entire snapshot generation, which allows users to continue working uninterrupted while replication creates initial snapshot files.

agente snapshot Snapshot Agent

Le procedure con cui l'agente snapshot implementa lo snapshot iniziale nella replica transazionale sono analoghe alle procedure utilizzate nella replica snapshot, ad eccezione di quanto descritto sopra in relazione all'elaborazione degli snapshot concorrenti.The procedures by which the Snapshot Agent implements the initial snapshot in transactional replication are the same procedures used in snapshot replication (except as outlined above with regard to concurrent snapshot processing).

Dopo avere generato i file di snapshot, è possibile visualizzarli nella cartella snapshot tramite Esplora risorse di MicrosoftMicrosoft .After the snapshot files have been generated, you can view them in the snapshot folder using MicrosoftMicrosoft Windows Explorer.

Modifica dei dati e dell'agente di lettura log Modifying Data and the Log Reader Agent

L'agente di lettura log viene eseguito nel server di distribuzione, generalmente in modo continuo sebbene sia possibile eseguirlo anche in base a una pianificazione stabilita.The Log Reader Agent runs at the Distributor; it typically runs continuously, but can also run according to a schedule you establish. Quando viene eseguito, l'agente di lettura log legge prima il log delle transazioni della pubblicazione, ovvero lo stesso log di database utilizzato per il rilevamento e il recupero delle transazioni durante il normale funzionamento del Motore di database di SQL ServerSQL Server , e identifica tutte le istruzioni INSERT, UPDATE e DELETE o le modifiche di altro tipo apportate ai dati delle transazioni contrassegnate per la replica.When executing, the Log Reader Agent first reads the publication transaction log (the same database log used for transaction tracking and recovery during regular SQL ServerSQL Server Database Engine operations) and identifies any INSERT, UPDATE, and DELETE statements, or other modifications made to the data in transactions that have been marked for replication. L'agente copia quindi le transazioni in batch nel database di distribuzione del server di distribuzione.Next, the agent copies those transactions in batches to the distribution database at the Distributor. Tramite la stored procedure interna sp_replcmds l'agente di lettura log acquisisce dal log il set successivo di comandi contrassegnati per la replica.The Log Reader Agent uses the internal stored procedure sp_replcmds to get the next set of commands marked for replication from the log. Il database di distribuzione diventa quindi la coda di archiviazione e inoltro da cui le modifiche vengono inviate ai Sottoscrittori.The distribution database then becomes the store-and-forward queue from which changes are sent to Subscribers. Al database di distribuzione vengono inviate solo le transazioni di cui è stato eseguito il commit.Only committed transactions are sent to the distribution database.

Dopo la scrittura dell'intero batch di transazioni nel database di distribuzione, ne viene eseguito il commit.After the entire batch of transactions has been written successfully to the distribution database, it is committed. Al termine del commit di ogni batch di comandi nel server di distribuzione l'agente di lettura log chiama la stored procedure sp_repldone per contrassegnare il punto in cui è stato completato l'ultimo processo di replica,Following the commit of each batch of commands to the Distributor, the Log Reader Agent calls sp_repldone to mark where replication was last completed. quindi contrassegna le righe del log delle transazioni pronte per essere eliminate.Finally, the agent marks the rows in the transaction log that are ready to be purged. Le righe in attesa di replica non vengono eliminate.Rows still waiting to be replicated are not purged.

I comandi di transazione vengono archiviati nel database di distribuzione finché non vengono propagati a tutti i Sottoscrittori o finché non viene raggiunto il periodo massimo di memorizzazione della distribuzione.Transaction commands are stored in the distribution database until they are propagated to all Subscribers or until the maximum distribution retention period has been reached. I Sottoscrittori ricevono le transazioni nello stesso ordine in cui sono state applicate nel server di pubblicazione.Subscribers receive transactions in the same order in which they were applied at the Publisher.

Agente di distribuzione Distribution Agent

L'agente di distribuzione viene eseguito nel server di distribuzione per le sottoscrizioni push e nel Sottoscrittore per le sottoscrizioni pull.The Distribution Agent runs at the Distributor for push subscriptions and at the Subscriber for pull subscriptions. e sposta le transazioni dal database di distribuzione al Sottoscrittore.The agent moves transactions from the distribution database to the Subscriber. Se una sottoscrizione è contrassegnata per la convalida, l'agente di distribuzione verifica anche se i dati nel server di pubblicazione e nel Sottoscrittore corrispondono.If a subscription is marked for validation, the Distribution Agent also checks whether data at the Publisher and Subscriber match.