Mirroring e replica del database (SQL Server)Database Mirroring and Replication (SQL Server)

Per migliorare la disponibilità del database di pubblicazione è possibile utilizzare il mirroring del database in combinazione con la replica.Database mirroring can be used in conjunction with replication to improve availability for the publication database. Il mirroring del database coinvolge due copie di un unico database che in genere risiedono in computer diversi.Database mirroring involves two copies of a single database that typically reside on different computers. In un momento dato solo una copia del database risulta disponibile per i client.At any given time, only one copy of the database is currently available to clients. Questa copia viene definita database principale.This copy is known as the principal database. Gli aggiornamenti apportati dai client al database principale vengono applicati all'altra copia del database, definita database mirror.Updates made by clients to the principal database are applied on the other copy of the database, known as the mirror database. Il processo di mirroring prevede l'applicazione nel database mirror del log delle transazioni relativo a ogni operazione di inserimento, aggiornamento o eliminazione eseguita sul database principale.Mirroring involves applying the transaction log from every insertion, update, or deletion made on the principal database onto the mirror database.

Il failover della replica su un server mirror è supportato completamente per i database di pubblicazione e parzialmente per i database di sottoscrizione.Replication failover to a mirror is fully supported for publication databases, with limited support for subscription databases. Non è supportato l'utilizzo del database di distribuzione con il mirroring del database.Database mirroring is not supported for the distribution database. Per informazioni sul recupero di un database di distribuzione o di un database di sottoscrizione senza che sia necessario riconfigurare la replica, vedere Backup e ripristino di database replicati.For information about recovering a distribution database or subscription database without any need to reconfigure replication, see Back Up and Restore Replicated Databases. Per informazioni sul mirroring del database sottoscrittore, vedereFor information about mirroring the subscriber database, see the

Nota

Dopo un failover, il server mirror diventa il server principale.After a failover, the mirror becomes the principal. In questo argomento "principale" e "mirror" si riferiscono sempre al server principale originale e al server mirror.In this topic, "principal" and "mirror" always refer to the original principal and mirror.

Requisiti e considerazioni per l'utilizzo della replica con il mirroring del databaseRequirements and Considerations for Using Replication with Database Mirroring

Prendere in considerazione i requisiti e le considerazioni seguenti quando si utilizza la replica con il mirroring del database:Be aware of the following requirements and considerations when using replication with database mirroring:

  • I server principale e mirror devono condividere un server di distribuzione.The principal and mirror must share a Distributor. È consigliabile che quest'ultimo sia un server di distribuzione remoto, in quanto garantisce una maggiore tolleranza di errore nel caso si verifichi un failover non pianificato sul server di pubblicazione.We recommend that this be a remote Distributor, which provides greater fault tolerance if the Publisher has an unplanned failover.

  • Il mirroring del database di pubblicazione è supportato nella replica di tipo merge e nella replica transazionale con Sottoscrittori di sola lettura o Sottoscrittori ad aggiornamento in coda.Replication supports mirroring the publication database for merge replication and for transactional replication with read-only Subscribers or queued updating Subscribers. Non sono supportati Sottoscrittori ad aggiornamento immediato, server di pubblicazione Oracle, server di pubblicazione in una topologia peer-to-peer e ripubblicazione.Immediate updating Subscribers, Oracle Publishers, Publishers in a peer-to-peer topology, and republishing are not supported.

  • I metadati e gli oggetti esterni al database, ad esempio account di accesso, processi, server collegati e così via, non vengono copiati nel database mirror.Metadata and objects that exist outside the database are not copied to the mirror, including logins, jobs, linked servers, and so on. Se i metadati e gli oggetti sono necessari nel database mirror, è necessario copiarli manualmente.If you require the metadata and objects at the mirror, you must copy them manually. Per altre informazioni, vedere Gestione di account di accesso e di processi dopo un cambio di ruolo (SQL Server).For more information, see Management of Logins and Jobs After Role Switching (SQL Server).

Configurazione della replica con il mirroring del databaseConfiguring Replication with Database Mirroring

