Usare un metodo online per eseguire la migrazione al database SQL di Azure

Completato 100 XP

Se è necessario che un database continui a rimanere online per gli utenti durante il processo di migrazione, è possibile usare la replica transazionale per spostare i dati. La replica transazionale è l'unico metodo online disponibile per la migrazione al database SQL di Azure.

Nello scenario dell'azienda produttrice di biciclette, i warehouse vengono eseguiti 24 ore su 24, 7 giorni su 7 senza periodi di inattività. Il consiglio di amministrazione vuole avere la certezza che il database dell'inventario sia costantemente disponibile, anche durante la migrazione al database SQL di Azure.

Diagramma che mostra la topologia di replica che include SQL Server e Database SQL di Azure.

Informazioni sulla replica transazionale

La replica transazionale è un modo per spostare i dati tra server di database connessi in modo continuo.

Il processo inizia con uno snapshot degli oggetti di database di pubblicazione e i dati. Dopo aver eseguito lo snapshot iniziale, le modifiche successive ai dati o allo schema nel server di pubblicazione vengono in genere recapitate al database SQL di Azure quasi in tempo reale.

Diagramma che mostra i componenti chiave in una replica transazionale.

Database SQL di Azure supporta la replica transazionale e snapshot come sottoscrittore push. Ciò significa che database SQL di Azure può ricevere e applicare modifiche da un server di pubblicazione usando una replica transazionale o snapshot.

Il server di pubblicazione e/o il server di distribuzione può essere un'istanza di SQL Server in esecuzione in locale, in una macchina virtuale di Azure nel cloud o come Istanza gestita di SQL di Azure.

È possibile configurare la replica transazionale tramite SQL Server Management Studio oppure eseguendo le istruzioni Transact-SQL nel server di pubblicazione. La replica transazionale non può essere configurata dal portale di Azure.

Per la replica transazionale sono necessari i componenti seguenti:

Ruolo Definizione
Autore Istanza di database che ospita i dati da replicare (origine).
Sottoscrittore Riceve i dati replicati dal Server di pubblicazione (destinazione).
Database di distribuzione Raccoglie le modifiche negli articoli da un server di pubblicazione e li distribuisce ai sottoscrittori.
Articolo Oggetto di database, ad esempio una tabella inclusa nella pubblicazione.
Publication Una raccolta di uno o più articoli del database da replicare.
Abbonamento Richiesta da un Sottoscrittore per una Pubblicazione.

Configurare una replica transazionale

Attenersi alla procedura seguente per eseguire la migrazione della tabella [Person].[Person] dal database AdventureWorks al database SQL di Azure senza tempi di inattività. La replica transazionale può usare solo account di accesso per l'autenticazione di SQL Server per connettersi a un database SQL di Azure.

Parametro Definizione
@distributor Nome dell'istanza di origine.
@publisher Nome dell'istanza di origine.
@subscriber Database SQL di Azure nel formato: <server>.database.windows.net. Il database SQL di Azure deve esistere prima di eseguire lo script.
@dbname Nome del database all'origine.
@publisher_login Utente SQL con autorizzazioni necessarie all'origine.
@publisher_password Password per l'utente SQL.
@destination_db Nome del database nella destinazione.
@subscriber_login Utente SQL con autorizzazioni necessarie alla destinazione.
@subscriber_password Password per l'utente SQL.
@working_directory Directory di lavoro della replica, modificare questa posizione in base alle esigenze.

Modificare i parametri precedenti in base al proprio ambiente durante l'esecuzione dello script.

Creare il database di distribuzione

Lo script seguente crea il database di distribuzione, gli editori di distribuzione e gli agenti.

SQL
USE [master]
GO

EXEC sp_adddistributor @distributor = N'CONTOSO-SRV', @password = N''
GO

EXEC sp_adddistributiondb 
		@database = N'distribution', 
		@data_folder = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data', 
		@data_file = N'distribution.MDF', 
		@data_file_size = 13, 
		@log_folder = N'C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Data', 
		@log_file = N'distribution.LDF', 
		@log_file_size = 9, 
		@min_distretention = 0, 
		@max_distretention = 72, 
		@history_retention = 48, 
		@deletebatchsize_xact = 5000, 
		@deletebatchsize_cmd = 2000, 
		@security_mode = 1
GO

-- Adding the distribution publishers
exec sp_adddistpublisher 
	@publisher = N'CONTOSO-SRV', 
	@distribution_db = N'distribution',
	@security_mode = 1, 
	@working_directory = N'C:\REPL', 
	@trusted = N'false', 
	@thirdparty_flag = 0, 
	@publisher_type = N'MSSQLSERVER'
GO

exec sp_addsubscriber 
	@subscriber = N'contoso.database.windows.net', 
	@type = 0, 
	@description = N'Azure SQL Database (target)'
GO

-- Enabling the replication database
use master
exec sp_replicationdboption 
	@dbname = N'AdventureWorks', 
	@optname = N'publish', 
	@value = N'true'
GO

--Adds a Log Reader agent for the AdventureWorks database. 
exec [AdventureWorks].sys.sp_addlogreader_agent 
	@publisher_security_mode = 1
GO

--Adds a Queue Reader agent for the distributor.
exec [AdventureWorks].sys.sp_addqreader_agent 
	@frompublisher = 1
GO

Creare la pubblicazione transazionale

Lo script seguente crea la pubblicazione transazionale del database AdventureWorks dal server di pubblicazione.

SQL
USE [AdventureWorks]
GO

