Configurazione di repliche esterne

Questa pagina descrive come configurare un'istanza Cloud SQL da pubblicare per un abbonato esterno a Cloud SQL o all'interno di Cloud SQL. La replica esterna in Cloud SQL per SQL Server utilizza la replica transazionale, in cui Cloud SQL agisce da publisher per un sottoscrittore.

La replica transazionale supporta la pubblicazione di diversi tipi di oggetti, come documentato da Microsoft. Inoltre, in Cloud SQL, le limitazioni per questa funzionalità sono simili a quelle documentate da Microsoft.

Ecco alcuni degli oggetti supportati:

  • Tables
  • Stored procedure
  • Viste
  • Visualizzazioni indice
  • Funzioni definite dall'utente

Anche se in questa pagina sono disponibili esempi del processo di pubblicazione, consulta Pubblicare oggetti di dati e database nella documentazione di Microsoft per maggiori dettagli. Prendi in considerazione l'utilizzo di SQL Server Management Studio (SSMS) nel processo di pubblicazione, poiché le opzioni disponibili potrebbero essere più evidenti in SSMS.

Consulta anche Informazioni sulla replica in Cloud SQL.

Implementazione della replica transazionale

Un'istanza Cloud SQL può fungere da publisher e distributore per un abbonato esterno, tramite la replica transazionale.

Per configurare la replica transazionale, puoi:

  • Utilizza le stored procedure fornite da Cloud SQL. Questi sono preceduti dal prefisso: gcloudsql_transrepl_
  • Perfeziona la replica utilizzando stored procedure fornite da Microsoft

Limitazioni e prerequisiti

Se pianifichi la replica transazionale, consulta questa sezione.

Limitazioni

Le istanze che utilizzano l'alta disponibilità non hanno un indirizzo IP in uscita coerente. Queste istanze non possono essere publisher se utilizzano la connettività IP pubblica. Pertanto, se un'istanza utilizza l'alta disponibilità, deve utilizzare la connettività con IP privato.

Per la definizione di un articolo, vedi Definire un articolo nella documentazione di Microsoft, incluse le limitazioni e le limitazioni.

Le stored procedure fornite da Cloud SQL supportano solo l'abbonamento push.

Prerequisiti

La connettività di rete bidirezionale deve essere configurata tra un'istanza Cloud SQL e l'istanza del sottoscrittore. Il sottoscrittore può essere esterno, ad esempio on-prem, oppure può essere interno a Cloud SQL.

Per le istanze Cloud SQL che utilizzano IP pubblici, Cloud SQL utilizza un indirizzo IP diverso nei percorsi in uscita e in entrata. La replica deve includere nella lista consentita l'indirizzo IP in uscita dell'istanza principale, che puoi recuperare utilizzando il comando gcloud:

gcloud sql instances describe [PRIMARY_NAME] --format="default(ipAddresses)"

Per utilizzare l'IP privato di Cloud SQL con un'istanza on-prem, devi configurare l'accesso privato ai servizi. Ciò richiede il peering tra il VPC di Cloud SQL e il VPC del cliente su un intervallo IP personalizzato da pubblicizzare.

Quando ti connetti da on-prem, il firewall on-prem deve consentire le connessioni in entrata e in uscita. In particolare, il firewall on-prem deve consentire queste connessioni sulla porta 1433 all'intervallo di subnet di accesso ai servizi privati in uso per il servizio Google Cloud specifico (in questo caso, per Cloud SQL). Valuta la possibilità di consentire un intervallo di subnet piuttosto che un IP specifico per ogni istanza creata.

Per informazioni correlate, consulta le seguenti risorse:

Autorizzazioni e ruoli

Autorizzazioni in pacchetto

Le stored procedure fornite da Cloud SQL includono le autorizzazioni necessarie per la replica transazionale. Si tratta di stored procedure wrapper che a volte chiamano una o più stored procedure Microsoft. Per informazioni sulle stored procedure Microsoft, consulta la documentazione di Microsoft.

Ruolo richiesto

