Configurazione di repliche esterne

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

La replica transazionale supporta la pubblicazione di diversi tipi di oggetti, documento Microsoft. Inoltre, in Cloud SQL, le limitazioni di questa funzionalità sono simili a quelli documento Microsoft.

Ecco alcuni degli oggetti supportati:

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

Sebbene in questa pagina siano presenti esempi del processo di pubblicazione, consulta Pubblicare oggetti di dati e database nella documentazione Microsoft. Valuta l'uso SQL Server Management Studio (SSMS) nel processo di pubblicazione, poiché le opzioni disponibili possono essere più evidenti SSMS

Vedi anche Informazioni sulla replica in Cloud SQL.

Implementazione della replica transazionale

Un'istanza Cloud SQL può fungere da publisher e distributore per un 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 le stored procedure fornite da Microsoft

Limitazioni e prerequisiti

Rivedi questa sezione quando pianifichi la replica transazionale.

Limitazioni

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

Per definire un articolo, vedi Definire un articolo nella documentazione Microsoft, incluse limitazioni e restrizioni.

Le stored procedure fornite dalla sottoscrizione push dell'assistenza Cloud SQL .

Prerequisiti

È necessario configurare la connettività di rete bidirezionale tra un server Cloud SQL dell'istanza e dell'istanza del sottoscrittore. L'abbonato può essere esterno, ad esempio ad esempio un sottoscrittore on-prem o può essere interno in Cloud SQL.

Per le istanze Cloud SQL che utilizzano IP pubblici, Cloud SQL utilizza un indirizzo IP diverso sui suoi percorsi in uscita e in entrata. La replica deve inserire l'istanza principale l'indirizzo IP in uscita dell'istanza, che puoi recuperare utilizzando 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 che deve essere pubblicizzato.

Quando ti connetti da on-prem, il firewall on-prem deve consentire l'accesso e le connessioni in uscita. Nello specifico, il firewall on-prem deve consentire connessioni sulla porta 1433 all'intervallo di subnet di accesso dei servizi privati utilizzata per lo specifico servizio Google Cloud (in questo caso per Cloud SQL). Valuta la possibilità di consentire un intervallo di subnet anziché un IP specifico per ogni istanza è stato creato.

Per informazioni correlate, consulta quanto segue:

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 di wrapper a volte richiamano una o più stored procedure Microsoft. Consulta le Documentazione Microsoft per informazioni sulle stored procedure Microsoft.

Ruolo richiesto

Gli account utilizzati (incluso l'agente lettore di log) richiedono un 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 ha stored procedure per configurare Cloud SQL per agire come publisher. 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 editore di oggetti di database di test. In questa pagina, il database di test è denominato pub_demo.

Connettiti all'istanza Cloud SQL utilizzando l'utente sqlserver e crea 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 è un wrapper archiviato per queste 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 usa sp_replicationdboption.

Ad esempio:

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

Aggiungi un agente lettore di log

Puoi configurare un agente lettore 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 un per il database specificato. Questa stored procedure wrap 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 aggrega 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 degli editori e aggiungerlo alla pubblicazione. In qualità di utente di sqlserver, utilizza sp_addarticle.

Puoi anche aggiungere articoli tramite SSMS. Per ulteriori informazioni, vedi Aggiungere articoli 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

Aggiungi l'abbonamento alla pubblicazione

Dal database puoi aggiungere l'abbonamento alla pubblicazione. Come l'utente sqlserver, imposta lo stato di 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 delle sottoscrizioni replicati da compilare.

Ad esempio:

 Create Database pub_demo

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

Puoi aggiungere un nuovo job di agente pianificato per sincronizzare la sottoscrizione push a la pubblicazione. Ad esempio, nel database del publisher, esegui un comando simile a quello riportato di seguito. Questo comando utilizza msdb.dbo.gcloudsql_transrepl_addpushsubscription_agent, un wrapper archiviato procedura 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 pubblicazione

Puoi avviare un job di agente snapshot 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 al monitoraggio della replica in SSMS
  • Query sulle tabelle nel database di distribuzione

Pertanto, questa stored procedure consente di utilizzare l'istruzione SELECT nella correlate alla replica del database di distribuzione, come MSrepl_errors tabella:

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

Modifica una proprietà del 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 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 della replica

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

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.

Abbandona l'abbonamento

Per abbandonare la sottoscrizione, utilizza la stored procedure 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'

Abbandona l'abbonato

Per abbandonare l'abbonato, usa msdb.dbo.gcloudsql_transrepl_dropsubscriber stored procedure:

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

Rilascia la pubblicazione

Per abbandonare la pubblicazione, usa msdb.dbo.gcloudsql_transrepl_droppublication stored procedure:

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

Disabilita il database della pubblicazione

Per disabilitare il database della pubblicazione, usa msdb.dbo.gcloudsql_transrepl_replicationdboption stored procedure:

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 classe msdb.dbo.gcloudsql_transrepl_remove_distribution stored procedure:

EXEC msdb.dbo.gcloudsql_transrepl_remove_distribution

Suggerimenti e procedure per la risoluzione dei problemi

Esecuzione delle stored procedure dal database corretto

Quando esegui sp_addarticle potresti visualizzare il seguente errore: sp_addsubscription oppure sp_startpublication_snapshot:

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

Inoltre, quando esegui l'operazione, potresti visualizzare il seguente errore sp_dropsubscription:

This database is not enabled for publication.

Se si verificano questi errori, tieni presente che devi eseguire le stored procedure all'interno del database per cui si applicano. Per confermare, puoi usare quanto segue vengono 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 alcune tabelle nel database di distribuzione direttamente per gli errori di replica. Per esempio:

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

Microsoft offre altri esempi qui sulla ricerca degli errori con il monitoraggio della replica. Ad esempio, sqlserver utente 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 nei seguenti modi:

USE msdb
select * from dbo.sysjobs

Publisher mancanti nel monitoraggio della replica

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

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

Il monitoraggio della replica contiene una scheda Pubblicazioni vuota:

Nessuna riga presente nella scheda Pubblicazioni

Come soluzione alternativa, puoi creare alias nel Gestore della configurazione di SQL Server tra il nome host SQL Server del publisher e l'indirizzo IP utilizzato connettiti da SSMS:

  1. Avvia Gestione configurazione di SQL Server.

    Gestore 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 sotto Nome alias per creare un nuovo alias. Uguale vale sia per un alias a 32 bit che per un alias a 64 bit:

    Casella a discesa sotto Nome alias

  4. Recupera il nome host effettivo della tua istanza del publisher utilizzando questa query:

    Query sul nome host effettivo della tua istanza del publisher

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

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

    N. porta:indica la porta 1433.

    Protocollo:lascia il valore predefinito di 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 di pubblicazione devono essere simili alle seguenti:

Il monitoraggio della replica ora mostra una riga nella scheda Pubblicazioni

Per ulteriori informazioni sulla risoluzione dei problemi di replica, consulta Risoluzione dei problemi: trova gli errori di replica transazionale di SQL Server.

Stima delle dimensioni degli articoli necessari per la replica

Quando utilizzi un'istanza Cloud SQL come publisher, viene visualizzato uno snapshot iniziale gli articoli da generare sono necessari per iniziare la replica. Questo snapshot è archiviati localmente. A seconda del numero di articoli, delle loro dimensioni e del tipo quantità di dati, i requisiti di archiviazione possono aumentare. sp_spaceused archiviati fornisce solo una stima approssimativa dello spazio su disco necessario per un .

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

Passaggi successivi