Questa pagina descrive come configurare un'istanza Cloud SQL per la pubblicazione su 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 funge da editore per un abbonato.
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 indicizzate
- Funzioni definite dall'utente
Sebbene in questa pagina siano riportati esempi della procedura di pubblicazione, per i dettagli consulta Pubblicare dati e oggetti di database nella documentazione di Microsoft. Ti consigliamo 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 editore e distributore per un abbonato esterno tramite la replica transazionale.
Per configurare la replica transazionale, puoi:
- Utilizzare le stored procedure fornite da Cloud SQL. Queste sono precedute da:
gcloudsql_transrepl_ - Perfeziona la replica utilizzando le stored procedure fornite da Microsoft
Limitazioni e prerequisiti
Quando pianifichi la replica transazionale, esamina questa sezione.
Limitazioni
- Le istanze che utilizzano l'alta affidabilità (HA) non hanno un indirizzo IP in uscita coerente. Queste istanze non possono essere editori se utilizzano la connettività IP pubblica. Pertanto, se un'istanza utilizza l'alta disponibilità, deve utilizzare la connettività IP privata.
- Se utilizzi Private Service Connect, assicurati che la connettività in uscita sia configurata sull'istanza dell'editore.
- Per definire un articolo, consulta Definire un articolo nella documentazione di Microsoft, incluse le limitazioni e le restrizioni.
- Le stored procedure fornite da Cloud SQL supportano solo la sottoscrizione push.
- La replica esterna non può essere configurata su un'istanza configurata con la replica.
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 può essere 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 ingresso. La replica deve consentire 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-premise, 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 che deve essere pubblicizzato.
Per utilizzare Cloud SQL con Private Service Connect, consulta Configurare Private Service Connect. Quando utilizzi Private Service Connect, devi assicurarti che la connettività in uscita sia configurata sull'istanza dell'editore per consentire la comunicazione con l'abbonato.
Quando ti connetti da un ambiente on-premise, il firewall on-premise deve consentire le connessioni in entrata e in uscita. In particolare, il firewall on-premise deve consentire queste connessioni sulla porta 1433 all'intervallo di subnet di accesso privato ai servizi utilizzato per il servizio Google Cloud specifico (in questo caso, per Cloud SQL). Ti consigliamo di consentire un intervallo di subnet anziché un IP specifico per ogni istanza creata.
Per informazioni correlate, consulta:
- Configurare l'IP privato (che include un link per la configurazione dell'accesso privato ai servizi)
- Configurare Private Service Connect
- Accesso privato ai servizi
- Configurazione dell'accesso privato ai servizi
Autorizzazioni e ruoli
Le sezioni seguenti riguardano le autorizzazioni e i 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 di Microsoft. Per informazioni sulle stored procedure di Microsoft, consulta la documentazione di Microsoft.
Ruolo richiesto
Gli account utilizzati (incluso quello per 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.
Utilizzare le stored procedure per la pubblicazione, la distribuzione e la sottoscrizione
Questa sezione contiene i passaggi suggeriti per la configurazione della replica transazionale.
L'utente sqlserver dispone di stored procedure per configurare l'istanza Cloud SQL in modo che funga da editore. Per informazioni di riferimento, consulta
Stored procedure di Cloud SQL.
Prepararsi alla replica transazionale con un database di test
Prima di configurare la replica transazionale per un database di produzione, puoi configurare l'istanza come editore degli oggetti del database di test. In questa pagina, il database di test è denominato pub_demo.
Connettiti all'istanza Cloud SQL utilizzando l'utente sqlserver e crea un database per scopi 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
)
Configurare 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 di Microsoft:
Ad esempio:
EXEC msdb.dbo.gcloudsql_transrepl_setup_distribution @login='sqlserver', @password='<password>'
Abilitare 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'
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>'
Creare la pubblicazione per il database
Puoi utilizzare msdb.dbo.gcloudsql_transrepl_addpublication per creare una pubblicazione transazionale per il database che hai specificato. Questa stored procedure
esegue il wrapping
sp_addpublication.
Ad esempio:
EXEC msdb.dbo.gcloudsql_transrepl_addpublication @db='pub_demo', @publication='pub1'
Creare un agente snapshot per la pubblicazione specificata
Per creare un agente snapshot per il database dell'editore, 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>'
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 rimuovere 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
Aggiungere la sottoscrizione alla pubblicazione
Dal database, puoi aggiungere la sottoscrizione 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
Connettersi all'abbonato e creare un database di sottoscrizione
Puoi connetterti all'abbonato e creare un database di sottoscrizione per popolare i dati replicati.
Ad esempio:
Create Database pub_demo
Aggiungere un nuovo job dell'agente pianificato per sincronizzare la sottoscrizione push
Puoi aggiungere un nuovo job dell'agente pianificato per sincronizzare la sottoscrizione push alla 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 stored
procedure 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'
Avviare un job dell'agente snapshot di pubblicazione
Puoi avviare un job dell'agente snapshot di pubblicazione nel seguente modo:
USE pub_demo;
EXEC sp_startpublication_snapshot
@publication = 'pub1'
Concedere l'accesso a un account per utilizzare Replication Monitor
Utilizza msdb.dbo.gcloudsql_transrepl_addmonitoraccess per:
- Fornire l'accesso a Replication Monitor in SSMS
- Eseguire query sulle tabelle nel database di distribuzione
Pertanto, questa stored procedure ti consente di utilizzare l'istruzione SELECT sulle tabelle correlate alla replica del database di distribuzione, ad esempio la MSrepl_errors:
EXEC msdb.dbo.gcloudsql_transrepl_addmonitoraccess
@login = 'sqlserver'
Modificare una proprietà del database di distribuzione
Puoi modificare heartbeat_interval. Utilizza la procedura msdb.dbo.gcloudsql_transrepl_changedistributor_property, che esegue il wrapping di sp_changedistributor_property.
Per ulteriori informazioni, consulta la
documentazione
di 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 Replication Monitor
Fai clic con il tasto destro del mouse sul nodo di replica in SSMS e scegli Avvia Replication Monitor.
Se fai clic sulla scheda Agenti, dovresti visualizzare una visualizzazione simile alla seguente:

