使用線上方法移轉至 Azure SQL Database

已完成

如果您需要讓使用者在整個移轉過程中仍可在線上使用資料庫,則可以使用異動複寫來移動資料。 異動複寫是唯一可用於移轉至 Azure SQL Database 的線上方法。

在自行車製造商的案例中,倉儲會全日全年無休運作,而且沒有任何閒置時間。 您的董事會想要確定,即使在移轉至 Azure SQL Database 期間,庫存資料庫仍持續可用。

圖表顯示有關 SQL Server 和 Azure SQL Database 的複寫拓撲。

什麼是異動複寫?

異動複寫是在連續連線的資料庫伺服器之間移動資料的方法。

此流程從發行集資料庫物件和資料的快照開始。 擷取初始快照集後,發行者端資料或結構描述的任何後續變更,通常會在發生時以近即時的方式傳遞至 Azure SQL Database。

圖表顯示異動複寫中的關鍵元件。

Azure SQL Database 支援交易式和快照式複寫作為發送訂閱者。 這表示 Azure SQL Database 可以使用交易式或快照式複寫,從發行者接收及套用變更。

發行者和/或散發者可以是 SQL Server 的執行個體,不論是在內部部署、在雲端的 Azure 虛擬機器上執行,或是作為 Azure SQL 受控執行個體。

您可以透過 SQL Server Management Studio 設定異動複寫,或在發行者上執行 Transact-SQL 陳述式來完成。 無法從 Azure 入口網站設定異動複寫。

異動複寫需要下列元件:

角色 定義
發行者 一種資料庫執行個體,其中裝載要複寫的資料 (來源)。
訂閱者 接收 發行者 (目標) 所複寫的資料。
散發者 發行者的發行項中收集變更,然後發佈至訂閱者
發行項 一種資料庫物件,例如,包含在發行集中的資料表。
發行 從複寫的資料庫收集一或多個發行項的一種集合。
訂用帳戶 來自發行集訂閱者的要求。

設定異動複寫

請遵循下列步驟,將資料表 [Person].[Person]AdventureWorks 資料庫移轉至 Azure SQL Database,而不需要停機。 異動複寫只能使用 SQL Server 驗證登入,來連線到 Azure SQL Database。

參數 定義
@distributor 來源執行個體名稱。
@publisher 來源執行個體名稱。
@subscriber 在以下格式中的 Azure SQL Database: <server>.database.windows.net。 Azure SQL Database 必須存在,才能執行指令碼。
@dbname 來源上的資料庫名稱。
@publisher_login 具有必要來源權限的 SQL 使用者。
@publisher_password SQL 使用者的密碼。
@destination_db 目的地的資料庫名稱。
@subscriber_login 具有必要目的地權限的 SQL 使用者。
@subscriber_password SQL 使用者的密碼。
@working_directory 複寫工作目錄,視需要變更此位置。

執行指令碼時,請根據您自己的環境調整上述參數。

建立散發者

下列指令碼會建立散發者資料庫、散發者發行者和代理程式。

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

建立交易式發行集

下列指令碼會從發行者建立 AdventureWorks 資料庫的交易式發行集。

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

建立發行集的發行項

下列指令碼會建立 [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

建立訂閱和訂閱代理程式

下列指令碼會建立 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

起始和監視複寫

Azure SQL Database 不支援複寫管理和監視。 相反地,請從 SQL Server 執行這些活動。 若要起始複寫,請啟動快照集作業、記錄讀取器作業和散發者作業。

您可以用滑鼠右鍵按一下 [發行集] 並選取適當的選項,以監視快照集代理程式記錄讀取器代理程式。 如果代理程式並未執行,請啟動它們。

螢幕擷取畫面顯示如何啟動快照集代理程式。

若要檢視同步處理狀態,請以滑鼠右鍵按一下 [訂閱],選取 [檢視同步處理狀態],然後啟動代理程式。 如果您遇到任何錯誤訊息,請檢查 SQL Server Agent 上的代理程式作業記錄。 如果代理程式如預期般執行,您應該會看到下列結果。

快照集代理程式:

螢幕擷取畫面顯示異動複寫中的快照集代理程式狀態。

記錄讀取器代理程式:

螢幕擷取畫面顯示異動複寫中的記錄讀取器狀態。

同步處理狀態:

圖表顯示異動複寫中的同步處理狀態。

資料完全複寫至 Azure SQL Database 之後,您可以將連線導向訂閱者資料庫,然後停止並移除複寫。

若要深入了解支援的設定,請參閱 複寫至Azure SQL 資料庫