MSSQL数据库的复制订阅功能(mssql 复制订阅)
MSSQL数据库的复制订阅功能是数据库复制的一种实现机制,用于实现发布者和订阅者之间的异步数据复制。 它可以将数据复制到多个发布者,也可以将数据复制到多个订阅者。使用MSSQL复制订阅功能可以更好地实现主从、主从分布式等复杂数据复制场景。
复制订阅系统由发布者和订阅者组成。发布者将保存在该系统中的更改,如数据行插入、更新和删除,捆绑在一起,称为事务复制。发布者将更改发布到发布数据库,这也是发布数据库的最初版本。订阅者获取发布数据库的范围,并将其复制到订阅数据库。每次复制发布更改,就会在订阅者处重新生成订阅数据库的最新版本。
MS SQL复制订阅服务的功能类似于Pub/Sub模式,客户端无需开发代码以获取发布的数据,而只需订阅数据更改。当数据更改时,在订阅者上,注册的事件句柄将被调用,可以执行存储过程或推送系统,从而可以轻松实现复制订阅功能。
下面是采用MSSQL复制订阅功能实现复杂数据复制的示例:
使用MSSQL数据库管理系统,从西雅图的主服务器的isam_db复制相同的数据到东京的服务器。
–创建一个第二个publication
USE [master]
GO
EXEC sp_addpublication @publication = N’ISAM_DB_Copy’, @description = N’Transactional replication of ISAM databases’, @whitelistservicename = N’ISAM-DB_Copy_Snapshot_Replication’, @delivery_stream = N’Repli_ISAM_DB_Copy’, @delivery_type = 1, @immediate_sync = 0
GO
–设定isam_db数据库作为发布者
use [ISAM_DB]
EXEC sp_addarticle @publication = N’ISAM_DB_Copy’, @article = N’db_customer’, @source_owner = N’dbo’, @source_object = N’db_customer’, @type = N’logbased’, @description = N’db_customer’, @destination_table = N’db_customer’, @pre_creation_cmd = N’drop’, @schema_option = 0x000000000803509D, @identityrangemanagementoption = N’manual’, @identity_range = 0, @parameters = N’unsplittable’
GO
–让ISAM下的Data_Sales表作为发布者
use [ISAM_DB]
EXEC sp_addarticle @publication = N’ISAM_DB_Copy’, @article = N’data_sales’, @source_owner = N’dbo’, @source_object = N’data_sales’, @type = N’logbased’, @description = N’data_sales’, @destination_table = N’data_sales’, @pre_creation_cmd = N’drop’, @schema_option = 0x000000000803509D, @identityrangemanagementoption = N’manual’, @identity_range = 0, @parameters = N’unsplittable’
GO
–让ISAM_DB下的Inventory表作为发布者
use [ISAM_DB]
EXEC sp_addarticle @publication = N’ISAM_DB_Copy’, @article = N’inventory’, @source_owner = N’dbo’, @source_object = N’inventory’, @type = N’logbased’, @description = N’inventory’, @destination_table = N’inventory’, @pre_creation_cmd = N’drop’, @schema_option = 0x000000000803509D, @identityrangemanagementoption = N’manual’, @identity_range = 0, @parameters = N’unsplittable’
GO
–添加一个订阅
EXEC sp_addsubscription @publication = N’ISAM_DB_Copy’, @subscriber = N’DESKTOP-K1TNHR6\sqlserver’, @destination_db = N’ISAM_DB_Copy_Tokyo’, @sync_type = N’initialize with backup’, @backupdevicetype = N’disk’, @backupdevicename = N’c:\backup_tokyo\ISAM_DB_Copy_Backup.bak’, @subscription_type = N’push’, @update_mode = N’read only’
GO
–启动复制
EXEC sp_startpublication_snapshot @publication = N’ISAM_DB_Copy’, @force_initiator = 1, @force_reinit = 1
GO
使用MSSQL复制订阅功能可以更有效地实现复杂的复制场景,进而降低数据复制的开发难度,提高复制性能,提供最佳的高可用性数据解决方案。