使用線上方法移轉至 Azure SQL Database
如果您需要讓使用者在整個移轉過程中仍可在線上使用資料庫,則可以使用異動複寫來移動資料。 異動複寫是唯一可用於移轉至 Azure SQL Database 的線上方法。
在自行車製造商的案例中,倉儲會全日全年無休運作,而且沒有任何閒置時間。 您的董事會想要確定,即使在移轉至 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 資料庫。