Usare un metodo online per eseguire la migrazione al database SQL di Azure
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.
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.
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.
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.
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]
.
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.
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.
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:
Agente di lettura log:
Stato sincronizzazione:
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.