Menggunakan metode online untuk bermigrasi ke Azure SQL Database

Selesai

Jika Anda memerlukan database untuk tetap online kepada pengguna selama proses migrasi, Anda dapat menggunakan replikasi transaksional untuk memindahkan data. Replikasi transaksional adalah satu-satunya metode online yang tersedia untuk bermigrasi ke Azure SQL Database.

Dalam skenario produsen sepeda kami, gudang berjalan pada basis 24 jam, 7 hari seminggu, dan tidak ada periode tidak aktif. Dewan direksi Anda ingin memastikan bahwa database inventori terus tersedia, bahkan selama migrasi ke Azure SQL Database.

Diagram showing the replication topology involving SQL Server and Azure SQL Database.

Apa itu replikasi transaksional?

Replikasi transaksional adalah cara untuk memindahkan data antara server database yang terus tersambung.

Proses dimulai dengan rekam jepret objek dan data database publikasi. Setelah rekam jepret awal diambil, setiap perubahan berikutnya pada data atau skema di Publisher biasanya dikirimkan ke Azure SQL Database mendekati real-time saat terjadi.

Diagram showing the key components in a transactional replication.

Azure SQL Database mendukung replikasi transaksional dan rekam jepret sebagai pelanggan pendorongan. Itu berarti Azure SQL Database dapat menerima dan menerapkan perubahan dari penerbit menggunakan replikasi transaksional atau rekam jepret.

Penerbit dan/atau distributor dapat menjadi instans SQL Server yang berjalan secara lokal, pada komputer virtual Azure di cloud, atau sebagai Azure SQL Managed Instance.

Anda dapat mengonfigurasi replikasi transaksional melalui SQL Server Management Studio, atau dengan menjalankan pernyataan Transact-SQL pada penerbit. Replikasi transaksional tidak dapat dikonfigurasi dari portal Azure.

Replikasi transaksional memerlukan komponen berikut:

Peran Definisi
Penerbit Instans database yang menghosting data yang akan direplikasi (sumber).
Pelanggan Menerima data yang sedang direplikasi oleh Penerbit (target).
Distributor Mengumpulkan perubahan dalam artikel dari Penerbit dan mendistribusikannya ke Pelanggan.
Artikel Objek database; misalnya, tabel yang disertakan dalam Publikasi.
Publikasi Kumpulan satu atau beberapa artikel dari database yang sedang direplikasi.
Langganan Permintaan dari Pelanggan untuk Publikasi.

Menyiapkan replikasi transaksional

Ikuti langkah-langkah di bawah ini untuk memigrasikan tabel [Person].[Person] dari database AdventureWorks ke Azure SQL Database tanpa waktu henti. Replikasi transaksional hanya dapat menggunakan login autentikasi SQL Server untuk menyambungkan ke Azure SQL Database.

Parameter Definisi
@distributor Nama instans sumber.
@publisher Nama instans sumber.
@subscriber Azure SQL Database dalam format: <server>.database.windows.net. Azure SQL Database harus ada sebelum menjalankan skrip.
@dbname Nama database di sumbernya.
@publisher_login Pengguna SQL dengan izin yang diperlukan di sumbernya.
@publisher_password Kata sandi untuk pengguna SQL.
@destination_db Nama database di tujuan.
@subscriber_login Pengguna SQL dengan izin yang diperlukan di tujuan.
@subscriber_password Kata sandi untuk pengguna SQL.
@working_directory Direktori kerja replikasi, ubah lokasi ini sebagaimana mewajarinya.

Sesuaikan parameter di atas sesuai dengan lingkungan Anda sendiri saat menjalankan skrip.

Membuat distributor

Skrip berikut membuat database distributor, penerbit distributor, dan agen.

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

Membuat publikasi transaksi

Skrip berikut membuat publikasi AdventureWorks transaksi dari database dari penerbit.

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

Membuat artikel untuk publikasi

Skrip berikut membuat artikel untuk [Person].[Person] tabel.

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

Membuat langganan dan agen langganan

Skrip berikut membuat langganan pendorongan ke pelanggan 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

Memulai dan memantau replikasi

Manajemen dan pemantauan replikasi tidak didukung dari Azure SQL Database. Sebagai gantinya, lakukan aktivitas ini dari SQL Server. Untuk memulai replikasi, mulai pekerjaan rekam jepret, pekerjaan pembaca log, dan pekerjaan distributor.

Anda dapat memantau Agen Rekam Jepret dan Agen Pembaca Log dengan mengklik kanan pada publikasi dan memilih opsi yang sesuai. Jika agen tidak berjalan, mulailah.

Screenshot showing how to launch the snapshot agent.

Untuk melihat status sinkronisasi, klik kanan pada langganan, pilih Tampilkan Status Sinkronisasi, lalu mulai agen. Jika Anda menemukan pesan kesalahan, periksa riwayat pekerjaan agen di SQL Server Agent. Jika agen berjalan seperti yang diharapkan, Anda akan melihat hasil berikut.

Agen Rekam Jepret:

Screenshot showing the snapshot agent status in a transactional replication.

Agen Pembaca Log:

Screenshot showing the log reader status in a transactional replication.

Status Sinkronisasi:

Diagram showing the synchronization status in a transactional replication.

Setelah data sepenuhnya direplikasi ke Azure SQL Database, Anda dapat mengarahkan koneksi ke database pelanggan, lalu menghentikan dan menghapus replikasi.

Untuk mempelajari selengkapnya tentang konfigurasi yang didukung, lihat Replikasi ke Azure SQL Database.