Gli account utilizzati (incluso l'agente per i lettori di log) devono avere un ruolo db_owner, come nel caso dell'utente sqlserver. Per le informazioni necessarie, consulta il modello di sicurezza dell'agente di replica.

Utilizzo delle stored procedure per la pubblicazione, la distribuzione e la sottoscrizione

Questa sezione contiene i passaggi suggeriti per configurare la replica transazionale.

L'utente sqlserver dispone di stored procedure per impostare l'istanza Cloud SQL in modo che agisca come editore. Per informazioni di riferimento, consulta stored procedure di Cloud SQL.

Preparazione per la replica transazionale con un database di test

Prima di configurare la replica transazionale per un database di produzione, puoi configurare l'istanza come publisher degli oggetti del database di test. In questa pagina, il database di test è denominato database pub_demo.

Connettiti all'istanza Cloud SQL utilizzando l'utente sqlserver e crea un database a scopo di test. Ad esempio:

Create Database pub_demo;
GO
USE pub_demo;
CREATE TABLE Employee(employeeId INT primary key);
INSERT INTO Employee([employeeId]) VALUES (1);
INSERT INTO Employee([employeeId]) VALUES (2);

-- Add procedure
CREATE OR ALTER PROCEDURE dbo.p_GetDate
AS
SELECT getdate()

-- Add view
CREATE OR ALTER VIEW dbo.v_GetDbs
AS
SELECT name from sys.databases

-- Function
CREATE OR ALTER FUNCTION dbo.fn_ListDbFiles(@id int)
RETURNS TABLE
AS
RETURN
(
select * from sys.master_files where database_id = @id
)

Configura il database di distribuzione

Per il database di distribuzione, puoi utilizzare msdb.dbo.gcloudsql_transrepl_setup_distribution, che è una procedura archiviata mediante wrapper per le seguenti stored procedure Microsoft:

Ad esempio:

EXEC msdb.dbo.gcloudsql_transrepl_setup_distribution @login='sqlserver', @password='<password>'

Abilita un database per la pubblicazione

Per abilitare o disabilitare l'opzione di pubblicazione di un database, puoi utilizzare msdb.dbo.gcloudsql_transrepl_replicationdboption. Questa stored procedure si applica all'opzione di pubblicazione per l'editore che utilizza sp_replicationdboption.

Ad esempio:

EXEC msdb.dbo.gcloudsql_transrepl_replicationdboption @db='pub_demo', @value='true'

Aggiungi un agente per i lettori di log

Puoi configurare un agente per lettori di log per un database che utilizza sp_addlogreader_agent.

Ad esempio:

EXEC msdb.dbo.gcloudsql_transrepl_addlogreader_agent @db='pub_demo', @login='sqlserver', @password='<password>'

Crea la pubblicazione per il database

Puoi utilizzare msdb.dbo.gcloudsql_transrepl_addpublication per creare una pubblicazione transazionale per il database specificato. Questa stored procedure esegue il wrapping di sp_addpublication.

Ad esempio:

EXEC msdb.dbo.gcloudsql_transrepl_addpublication @db='pub_demo', @publication='pub1'

Crea un agente snapshot per la pubblicazione specificata

Per creare un agente snapshot per il database del publisher, puoi utilizzare msdb.dbo.gcloudsql_transrepl_addpublication_snapshot, che esegue il wrapping di sp_addpublication_snapshot.

Ad esempio:

EXEC msdb.dbo.gcloudsql_transrepl_addpublication_snapshot @db='pub_demo',  @publication='pub1', @login='sqlserver', @password='<password>'

Crea un articolo e aggiungilo alla pubblicazione

Puoi creare un articolo all'interno del database dell'editore e aggiungerlo alla pubblicazione. In qualità di utente sqlserver, utilizza sp_addarticle.

Puoi anche aggiungere articoli tramite SSMS. Per maggiori informazioni, consulta Aggiungere articoli a e rilasciare articoli da una pubblicazione.

Ad esempio:

USE pub_demo;
GO

EXEC sp_addarticle @publication = 'pub1',
                   @article = 'csql_dbo.employee',
                   @source_owner = 'dbo',
                   @source_object = 'Employee',
                   @description = N'cloudsql_article_table',
                   @schema_option = 0x000000000903409D,
                   @identityrangemanagementoption = N'manual',
                   @destination_table = 'Employee',
                   @destination_owner = 'dbo';

-- add function
use [pub_demo]
exec sp_addarticle  @publication = N'pub1',
                   @article = N'fn_ListDbFiles',
                   @source_owner = N'dbo',
                   @source_object = N'fn_ListDbFiles',
                   @type = N'func schema only',
                   @description = N'',
                   @creation_script = N'',
                   @pre_creation_cmd = N'drop',
                   @schema_option = 0x0000000008000001,
                   @destination_table = N'fn_ListDbFiles',
                   @destination_owner = N'dbo',
                   @status = 16

-- add procedure
use [pub_demo]
exec sp_addarticle  @publication = N'pub1',
                   @article = N'p_GetDate',
                   @source_owner = N'dbo',
                   @source_object = N'p_GetDate',
                   @type = N'proc schema only',
                   @description = N'',
                   @creation_script = N'',
                   @pre_creation_cmd = N'drop',
                   @schema_option = 0x0000000008000001,
                   @destination_table = N'p_GetDate',
                   @destination_owner = N'dbo',
                   @status = 16

-- add view
use [pub_demo]
exec sp_addarticle  @publication = N'pub1',
                   @article = N'v_GetDbs',
                   @source_owner = N'dbo',
                   @source_object = N'v_GetDbs',
                   @type = N'view schema only',
                   @description = N'',
                   @creation_script = N'',
                   @pre_creation_cmd = N'drop',
                   @schema_option = 0x0000000008000001,
                   @destination_table = N'v_GetDbs',
                   @destination_owner = N'dbo',
                   @status = 16

Aggiungi l'abbonamento alla pubblicazione

Dall'interno del database, puoi aggiungere l'abbonamento alla pubblicazione. Come utente sqlserver, imposta lo stato abbonato utilizzando sp_addsubscription.

Ad esempio:

Use pub_demo;
GO
EXEC sp_addsubscription @publication ='pub1',
                        @subscriber = N'10.10.100.1,1433',
                        @destination_db = pub_demo,
                        @subscription_type = N'Push',
                        @sync_type = N'automatic',
                        @article = N'all',
                        @update_mode = N'read only',
                        @subscriber_type = 0

Connettiti al sottoscrittore e crea un database di sottoscrizione

Puoi connetterti al sottoscrittore e creare un database di sottoscrizione in cui compilare i dati replicati.

Ad esempio:

 Create Database pub_demo

Aggiungi un nuovo job di agente pianificato per sincronizzare la sottoscrizione push

Puoi aggiungere un nuovo job agente pianificato per sincronizzare la sottoscrizione push alla pubblicazione. Ad esempio, sul database dell'editore, esegui un comando simile a quello riportato di seguito. Questo comando utilizza msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent, una procedura archiviata mediante wrapper per sp_addpushsubscription_agent:

EXEC msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent
@db='pub_demo',
@publication = 'pub1',
@subscriber_db= 'pub_demo',
@subscriber_login='sqlserver',
@subscriber_password='<password>',
@subscriber='11.11.111.1,1433'

Avvia un job di agente snapshot della pubblicazione

Puoi avviare un job di agente snapshot della pubblicazione come segue:

USE pub_demo;
EXEC sp_startpublication_snapshot
@publication = 'pub1'

Concedi l'accesso a un account per utilizzare il Monitoraggio replica

Usa msdb.dbo.gcloudsql_transrepl_addmonitoraccess per:

  • Fornire l'accesso al Monitoraggio replica in SSMS
  • Esegui query sulle tabelle nel database di distribuzione

Pertanto, questa stored procedure consente di utilizzare l'istruzione SELECT nelle tabelle relative alla replica del database di distribuzione, ad esempio la tabella MSrepl_errors:

EXEC msdb.dbo.gcloudsql_transrepl_addmonitoraccess
@login = 'sqlserver'

Modificare una proprietà di un database di distribuzione

Puoi modificare heartbeat_interval. Utilizza la procedura msdb.dbo.gcloudsql_transrepl_changedistributor_property, che esegue il wrapping sp_changedistributor_property.

Per ulteriori informazioni, consulta la documentazione per sp_changedistributor_property. Consulta anche la documentazione per ulteriori informazioni sul valore heartbeat_interval.

Ad esempio:

EXEC msdb.dbo.gcloudsql_transrepl_changedistributor_property
@property = N'heartbeat_interval',
@value = 90

Utilizzare il Monitoraggio replica

Fai clic con il pulsante destro del mouse sul nodo di replica in SSMS e scegli Avvia Monitoraggio replica.

Se fai clic sulla scheda Agenti, dovresti vedere una visualizzazione simile alla seguente:

Cartelle nella scheda Agenti

Utilizzo delle stored procedure per la rimozione della replica

Questa sezione contiene i passaggi suggeriti per rimuovere la replica transazionale.

Elimina l'abbonamento

Per eliminare la sottoscrizione, utilizza la stored procedure di sp_dropsubscription.

Ecco un esempio dei comandi per rilasciare la sottoscrizione:

USE  pub_demo;
GO
EXEC sp_dropsubscription
          @publication = 'csql_pub_pub_demo',
          @article     = N'all',
          @subscriber  = N'11.11.111.1,1433'

Abbandonare l'abbonato

Per eliminare il sottoscrittore, utilizza la stored procedure msdb.dbo.gcloudsql_transrepl_dropsubscriber:

EXEC msdb.dbo.gcloudsql_transrepl_dropsubscriber
 @subscriber  = N'11.11.111.1,1433'

Elimina la pubblicazione

Per eliminare la pubblicazione, utilizza la stored procedure msdb.dbo.gcloudsql_transrepl_droppublication:

EXEC msdb.dbo.gcloudsql_transrepl_droppublication
  @db = 'pub_demo', @publication='pub1'

Disabilita il database di pubblicazione

Per disabilitare il database di pubblicazione, utilizza la stored procedure msdb.dbo.gcloudsql_transrepl_replicationdboption:

EXEC msdb.dbo.gcloudsql_transrepl_replicationdboption
@db='pub_demo',
@value=N'false'

Rimuovi il database di distribuzione

Per rimuovere il database di distribuzione, utilizza la stored procedure msdb.dbo.gcloudsql_transrepl_remove_distribution:

EXEC msdb.dbo.gcloudsql_transrepl_remove_distribution

Suggerimenti e procedure per la risoluzione dei problemi

Esecuzione di stored procedure dal database corretto

Durante l'esecuzione di sp_addarticle, sp_addsubscription o sp_startpublication_snapshot potrebbe essere visualizzato il seguente errore:

Only members of the sysadmin fixed server role or db_owner fixed database role can perform this operation.

Inoltre, durante l'esecuzione di sp_dropsubscription potresti visualizzare il seguente errore:

This database is not enabled for publication.

Se si verificano questi errori, tieni presente che devi eseguire le stored procedure dall'interno del database a cui si applicano. Puoi utilizzare il codice seguente per verificare che vengano eseguiti dal database corretto:

USE <database_name>;
GO
<Run stored proc>

Replica

Gli errori di replica vengono forniti nei log degli errori SQL e altrove. Puoi eseguire query direttamente su alcune tabelle nel database di distribuzione per rilevare eventuali errori di replica. Ad esempio:

select * from [cloudsql_distribution]..msrepl_errors
select * from [cloudsql_distribution]..MSreplication_monitordata

Qui puoi trovare altri esempi relativi alla ricerca di errori mediante il Monitoraggio della replica da parte di Microsoft. Ad esempio, l'utente sqlserver potrebbe non avere accesso a un comando.

Job agente di replica

Una volta configurata la replica, i nuovi job dell'agente SQL non sono visibili nell'SSMS all'utente sqlserver. Tuttavia, puoi visualizzarle utilizzando:

USE msdb
select * from dbo.sysjobs

Publisher mancanti nel Monitoraggio replica

Puoi utilizzare il monitoraggio della replica per visualizzare lo stato della replica e per risolvere i problemi di replica.

Ad esempio, se configuri la replica e l'istanza Cloud SQL del publisher utilizza un indirizzo IP, SSMS potrebbe non essere in grado di trovare il publisher. perché non conosce la mappatura tra il nome host e l'indirizzo IP.

Il Monitoraggio della replica contiene una scheda Pubblicazioni vuota:

Non ci sono righe nella scheda Pubblicazioni

Come soluzione alternativa, puoi creare alias in SQL Server Configuration Manager tra il nome host SQL Server del publisher e l'indirizzo IP utilizzato per la connessione da SSMS:

  1. Avvia SQL Server Configuration Manager.

    Gestione configurazione SQL Server

  2. Trova il nodo Alias e selezionalo.

    Il nodo alias è selezionato

  3. Fai clic con il pulsante destro del mouse sulla casella in Nome alias per creare un nuovo alias. La stessa procedura si applica sia per gli alias a 32 bit sia per gli alias a 64 bit:

    Casella a discesa sotto Nome alias

  4. Recupera il nome host effettivo dell'istanza del publisher utilizzando questa query:

    Query sul nome host effettivo dell'istanza del publisher

  5. Nella finestra dell'alias, inserisci i seguenti campi prima di selezionare OK:

    Alias Name (Nome alias): fornisci il nome del server indicato nella query del passaggio 4.

    N. porta:fornisci la porta 1433.

    Protocollo:lascia il valore predefinito, ovvero TCP/IP.

    Server:fornisci l'indirizzo IP dell'istanza del publisher.

    Valori per nome alias, server ecc.

  6. Connettiti utilizzando il nuovo alias e avvia il monitoraggio della replica:

    Finestra di dialogo Connetti al server

Le informazioni sulla pubblicazione dovrebbero essere simili alle seguenti:

Il Monitoraggio replica ora mostra una riga nella scheda Pubblicazioni

Per ulteriori informazioni sulla risoluzione dei problemi di replica, consulta Risoluzione dei problemi: ricerca di errori con la replica transazionale di SQL Server.

Stima delle dimensioni degli articoli necessari per la replica

Quando utilizzi un'istanza Cloud SQL come editore, è necessario uno snapshot iniziale degli articoli da generare per iniziare la replica. Questo snapshot viene archiviato localmente. I requisiti di archiviazione possono aumentare a seconda del numero di articoli, delle loro dimensioni e del tipo di dati. La procedura archiviata in sp_spaceused fornisce solo una stima approssimativa dello spazio su disco necessario per un articolo.

Lo snapshot include i file in cui sono archiviati schemi e dati.

Passaggi successivi