Per configurare la replica e il mirroring del database è necessario eseguire cinque operazioni.Configuring replication and database mirroring involves five steps. Ogni operazione è descritta in dettaglio nella sezione seguente.Each step is described in more detail in the following section.

  1. Configurare il server di pubblicazione.Configure the Publisher.

  2. Configurare il mirroring del database.Configure database mirroring.

  3. Configurare il database mirror in modo che utilizzi lo stesso server di distribuzione del database principale.Configure the mirror to use the same Distributor as the principal.

  4. Configurare gli agenti di replica per il failover.Configure replication agents for failover.

  5. Aggiungere i database principale e mirror a Monitoraggio replica.Add the principal and mirror to Replication Monitor.

    Le operazioni ai passaggi 1 e 2 possono anche essere eseguite in ordine inverso.Steps 1 and 2 can also be performed in the opposite order.

Per configurare il mirroring di un database di pubblicazioneTo configure database mirroring for a publication database

  1. Configurare il server di pubblicazione:Configure the Publisher:

    1. È consigliabile utilizzare un server di distribuzione remoto.We recommend using a remote Distributor. Per altre informazioni sulla configurazione della distribuzione, vedere Configurare la distribuzione.For more information about configuring distribution, see Configure Distribution.

    2. È possibile abilitare un database per pubblicazioni snapshot e transazionali e/o pubblicazioni di tipo merge.You can enable a database for snapshot and transactional publications and/or merge publications. Nel caso di database con mirroring che includono più tipi di pubblicazione, è necessario abilitare il database per entrambi i tipi in corrispondenza dello stesso nodo usando sp_replicationdboption.For mirrored databases that will contain more than one type of publication, you must enable the database for both types at the same node using sp_replicationdboption. È ad esempio possibile eseguire le chiamate di stored procedure seguenti nel server principale:For example, you could execute the following stored procedure calls at the principal:

      exec sp_replicationdboption @dbname='<PublicationDatabase>', @optname='publish', @value=true;  
      exec sp_replicationdboption @dbname='<PublicationDatabase>', @optname='mergepublish', @value=true;  
      

      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.

  2. Configurare il mirroring del database.Configure database mirroring. Per altre informazioni, vedere Stabilire una sessione di mirroring del database tramite autenticazione di Windows (SQL Server Management Studio) e Impostazione del mirroring del database (SQL Server).For more information, see Establish a Database Mirroring Session Using Windows Authentication (SQL Server Management Studio) and Setting Up Database Mirroring (SQL Server).

  3. Configurare la distribuzione per il server mirror.Configure distribution for the mirror. Assegnare al database mirror lo stesso nome del server di pubblicazione e specificare lo stesso server di distribuzione e la stessa cartella snapshot utilizzati dal database principale.Specify the mirror name as the Publisher, and specify the same Distributor and snapshot folder that the principal uses. Se ad esempio si configura la replica con stored procedure, eseguire sp_adddistpublisher nel server di distribuzione e quindi sp_adddistributor nel mirror.For example, if you are configuring replication with stored procedures, execute sp_adddistpublisher at the Distributor; and then execute sp_adddistributor at the mirror. Per sp_adddistpublisher:For sp_adddistpublisher:

    • Impostare il valore del parametro @publisher sul nome di rete del server mirror.Set the value of the @publisher parameter to the network name of the mirror.

    • Impostare il valore del parametro @working_directory sulla cartella snapshot usata dal server principale.Set the value of the @working_directory parameter to the snapshot folder used by the principal.

  4. Specificare il nome del database mirror per il parametro dell'agente –PublisherFailoverPartner .Specify the mirror name for the –PublisherFailoverPartner agent parameter. Questo parametro è necessario per l'identificazione del database mirror dopo il failover da parte degli agenti seguenti:Agent This parameter is required for the following agents to identify the mirror after failover:

    • Agente snapshot (per tutte le pubblicazioni)Snapshot Agent (for all publications)

    • Agente di lettura log (per tutte le pubblicazioni transazionali)Log Reader Agent (for all transactional publications)

    • Agente di lettura coda (per le pubblicazioni transazionali che supportano le sottoscrizioni ad aggiornamento in coda)Queue Reader Agent (for transactional publications that support queued updating subscriptions)

    • Agente di merge (per le sottoscrizioni di tipo merge)Merge Agent (for merge subscriptions)

    • SQL ServerSQL Server Listener per la replica di (replisapi.dll: per le sottoscrizioni di tipo merge sincronizzate usando sincronizzazione Web) replication listener (replisapi.dll: for merge subscriptions synchronized using Web synchronization)

    • Controllo ActiveX merge SQL (per le sottoscrizioni di tipo merge sincronizzate tramite il controllo)SQL Merge ActiveX Control (for merge subscriptions synchronized with the control)

      Questo parametro non è necessario per l'agente di distribuzione e il controllo ActiveX distribuzione SQL in quanto questi ultimi non si connettono al server di pubblicazione.The Distribution Agent and Distribution ActiveX Control do not have this parameter because they do not connect to the Publisher.

      Le modifiche apportate al parametro dell'agente verranno applicate al successivo avvio dell'agente.Agent parameter changes take effect the next time the agent is started. Se l'agente viene eseguito in modo continuo, è necessario arrestarlo e riavviarlo.If the agent runs continuously, you must stop and restart the agent. I parametri possono essere specificati nei profili agenti e al prompt dei comandi.Parameters can be specified in agent profiles and from the command prompt. Per altre informazioni, vedere:For more information, see:

    • Visualizzare e modificare i parametri del prompt dei comandi dell'agente di replica (SQL Server Management Studio)View and Modify Replication Agent Command Prompt Parameters (SQL Server Management Studio)

    • Concetti di base relativi ai file eseguibili dell'agente di replicaReplication Agent Executables Concepts

      È consigliabile aggiungere il parametro –PublisherFailoverPartner a un profilo agente e quindi specificare il nome del database mirror nel profilo.We recommend adding the –PublisherFailoverPartner to an agent profile, and then specifying the mirror name in the profile. Se ad esempio si sta configurando la replica con stored procedure:For example, if you are configuring replication with stored procedures:

    -- Execute sp_help_agent_profile in the context of the distribution database to get the list of profiles.  
    -- Select the profile id of the profile that needs to be updated from the result set.  
    -- In the agent_type column returned by sp_help_agent_profile:   
    -- 1 = Snapshot Agent; 2 = Log Reader Agent; 3 = Distribution Agent; 4 = Merge Agent; 9 = Queue Reader Agent.  
    
    exec sp_help_agent_profile;  
    
    -- Setting the -PublisherFailoverPartner parameter in the default Snapshot Agent profile (profile 1).  
    -- Execute sp_add_agent_parameter in the context of the distribution database.  
    exec sp_add_agent_parameter @profile_id = 1, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N'<Failover Partner Name>';  
    
    -- Setting the -PublisherFailoverPartner parameter in the default Merge Agent profile (profile 6).  
    -- Execute sp_add_agent_parameter in the context of the distribution database.  
    exec sp_add_agent_parameter @profile_id = 6, @parameter_name = N'-PublisherFailoverPartner', @parameter_value = N'<Failover Partner Name>';  
    
  5. Aggiungere i database principale e mirror a Monitoraggio replica.Add the principal and mirror to Replication Monitor. Per altre informazioni, vedere Aggiungere e rimuovere server di pubblicazione da Monitoraggio replica.For more information, see Add and Remove Publishers from Replication Monitor.

