Configurazione di repliche esterne

Questa pagina descrive come configurare un'istanza Cloud SQL per la pubblicazione a un abbonato esterno a Cloud SQL o all'interno di Cloud SQL. La replica esterna in Cloud SQL per SQL Server utilizza la replica transactional, in cui Cloud SQL agisce come 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 di questa funzionalità sono simili a quelle documentate da Microsoft.

Di seguito sono riportati alcuni degli oggetti supportati:

  • Tabelle
  • Stored procedure
  • Visualizzazioni
  • Visualizzazioni dell'indice
  • Funzioni definite dall'utente

Sebbene in questa pagina siano presenti esempi della procedura di pubblicazione, per maggiori dettagli consulta la sezione Pubblicare dati e oggetti database nella documentazione di Microsoft. Valuta la possibilità di utilizzare SQL Server Management Studio (SSMS) nella procedura di pubblicazione, poiché le opzioni disponibili potrebbero essere più evidenti in SSMS.

Consulta anche Informazioni sulla replica in Cloud SQL.

Implementare la 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. Sono preceduti da: gcloudsql_transrepl_
  • Perfezionare la replica utilizzando le stored procedure fornite da Microsoft

Limitazioni e prerequisiti

Quando pianifichi la replica delle transazioni, consulta questa sezione.

Limitazioni

Le istanze che utilizzano la disponibilità elevata (HA) non dispongono di un indirizzo IP in uscita coerente. Queste istanze non possono essere publisher se utilizzano la connettività con IP pubblico. Pertanto, se un'istanza utilizza l'HA, deve utilizzare la connettività IP privato.

Per definire un articolo, consulta Definire un articolo nella documentazione di Microsoft, incluse le limitazioni.

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

Prerequisiti

La connettività di rete bidirezionale deve essere configurata tra un'istanza Cloud SQL e l'istanza dell'abbonato. L'abbonato può essere esterno, ad esempio un abbonato on-premise, oppure interno a Cloud SQL.

Per le istanze Cloud SQL che utilizzano IP pubblici, Cloud SQL utilizza un indirizzo IP diverso nei percorsi di uscita e di ingresso. 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 Cloud SQL con un'istanza on-premise, devi configurare l'accesso privato ai servizi. Ciò richiede il peering tra il VPC Cloud SQL e il VPC del cliente su un intervallo IP personalizzato che deve essere pubblicizzato.

Quando ti connetti da un ambiente on-premise, il firewall on-premise deve consentire le connessioni in entrata e in uscita. Nello specifico, il firewall on-prem deve consentire queste connessioni sulla porta 1433 all'intervallo della sottorete di accesso ai servizi privati utilizzato per il servizio Google Cloud specifico (in questo caso, per Cloud SQL). Valuta la possibilità di consentire un intervallo di subnet anziché un IP specifico per ogni istanza creata.

Per informazioni correlate, consulta quanto segue:

Autorizzazioni e ruoli

Autorizzazioni pacchettizzate

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

Ruolo richiesto

