Utilizarea unei metode online pentru migrarea la baza de date AZURE SQL

Finalizat

Dacă aveți nevoie de o bază de date pentru a rămâne online pentru utilizatori în întregul proces de migrare, puteți utiliza reproducerea tranzacțională pentru a muta datele. Reproducerea tranzacției este singura metodă online disponibilă pentru migrarea la baza de date SQL Azure.

În scenariul nostru de producător de biciclete, depozitele rulează pe o bază de 24 de ore, 7 zile pe săptămână și nu există perioade de inactivitate. Consiliul de administrație dorește să se asigure că baza de date de inventar este disponibilă în mod constant, chiar și în timpul migrării la baza de date SQL Azure.

Diagramă afișând topologia de reproducere care implică SQL Server și baza de date SQL Azure.

Ce este reproducerea tranzacțională?

reproducerea tranzacțiilor este o modalitate de a muta datele între serverele bazei de date conectate continuu.

Procesul începe cu un instantaneu al obiectelor și datelor din baza de date a publicației. După ce se realizează instantaneul inițial, toate modificările ulterioare ale datelor sau schemei din Publisher sunt livrate de obicei la baza de date SQL Azure în timp real, pe măsură ce apar.

Diagrama care afișează componentele cheie într-o reproducere tranzacțională.

Baza de date Sql Azure acceptă reproducerea tranzacțiilor și instantanee ca abonat push. Aceasta înseamnă că baza de date SQL Azure poate primi și aplica modificări de la un editor utilizând o reproducere tranzacțională sau instantanee.

Editorul și/sau distribuitorul pot fi o instanță SQL Server care rulează local, pe o mașină virtuală Azure din cloud sau ca instanță gestionată Azure SQL.

Puteți configura replicarea tranzacției prin SQL Server Management Studio sau executând Transact-SQL instrucțiuni ale editorului. Reproducerea tranzacției nu poate fi configurată din portalul Azure.

Reproducerea tranzacțională necesită următoarele componente:

Rol Definiție
Editor O instanță de bază de date care găzduiește datele de reprodus (sursă).
abonat Primește datele reproduse de Publisher (țintă).
distribuitor Colectează modificările articolelor de la un Publisher și le distribuie abonaților .
articol Un obiect bază de date; de exemplu, un tabel inclus în Publicație.
publicației O colecție de unul sau mai multe articole din baza de date în curs de reproducere.
Abonament O solicitare de la un abonat pentru o publicație.

Configurarea unei reproduceri tranzacționale

Urmați pașii de mai jos pentru a migra tabelul [Person].[Person] de la AdventureWorks bază de date la baza de date SQL Azure fără întreruperi. Reproducerea tranzacției poate utiliza doar conectări de autentificare SQL Server pentru a vă conecta la baza de date SQL Azure.

Parametru Definiție
@distributor Nume instanță sursă.
@publisher Nume instanță sursă.
@subscriber Bază de date SQL Azure în format: <server>.database.windows.net. Baza de date Azure SQL trebuie să existe înainte de a rula scriptul.
@dbname Nume bază de date la sursă.
@publisher_login Utilizator SQL cu permisiuni necesare la sursă.
@publisher_password Parolă pentru utilizatorul SQL.
@destination_db Numele bazei de date la destinație.
@subscriber_login Utilizator SQL cu permisiuni necesare la destinație.
@subscriber_password Parolă pentru utilizatorul SQL.
@working_directory Director de reproducere funcțional, modificați această locație după cum este necesar.

Ajustați parametrii de mai sus în funcție de mediul dvs. atunci când rulați scriptul.

Crearea distribuitorului

Următorul script creează baza de date distribuitor, editorii distribuitorilor și agenții.

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

Crearea publicației tranzacționale

Următorul script creează publicația tranzacțională a bazei de date AdventureWorks de la editor.

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>'

Crearea articolului pentru publicație

Următorul script creează articolul pentru tabelul [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

Creați abonamentul și agentul de abonament

Următorul script creează abonamentul push la abonatul Azure SQL Database.

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

Inițierea și monitorizarea reproducerii

Gestionarea și monitorizarea reproducerii nu sunt acceptate din baza de date SQL Azure. În schimb, efectuați aceste activități din SQL Server. Pentru a iniția reproducerea, începeți activitatea instantaneu, activitatea de cititor de jurnale și activitatea de distribuitor.

Puteți să monitorizați Agent instantaneu și Agent cititor de jurnale făcând clic dreapta pe publicație și selectând opțiunea corespunzătoare. Dacă agenții nu rulează, porniți-i.

Captură de ecran care arată cum să lansați agentul de instantaneu.

Pentru a vizualiza starea de sincronizare, faceți clic dreapta pe abonament, selectați Vedeți starea sincronizării, apoi porniți agentul. Dacă întâmpinați mesaje de eroare, verificați istoricul de lucrări al agentului pe SQL Server Agent. Dacă agenții rulează așa cum vă așteptați, ar trebui să vedeți următoarele rezultate.

Agent instantaneu :

Captură de ecran care afișează starea agentului instantaneu într-o reproducere tranzacțională.

Agent jurnal :

Captură de ecran care afișează starea cititorului de jurnal într-o reproducere tranzacțională.

stare sincronizare :

Diagramă afișând starea de sincronizare într-o reproducere tranzacțională.

După ce datele sunt reproduse complet în baza de date Azure SQL, puteți să direcționați conexiunile la baza de date a abonatului, apoi să opriți și să eliminați reproducerea.

Pentru a afla mai multe despre configurațiile acceptate, consultați Reproducerea în baza de date SQL Azure.