Replica transazionaleTransactional Replication

Si applica a:Applies to: sìSQL ServerSQL Server (tutte le versioni supportate) yesSQL ServerSQL Server (all supported versions) Sìdatabase SQL di AzureAzure SQL DatabaseYesdatabase SQL di AzureAzure SQL DatabaseSi applica a:Applies to: sìSQL ServerSQL Server (tutte le versioni supportate) yesSQL ServerSQL Server (all supported versions) Sìdatabase SQL di AzureAzure SQL DatabaseYesdatabase SQL di AzureAzure SQL Database

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

Nota

Istanza gestita di SQL di Azure può essere un server di pubblicazione, un server di distribuzione e un Sottoscrittore per la replica snapshot e transazionale.Azure SQL Managed Instance can be a publisher, distributor, and subscriber for snapshot and transactional replication. I database nel database SQL di Azure possono essere solo sottoscrittori push per la replica snapshot e transazionale.Databases in Azure SQL Database can only be push subscribers for snapshot and transactional replication. Per altre informazioni, vedere Replica transazionale con il database SQL di Azure e con Istanza gestita di SQL di Azure.For more information, see Transactional replication with Azure SQL Database and Azure SQL Managed Instance.

Funzionamento della replica transazionaleHow 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 inizialeInitial 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 snapshotSnapshot 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 logModifying 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 distribuzioneDistribution 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.

Tipi di pubblicazionePublication types

La replica transazionale offre quattro tipi di pubblicazione:Transactional replication offers four publication types:

Tipo di pubblicazionePublication Type DescrizioneDescription
Pubblicazione transazionale standardStandard transactional publication Appropriata per topologie in cui tutti i dati nel Sottoscrittore sono di sola lettura. (La replica transazionale non impone l'impostazione dei dati in sola lettura nel Sottoscrittore).Appropriate for topologies in which all data at the Subscriber is read-only (transactional replication does not enforce this at the Subscriber).

Le pubblicazioni transazionali standard vengono create per impostazione predefinita quando si utilizzano Transact-SQL o gli oggetti RMO (Replication Management Objects).Standard transactional publications are created by default when using Transact-SQL or Replication Management Objects (RMO). Quando si utilizza la Creazione guidata nuova pubblicazione, tali pubblicazioni vengono create selezionando Pubblicazione transazionale nella pagina Tipo di pubblicazione .When using the New Publication Wizard, they are created by selecting Transactional publication on the Publication Type page.

Per altre informazioni sulla creazione di pubblicazioni, vedere Pubblicare dati e oggetti di database.For more information about creating publications, see Publish Data and Database Objects.
Pubblicazione transazionale con sottoscrizioni aggiornabiliTransactional publication with updatable subscriptions Le caratteristiche di questo tipo di pubblicazione sono:The characteristics of this publication type are:

- Ogni posizione presenta dati identici con un unico server di pubblicazione e un unico sottoscrittore.-Each location has identical data, with one Publisher and one Subscriber.
- È possibile aggiornare le righe a livello del sottoscrittore-It is possible to update rows at the Subscriber
- Questa topologia è più adatta agli ambienti server che necessitano di disponibilità elevata e di scalabilità per la lettura.-This topology is best suited for server environments requiring high availability and read scalability.

Per altre informazioni, vedere Sottoscrizioni aggiornabili.For more information, see Updatable Subscriptions.
Topologia peer-to-peerPeer-to-peer topology Le caratteristiche di questo tipo di pubblicazione sono:The characteristics of this publication type are:
- Ogni posizione presenta dati identici e opera sia come server di pubblicazione che come sottoscrittore.- Each location has identical data and acts as both a Publisher and Subscriber.
- La stessa riga può essere modificata solo in una posizione alla volta.- The same row can be changed only at one location at a time.
- Supporta il rilevamento dei conflitti- Supports conflict detection
- Questa topologia è più adatta agli ambienti server che necessitano di disponibilità elevata e di scalabilità per la lettura.- This topology is best suited for server environments requiring high availability and read scalability.

Per altre informazioni, vedere Peer-to-Peer Transactional Replication.For more information, see Peer-to-Peer Transactional Replication.
Replica transazionale bidirezionaleBidirectional transactional replication Le caratteristiche di questo tipo di pubblicazione sono:The characteristics of this publication type are:
La replica bidirezionale è simile alla replica peer-to-peer, ma non offre la risoluzione dei conflitti.Bidirectional replication is similar to Peer-to-Peer replication, however, it does not provide conflict resolution. Inoltre, la replica bidirezionale è limitata a 2 server.Additionally, bidirectional replication is limited to 2 servers.

Per altre informazioni, vedere Replica transazionale bidirezionaleFor more information, see Bidirectional Transactional Replication