Utilizzare le stored procedure per rimuovere la replica
Questa sezione contiene i passaggi suggeriti per la rimozione della replica transazionale.
Eliminare la sottoscrizione
Per eliminare la sottoscrizione, utilizza la stored procedure sp_dropsubscription.
Ecco un esempio dei comandi per eliminare la sottoscrizione:
USE pub_demo;
GO
EXEC sp_dropsubscription
@publication = 'csql_pub_pub_demo',
@article = N'all',
@subscriber = N'11.11.111.1,1433'
Eliminare 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'
Eliminare 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'
Disabilitare 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'
Rimuovere 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
Le sezioni seguenti riguardano gli argomenti comuni per la risoluzione dei problemi.
Eseguire le stored procedure dal database corretto
Potresti ricevere il seguente errore quando esegui sp_addarticle, sp_addsubscription o sp_startpublication_snapshot:
Only members of the sysadmin fixed server role or db_owner fixed database role can perform this operation.
Inoltre, potresti ricevere il seguente errore quando esegui sp_dropsubscription:
This database is not enabled for publication.
Se si verificano questi errori, tieni presente che devi eseguire queste stored procedure dal database a cui si applicano. Puoi utilizzare quanto segue per verificare che vengano eseguite 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 su alcune tabelle nel database di distribuzione direttamente per gli errori di replica. Ad esempio:
select * from [cloudsql_distribution]..msrepl_errors
select * from [cloudsql_distribution]..MSreplication_monitordata
Microsoft ha altri esempi
su come cercare gli 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 all'utente sqlserver. Tuttavia, puoi visualizzarli utilizzando quanto segue:
USE msdb
select * from dbo.sysjobs
Editori mancanti in Replication Monitor
Puoi utilizzare il Replication Monitor per visualizzare lo stato della replica e risolvere i problemi di replica.
Ad esempio, quando configuri la replica e l'istanza Cloud SQL dell'editore utilizza un indirizzo IP, SSMS potrebbe non essere in grado di trovare l'editore. Questo perché non conosce la mappatura tra il nome host e l'indirizzo IP.
Replication Monitor contiene una scheda Pubblicazioni vuota:

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

Trova il nodo Alias e selezionalo.

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

Recupera il nome host effettivo dell'istanza dell'editore utilizzando questa query:

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: fornisci la porta 1433.
Protocollo: lascia il valore predefinito TCP/IP.
Server: fornisci l'indirizzo IP dell'istanza dell'editore.

Connettiti utilizzando il nuovo alias e avvia Replication Monitor:

Le informazioni sulla pubblicazione dovrebbero essere simili alle seguenti:

Per ulteriori informazioni sulla risoluzione dei problemi di replica, consulta Risoluzione dei problemi: trovare errori con la replica transazionale di SQL Server.
Stimare le dimensioni degli articoli necessari per la replica
Quando utilizzi un'istanza Cloud SQL come editore, è necessario generare uno snapshot iniziale degli articoli per avviare la replica. Questo snapshot viene archiviato localmente. A seconda del numero di articoli, delle loro dimensioni e del tipo di dati, i requisiti di archiviazione potrebbero aumentare. La stored procedure sp_spaceused fornisce solo una stima approssimativa dello spazio su disco necessario per un articolo.
Lo snapshot include i file che memorizzano schemi e dati.
Passaggi successivi
- Scopri di più sulla replica in Cloud SQL.