Sottoscrittori della replica e gruppi di disponibilità AlwaysOn (SQL Server)Replication Subscribers and Always On Availability Groups (SQL Server)

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

Quando viene eseguito il failover di un gruppo di disponibilità AlwaysOn contenente un database che opera come sottoscrittore di replica, la sottoscrizione di replica potrebbe non venire completata.When an Always On availability group containing a database that is a replication subscriber fails over, the replication subscription might fail. Per i sottoscrittori transazionali, l'agente di distribuzione continuerà a replicare automaticamente se la sottoscrizione utilizza il nome del listener del gruppo di disponibilità del sottoscrittore.For transactional subscribers, the distribution agent will continue to replicate automatically if the subscription is using the name of the availability group listener of the subscriber. Per i sottoscrittori di merge, un amministratore di replica deve riconfigurare manualmente il sottoscrittore ricreando la sottoscrizione.For merge subscribers, a replication administrator must manually reconfigure the subscriber, by recreating the subscription.

Operazioni supportateWhat is Supported

SQL ServerSQL Server supporta il failover automatico del server di pubblicazione, il failover automatico dei sottoscrittori transazionali e il failover manuale dei sottoscrittore di merge. replication supports the automatic failover of the publisher, the automatic failover of transactional subscribers, and the manual failover of merge subscribers. Il failover di un server di distribuzione in un database di disponibilità non è supportato.The failover of a distributor on an availability database is not supported. Non è possibile combinare AlwaysOn con gli scenari Websync e ssNoVersion Compact.Always On cannot be combined with Websync and ssNoVersion Compact scenarios.

Failover di una sottoscrizione pull di mergeFailover of a Merge Pull Subscription

Durante il failover del gruppo di disponibilità si verifica un errore nella sottoscrizione pull poiché l'agente pull non riesce a trovare i processi archiviati nel database msdb dell'istanza del server in cui è ospitata la replica primaria, che non è disponibile a causa dell'errore che si è verificato nell'istanza del server.A pull subscription fails upon availability group failover, because pull agent cannot find the jobs stored in the msdb database of the server instance that hosts the primary replica; which is not available because the server instance has failed.

Failover di una sottoscrizione push di mergeFailover of a Merge Push Subscription

Durante il failover del gruppo di disponibilità si verifica un errore nella sottoscrizione push poiché l'agente push non può più connettersi al database di sottoscrizione originale nel sottoscrittore originale.A push subscription fails upon availability group failover, because the push agent can no longer connect to original subscription database on original subscriber.

Come creare una sottoscrizione transazionale in un ambiente AlwaysOnHow to Create Transactional Subscription in an Always On Environment

Per la replica transazionale, usare i passaggi seguenti per configurare un gruppo di disponibilità del sottoscrittore e impostarne il failover:For transactional replication, use the following steps to configure and failover a subscriber availability group:

  1. Prima di creare la sottoscrizione, aggiungere il database sottoscrittore al gruppo di disponibilità AlwaysOn appropriato.Before creating the subscription, add the subscriber database to the appropriate Always On availability group.

  2. Aggiungere il listener del gruppo di disponibilità del sottoscrittore come server collegato a tutti i nodi del gruppo di disponibilità.Add the subscriber's availability group Listener as a linked server to all nodes of the availability group. Questa operazione assicura che tutti i partner di failover potenziali siano in grado di riconoscere e connettersi al listener.This step ensures that all potential failover partners are aware of and can connect to the listener.

  3. Usare lo script riportato nella sezione Creazione di una sottoscrizione push di una replica transazionale sottostante per creare la sottoscrizione con il nome del listener del gruppo di disponibilità del sottoscrittore.Using the script in the Creating a Transactional Replication Push Subscription section below, create the subscription using the name of the availability group listener of the subscriber. Dopo un failover, il nome del listener rimane sempre valido, mentre il nome del server effettivo del sottoscrittore dipenderà dal nodo effettivo diventato il nuovo nodo primario.After a failover, the listener name will always remain valid, whereas the actual server name of the subscriber will depend on the actual node that became the new primary.

    Nota

    La sottoscrizione deve essere creata usando uno script Transact-SQLTransact-SQL e non può essere creata con Management StudioManagement Studio.The subscription must be created by using a Transact-SQLTransact-SQL script and cannot be created using Management StudioManagement Studio.

  4. Se si crea una sottoscrizione pull:If creating a pull subscription:

    1. Nel nodo primario del sottoscrittore in Management StudioManagement Studioaprire l'albero SQL ServerSQL Server Agent.In Management StudioManagement Studio, on the primary subscriber node, open the SQL ServerSQL Server Agent tree.

    2. Identificare il processo dell' agente di distribuzione pull e modificare il processo.Identify the Pull Distribution Agent job and edit the job.

    3. Nel passaggio del processo Esecuzione dell'agente verificare i parametri -Publisher e -Distributor .On the Run Agent job step, check the -Publisher and -Distributor parameters. Verificare che questi parametri contengano i nomi corretti del server diretto e dell'istanza del server di distribuzione e del database di pubblicazione.Make sure that these parameters contain the correct direct server and instance names of the publisher and distributor server.

    4. Modificare il parametro -Subscriber impostando il nome del listener del gruppo di disponibilità del sottoscrittore.Change the -Subscriber parameter to the subscriber's availability group listener name.

    Quando si crea la sottoscrizione utilizzando questa procedura, non si dovranno eseguire azioni dopo un failover.When you create your subscription following these steps, then you won’t have to do anything after a failover.

Creazione di una sottoscrizione push di una replica transazionaleCreating a Transactional Replication Push Subscription

-- commands to execute at the publisher, in the publisher database:  
use [<publisher database name>]  
EXEC sp_addsubscription @publication = N'<publication name>',   
       @subscriber = N'<availability group listener name>',   
       @destination_db = N'<subscriber database name>',   
       @subscription_type = N'Push',   
       @sync_type = N'automatic', @article = N'all', @update_mode = N'read only', @subscriber_type = 0;  
GO  

EXEC sp_addpushsubscription_agent @publication = N'<publication name>',   
       @subscriber = N'<availability group listener name>',   
       @subscriber_db = N'<subscriber database name>',   
       @job_login = null, @job_password = null, @subscriber_security_mode = 1;  
GO  

Per riprendere gli agenti di merge dopo il failover del gruppo di disponibilità del sottoscrittoreTo Resume the Merge Agents After the Availability Group of the Subscriber Fails Over

Per eseguire il merge della replica, un relativo amministratore deve riconfigurare manualmente il sottoscrittore attenendosi alla procedura seguente:For merge replication, a replication administrator must manually reconfigure the subscriber with the following steps:

  1. Eseguire sp_subscription_cleanup per rimuovere la sottoscrizione precedente per il sottoscrittore.Execute sp_subscription_cleanup to remove the old subscription for the subscriber. Effettuare questa operazione nella nuova replica primaria, che precedentemente era la secondaria.Perform this action on the new primary replica (which was formerly the secondary replica).

  2. Ricreare la sottoscrizione creando una nuova sottoscrizione a partire da un nuovo snapshot.Recreate the subscription by creating a new subscription, beginning with a new snapshot.

Nota

Il processo corrente non è pratico per i sottoscrittori della replica di tipo merge. Lo scenario principale per la replica di tipo merge, tuttavia, è composto da utenti disconnessi (desktop, portatili, dispositivi palmari) che non usano i gruppi di disponibilità AlwaysOn con il sottoscrittore.The current process is inconvenient for merge replication subscribers, however the main scenario for merge replication is disconnected users (desktops, laptops, handset devices) which will not use Always On availability groups on the subscriber.