Gestione di un database di pubblicazione con mirroringMaintaining a Mirrored Publication Database

La gestione di un database di pubblicazione con mirroring è sostanzialmente analoga a quella di un database senza mirroring, con le considerazioni seguenti:Maintaining a mirrored publication database is essentially the same as maintaining a non-mirrored database, with the following considerations:

  • L'amministrazione e il monitoraggio devono essere eseguiti sul server attivo.Administration and monitoring must occur at the active server. In SQL Server Management StudioSQL Server Management Studiole pubblicazioni sono incluse nella cartella Pubblicazioni locali solo per il server attivo.In SQL Server Management StudioSQL Server Management Studio, publications appear under the Local Publications folder only for the active server. Se si esegue ad esempio il failover sul database mirror, le pubblicazioni vengono visualizzate nel database mirror e non più nel database principale.For example, if you failover to the mirror, the publications are displayed at the mirror and are no longer displayed at the principal. Se viene eseguito il failover del database sul database mirror, potrebbe essere necessario aggiornare manualmente Management StudioManagement Studio e Monitoraggio replica per applicare la modifica.If the database fails over to the mirror, you might need to manually refresh Management StudioManagement Studio and Replication Monitor for the change to be reflected.

  • In Monitoraggio replica vengono visualizzati i nodi del server di pubblicazione nell'albero degli oggetti per il server principale e il server mirror.Replication Monitor displays Publisher nodes in the object tree for both the principal and the mirror. Se il server principale è il server attivo, le informazioni relative alla pubblicazione vengono visualizzate solo nel nodo principale in Monitoraggio replica.If the principal is the active server, publication information is displayed only under the principal node in Replication Monitor.

    Se il server mirror è il server attivo:If the mirror is the active server:

    • Se si è verificato un errore nell'agente, l'errore è indicato solo nel nodo principale e non nel nodo mirror.If an agent has an error, the error is indicated only on the principal node, not on the mirror node.

    • Se il server principale non è disponibile, i nodi principale e mirror visualizzano elenchi di pubblicazioni identici.If the principal is unavailable, the principal and mirror nodes display identical lists of publications. È necessario eseguire il monitoraggio delle pubblicazioni nel nodo mirror.Monitoring should be performed on the publications under the mirror node.

  • Se si amministra la replica sul database mirror mediante stored procedure o oggetti RMO (Replication Management Objects), per i casi in cui si specifica il nome del server di pubblicazione indicare il nome dell'istanza in cui il database è stato abilitato per la replica.When using stored procedures or Replication Management Objects (RMO) to administer replication at the mirror, for cases in which you specify the Publisher name, you must specify the name of the instance on which the database was enabled for replication. Per determinare il nome appropriato, usare la funzione publishingnomeserver.To determine the appropriate name, use the function publishingservername.

    Quando si esegue il mirroring di un database di pubblicazione, i metadati della replica archiviati nel database con mirroring sono identici a quelli archiviati nel database principale.When a publication database is mirrored, the replication metadata stored in the mirrored database is identical to the metadata stored in the principal database. Ne consegue che, per i database di pubblicazione abilitati per la replica nel database principale, il nome dell'istanza del server di pubblicazione archiviato in tabelle di sistema nel database mirror equivale al nome del database principale e non a quello del database mirror.Consequently, for publication databases enabled for replication at the principal, the Publisher instance name stored in system tables at the mirror is the name of the principal, not the mirror. Ciò influisce sulla manutenzione e sulla configurazione della replica se viene eseguito il failover del database di pubblicazione sul server mirror.This affects replication configuration and maintenance if the publication database fails over to the mirror. Se, ad esempio, si sta configurando la replica con stored procedure sul database mirror dopo un failover e si vuole aggiungere una sottoscrizione pull a un database di pubblicazione abilitato sul database principale, è necessario specificare il nome del server principale invece del nome del server mirror per il parametro @publisher di sp_addpullsubscription o sp_addmergepullsubscription.For example, if you are configuring replication with stored procedures on the mirror after a failover, and you want to add a pull subscription to a publication database that was enabled at the principal, you must specify the principal name rather than the mirror name for the @publisher parameter of sp_addpullsubscription or sp_addmergepullsubscription.

    Se si abilita un database di pubblicazione sul server mirror dopo che è stato eseguito il failover sul server mirror, il nome dell'istanza del server di pubblicazione archiviato in tabelle di sistema equivale al nome del server mirror. In questo caso, per il parametro @publisher è necessario usare il nome del database mirror.If you enable a publication database at the mirror after failover to the mirror, the Publisher instance name stored in system tables is the name of the mirror; in this case, you would use the name of the mirror for the @publisher parameter.

    Nota

    In alcuni casi, ad esempio se si usa sp_addpublication, il parametro @publisher è supportato solo per server di pubblicazione non SQL ServerSQL Server . Non è quindi rilevante per il mirroring del database di SQL ServerSQL Server .In some cases, such as sp_addpublication, the @publisher parameter is supported only for non- SQL ServerSQL Server Publishers; in these cases, it is not relevant for SQL ServerSQL Server database mirroring.

  • Per sincronizzare una sottoscrizione in Management StudioManagement Studio dopo un failover, sincronizzare le sottoscrizioni pull dal Sottoscrittore e le sottoscrizioni push dal server di pubblicazione attivo.To synchronize a subscription in Management StudioManagement Studio after a failover: synchronize pull subscriptions from the Subscriber; and synchronize push subscriptions from the active Publisher.