EXEC sp_addpublication 
	@publication = N'REPL-AdventureWorks', 
	@description = N'Transactional publication of database ''AdventureWorks'' from Publisher ''CONTOSO-SRV''.', 
	@sync_method = N'concurrent', 
	@retention = 0, 
	@allow_push = N'true', 
	@allow_pull = N'true', 
	@allow_anonymous = N'true', 
	@enabled_for_internet = N'false', 
	@snapshot_in_defaultfolder = N'false', 
	@alt_snapshot_folder = N'C:\REPL', 
	@compress_snapshot = N'true', 
	@ftp_port = 21,
	@ftp_login = N'anonymous', 
	@allow_subscription_copy = N'false', 
	@add_to_active_directory = N'false', 
	@repl_freq = N'continuous', 
	@status = N'active', 
	@independent_agent = N'true', 
	@immediate_sync = N'true', 
	@allow_sync_tran = N'false',
	@autogen_sync_procs = N'false', 
	@allow_queued_tran = N'false', 
	@allow_dts = N'false', 
	@replicate_ddl = 1, 
	@allow_initialize_from_backup = N'false', 
	@enabled_for_p2p = N'false',
	@enabled_for_het_sub = N'false'
GO

exec sp_addpublication_snapshot 
	@publication = N'REPL-AdventureWorks', 
	@frequency_type = 1, 
	@frequency_interval = 0, 
	@frequency_relative_interval = 0, 
	@frequency_recurrence_factor = 0, 
	@frequency_subday = 0, 
	@frequency_subday_interval = 0,
	@active_start_time_of_day = 0, 
	@active_end_time_of_day = 235959, 
	@active_start_date = 0,
	@active_end_date = 0, 
	@publisher_security_mode = 0,
	@publisher_login = N'sqladmin', 
	@publisher_password = N'<pwd>'

Creare l'articolo per la pubblicazione

Lo script seguente crea l'articolo per la tabella [Person].[Person].

SQL
USE [AdventureWorks]
GO

EXEC sp_addarticle 
	@publication = N'REPL-AdventureWorks', 
	@article = N'Person', 
	@source_owner = N'Person', 
	@source_object = N'Person',
	@type = N'logbased', 
	@description = N'', 
	@creation_script = N'',
	@pre_creation_cmd = N'drop', 
	@schema_option = 0x000000000803509F, 
	@identityrangemanagementoption = N'none', 
	@destination_table = N'Person',
	@destination_owner = N'Person',
	@status = 24, 
	@vertical_partition = N'false', 
	@ins_cmd = N'CALL [sp_MSins_PersonPerson]', 
	@del_cmd = N'CALL [sp_MSdel_PersonPerson]', 
	@upd_cmd = N'SCALL [sp_MSupd_PersonPerson]'
GO

Creare la sottoscrizione e l'agente di sottoscrizione

Lo script seguente crea la sottoscrizione push al sottoscrittore del database di Azure SQL.

SQL
USE [AdventureWorks]
GO

EXEC sp_addsubscription 
	@publication = N'REPL-AdventureWorks', 
	@subscriber = N'contoso.database.windows.net', 
	@destination_db = N'my-db',
	@subscription_type = N'Push',
	@sync_type = N'automatic',
	@article = N'all',
	@update_mode = N'read only', 
	@subscriber_type = 0

exec sp_addpushsubscription_agent 
	@publication = N'REPL-AdventureWorks', 
	@subscriber = N'contoso.database.windows.net', 
	@subscriber_db = N'my-db',
	@job_login = null, 
	@job_password = null, 
	@subscriber_security_mode = 0, 
	@subscriber_login = N'sqladmin',
	@subscriber_password = '<pwd>', 
	@frequency_type = 64, 
	@frequency_interval = 1, 
	@frequency_relative_interval = 1, 
	@frequency_recurrence_factor = 0,
	@frequency_subday = 4, 
	@frequency_subday_interval = 5,
	@active_start_time_of_day = 0, 
	@active_end_time_of_day = 235959, 
	@active_start_date = 0, 
	@active_end_date = 0, 
	@dts_package_location = N'Distributor'
GO

Avviare e monitorare la replica

La gestione e il monitoraggio della replica non sono supportati dal database SQL di Azure. Eseguire invece queste attività da SQL Server. Per inizializzare la replica, avviare il processo di snapshot, il processo di lettura log e il processo di distribuzione.

È possibile monitorare l'agente di snapshot e l'agente di lettura log facendo clic con il pulsante destro del mouse sulla pubblicazione e selezionando l'opzione appropriata. Se non sono in esecuzione, avviarli.

Screenshot che mostra come lanciare l'agente snapshot.

Per visualizzare lo stato di sincronizzazione, fare clic con il pulsante destro del mouse sulla sottoscrizione, selezionare Visualizza stato sincronizzazione e quindi avviare l'agente. Se si riscontrano messaggi di errore, controllare la cronologia dei processi dell'agente in SQL Server Agent. Se gli agenti sono in esecuzione come previsto, verranno visualizzati i risultati seguenti.

Agente di snapshot:

Screenshot che mostra lo stato dell'agente snapshot in una replica transazionale.

Agente di lettura log:

Screenshot che mostra lo stato del lettore dei log in una replica transazionale.

Stato sincronizzazione:

Diagramma che mostra lo stato di sincronizzazione in una replica transazionale.

Dopo aver replicato completamente i dati nel database SQL di Azure, è possibile indirizzare le connessioni al database sottoscrittore e quindi arrestare e rimuovere la replica.

Per altre informazioni sulle configurazioni supportate, vedere Replica nel database SQL di Azure.


Unità successiva: Spostare dati in Database SQL di Azure

Indietro Prossima