Gli account utilizzati (incluso l'agente di lettura dei log) richiedono un ruolo db_owner, come nel caso dell'utente sqlserver. Per le informazioni necessarie, consulta il modello di sicurezza dell'agente di replica.

Utilizzo di stored procedure per la pubblicazione, la distribuzione e l'abbonamento

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

L'utente sqlserver ha stored procedure per configurare l'istanza Cloud SQL come publisher. Per informazioni di riferimento, consulta Stored procedure di Cloud SQL.

Preparazione alla replica transazionale con un database di test

Prima di configurare la replica transazionale per un database di produzione, puoi configurare l'istanza come publisher di oggetti di database di test. In questa pagina, il database di test è chiamato 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 stored procedure wrapper per queste stored procedure Microsoft:

Ad esempio:

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

Attivare un database per la pubblicazione

Per attivare o disattivare l'opzione di pubblicazione di un database, puoi utilizzare msdb.dbo.gcloudsql_transrepl_replicationdboption. Questa procedura memorizzata si applica all'opzione di pubblicazione per il publisher che utilizza sp_replicationdboption.

Ad esempio:

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

Aggiungere un agente di lettura dei log

Puoi configurare un agente di lettura dei 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 contorna 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 di snapshot per il database del publisher, puoi utilizzare msdb.dbo.gcloudsql_transrepl_addpublication_snapshot, che avvolge sp_addpublication_snapshot.

Ad esempio:

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

Creare un articolo e aggiungerlo alla pubblicazione

Puoi creare un articolo dal database dell'editore e aggiungerlo alla pubblicazione. Come utente sqlserver, utilizza sp_addarticle.

Puoi anche aggiungere articoli utilizzando SSMS. Per ulteriori informazioni, consulta Aggiungere articoli a una pubblicazione e rimuoverli.

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

Dal database, puoi aggiungere l'abbonamento alla pubblicazione. Come utente sqlserver, imposta lo stato dell'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 all'abbonato e crea un database degli abbonamenti

Puoi connetterti all'abbonato e creare un database di abbonamento per compilare i dati replicati.

Ad esempio:

 Create Database pub_demo

Aggiungi un nuovo job dell'agente pianificato per sincronizzare l'abbonamento push

Puoi aggiungere un nuovo job dell'agente pianificato per sincronizzare l'abbonamento push con la pubblicazione. Ad esempio, nel database dell'editore, esegui un comando simile a quello riportato di seguito. Questo comando utilizza msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent, una procedura wrapper memorizzata 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'

Avviare un job dell'agente di snapshot della pubblicazione

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

USE pub_demo;
EXEC sp_startpublication_snapshot
@publication = 'pub1'

Concedi l'accesso a un account per utilizzare Replication Monitor

Usa msdb.dbo.gcloudsql_transrepl_addmonitoraccess per:

  • Fornisci l'accesso a Replication Monitor in SSMS
  • Esegui query sulle tabelle nel database di distribuzione

Pertanto, questa stored procedure ti 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à del database di distribuzione

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

Per saperne di più, consulta la documentazione relativa a sp_changedistributor_property. Consulta anche questa documentazione per ulteriori informazioni sul valore heartbeat_interval.

Ad esempio:

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

Utilizzare Replication Monitor

Fai clic con il tasto destro del mouse sul nodo di replica in SSMS e scegli Avvia monitoraggio della replica.

Se fai clic sulla scheda Agenti, dovresti visualizzare 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.

Annullare l'abbonamento

Per annullare l'abbonamento, utilizza la stored procedure sp_dropsubscription.

Ecco un esempio di comandi per annullare l'abbonamento:

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

Rimuovere l'abbonato

Per eliminare l'abbonato, utilizza la stored procedure msdb.dbo.gcloudsql_transrepl_dropsubscriber:

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

Rilasciare la pubblicazione

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

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

Disattivare il database della pubblicazione

Per disattivare 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 passaggi per la risoluzione dei problemi

Eseguire stored procedure dal database corretto

Quando esegui sp_addarticle, sp_addsubscription o sp_startpublication_snapshot, potresti visualizzare il seguente errore:

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

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

This database is not enabled for publication.

Se si verificano questi errori, tieni presente che devi eseguire queste stored procedure dall'interno del database a cui si applicano. Per verificare che vengano eseguiti dal database corretto, puoi utilizzare quanto segue:

USE <database_name>;
GO
<Run stored proc>

Replica

Gli errori di replica sono disponibili nei log degli errori SQL e altrove. Puoi eseguire query su alcune tabelle del database di distribuzione direttamente per rilevare errori di replica. Ad esempio:

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

Microsoft fornisce altri esempi qui sulla ricerca di errori utilizzando Replication Monitor. Ad esempio, l'utente sqlserver potrebbe non avere accesso a un comando.

Job dell'agente di replica

Dopo aver configurato la replica, i nuovi job dell'agente SQL non sono visibili in SSMS per l'utente sqlserver. Tuttavia, puoi visualizzarli utilizzando quanto segue:

USE msdb
select * from dbo.sysjobs

Editori mancanti nel monitoraggio della replica

Puoi utilizzare il monitor della replica per visualizzare lo stato della replica e risolvere i relativi problemi.

Ad esempio, quando configuri la replica e l'istanza Cloud SQL del publisher utilizza un indirizzo IP, SSMS potrebbe non riuscire a trovare il publisher. Questo accade perché non conosce la mappatura tra il nome host e l'indirizzo IP.

Il monitoraggio della replica contiene una scheda Pubblicazioni vuota:

Nella scheda Pubblicazioni non sono presenti righe

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 connetterti da SSMS:

  1. Avvia Configuration Manager di SQL Server.

    Configuration Manager di SQL Server

  2. Individua il nodo Alias e selezionalo.

    Il nodo Alias è selezionato

  3. Fai clic con il tasto destro del mouse sulla casella sotto Nome alias per creare un nuovo alias. La stessa procedura vale sia per un alias a 32 bit sia per un alias a 64 bit:

    Casella a discesa sotto Nome alias

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

    Esegui una query per il nome host effettivo dell&#39;istanza del publisher

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

    Nome alias: fornisci il nome del server dalla query nel passaggio 4.

    Numero porta: specifica la porta 1433.

    Protocollo:lascia il valore predefinito TCP/IP.

    Server:fornisci l'indirizzo IP dell'istanza Publisher.

    Valori per il nome dell&#39;alias, il server e così via.

  6. Connettiti utilizzando il nuovo alias e avvia Replication Monitor:

    Finestra di dialogo Connettiti al server

Le informazioni di pubblicazione dovrebbero essere simili alle seguenti:

Replication Monitor ora mostra una riga nella scheda Pubblicazioni

Per saperne di più sulla risoluzione dei problemi di replica, consulta Strumento per la risoluzione dei problemi: trovare gli errori con la replica transazionale di SQL Server.

Stima delle dimensioni degli articoli necessari per la replica

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

Lo snapshot include file che memorizzano schemi e dati.

Passaggi successivi