Funzionamento della replica dopo l'eliminazione del mirroringReplication Behavior if Mirroring is Removed

Se si elimina il mirroring da un database pubblicato tenere presente quanto segue:Keep the following issues in mind if database mirroring is removed from a published database:

  • Se il database di pubblicazione nel server principale è senza mirroring, la replica continua senza alcuna variazione per il server principale originale.If the publication database at the principal is no longer mirrored, replication continues to work unchanged against the original principal.

  • Se viene eseguito il failover del database di pubblicazione dal server principale sul server mirror e la relazione di mirroring viene disabilitata o eliminata, gli agenti di replica non funzioneranno sul database mirror.If the publication database fails over from the principal to the mirror and the mirroring relationship is subsequently disabled or removed, replication agents will not function against the mirror. Se il database principale è definitivamente perso, disabilitare e quindi riconfigurare la replica con il server mirror specificato come server di pubblicazione.If the principal is permanently lost, disable and then reconfigure replication with the mirror specified as the Publisher.

  • Se il mirroring del database viene eliminato completamente, il database mirror si trova in stato di recupero e deve essere ripristinato affinché funzioni.If database mirroring is removed completely, the mirror database is in a recovery state and must be restored in order to become functional. Il funzionamento del database recuperato in relazione alla replica dipende dall'impostazione dell'opzione KEEP_REPLICATION.The behavior of the recovered database with respect to replication depends on whether the KEEP_REPLICATION option is specified. Questa opzione indica che durante il ripristino di un database pubblicato in un server diverso da quello in cui è stato creato il backup le impostazioni di replica devono essere mantenute inalterate.This option forces the restore operation to preserve replication settings when restoring a published database to a server other than that on which the backup was created. Utilizzare l'opzione KEEP_REPLICATION solo quando l'altro database di pubblicazione non è disponibile.Use the KEEP_REPLICATION option only when the other publication database is unavailable. L'opzione non è infatti supportata se l'altro database di pubblicazione non è ancora stato modificato ed è oggetto di replica.The option is not supported if the other publication database is still intact and replicating. Per altre informazioni sull'opzione KEEP_REPLICATION, vedere RESTORE (Transact-SQL).For more information about KEEP_REPLICATION, see RESTORE (Transact-SQL).

Funzionamento dell'agente di lettura logLog Reader Agent Behavior

Nella tabella seguente viene descritto il funzionamento dell'agente di lettura log per le diverse modalità operative del mirroring del database.The following table describes Log Reader Agent behavior for the various operating modes of database mirroring.

Modalità operativaOperating mode Funzionamento dell'agente di lettura log quando il database mirror non è disponibileLog Reader Agent behavior if the mirror is unavailable
Modalità a sicurezza elevata con failover automaticoHigh-safety mode with automatic failover Se il database mirror non è disponibile, l'agente di lettura log propaga i comandi al database di distribuzione.If the mirror is unavailable, the Log Reader Agent propagates commands to the distribution database. Non è possibile eseguire il failover del database principale sul database mirror finché il database mirror non è nuovamente online e include tutte le transazioni del database principale.The principal cannot failover to the mirror until the mirror is back online and has all transactions from the principal.
Modalità a prestazioni elevateHigh-performance mode Se il database mirror non è disponibile, il database principale è in esecuzione non protetta, ovvero è senza mirroring.If the mirror is unavailable, the principal database is running exposed (that is, unmirrored). Tuttavia, l'agente di lettura log replica solo le transazioni salvate nel database mirror.However, the Log Reader Agent only replicates those transactions that are hardened on the mirror. Se il servizio è forzato e il server mirror diventa server principale, l'agente di lettura log viene eseguito nel database mirror e recupera tutte le nuove transazioni.If service is forced and the mirror server assumes the role of the principal, the Log Reader Agent will work against the mirror and start picking up the new transactions.

La latenza di replica aumenta se il server mirror non è sincronizzato con il server principale.Be aware that replication latency will increase if the mirror falls behind the principal.
Modalità a sicurezza elevata senza failover automaticoHigh-safety mode without automatic failover Tutte le transazioni di cui è stato eseguito il commit vengono salvate su disco nel database mirror.All committed transactions are guaranteed to be hardened to disk on the mirror. L'agente di lettura log replica solo le transazioni salvate nel server mirror.The Log Reader Agent replicates only those transactions that are hardened on the mirror. Se il server mirror non è disponibile, il server principale non consente alcuna operazione nel database. L'agente di lettura log non può pertanto replicare alcuna transazione.If the mirror is unavailable, the principal disallows further activity in the database; therefore the Log Reader Agent has no transactions to replicate.

Vedere ancheSee Also

Caratteristiche e attività di replica Replication Features and Tasks
Log shipping e replica (SQL Server)Log Shipping and Replication (SQL Server)