介绍
在软件开发应用中,数据库复制(Replication)技术是非常常用的,它可以在多个服务器上进行数据同步,从而实现数据的共享与分布式处理。MSSQL也提供一种高效的数据库复制方案,使得用户可以在多个服务器上轻松地创建并维护一个数据库副本。
复制的基本概念
发布器、分发器与订阅器
在MSSQL的复制方案中,发布器(Publisher)、分发器(Distributor)与订阅器(Subscriber)是三个基本概念。其中,发布器包含了需要复制的数据库对象(表、存储过程等),分发器将发布器上的数据分发到订阅器上,并且订阅器创建了一个与发布器上的所有对象相似的副本。
复制类型
MSSQL数据库支持三种复制类型:快照复制(Snapshot Replication)、事务复制(Transactional Replication)和合并复制(Merge Replication)。其中:
快照复制从发布器到订阅器传送数据库的完整快照,并在订阅器上建立与发布器相同的数据库和表。快照复制通常用于不经常改变的数据集合。
事务复制实时复制发布器上表的每个事务到订阅器。它是一种传输实时数据更改的方法,并且它支持一对多的复制。在此模式下,订阅器中的数据会按照发布器上的相同顺序进行更新。
合并复制可以用于多个服务器的更新,实现两个或多个发布器之间的相互复制,然后在订阅器上合并更改。合并复制主要适用于数据存储在多个地理位置的环境中。
如何实现复制
创建发布者
在MSSQL Server Management Studio中创建发布者(Publisher)。选择“新建发布者向导”并按照步骤设置发布者名称、数据库名称和发布者类型。然后请设置发布者对象列表,选择需要复制到订阅者的表、视图和存储过程。选择完列表后,请确认新建的发布者名称,并选择“完成”添加新发布者。
创建发布者过程如下所示
-- 新建发布者,可在Microsoft SQL Server Management Studio> 活动 >快速任务>新建发布者来新建发布者
EXEC sp_addpublication
@publication = N'PublisherName',
@description = N'Transactional publication of database ''YourDBName'' from Publisher ''YourPublisherServerName''.',
@sync_method = N'concurrent_c',
@retention = 0,
@allow_push = N'true',
@allow_pull = N'true',
@allow_anonymous = N'false',
@enabled_for_internet = N'false',
@snapshot_in_defaultfolder = N'true',
@compress_snapshot = N'false',
@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'false',
@allow_sync_tran = N'false',
@autogen_sync_procs = N'false',
@allow_queued_tran = N'false',
@snapshot_job_name = NULL,
@subscriber_upload_options = 0,
@dts_package_name = N'',
@dts_package_password = NULL,
@distributor = NULL,
@distributor_security_mode = 1;
GO
创建分发者
在MSSQL Server Management Studio中添加分发器(Distributor)。选择“新建发布者向导”并按照步骤设置分发器类型和分发库(这是用于存储复制的元数据和中继数据的数据库)。在新建分发者之后,必须为发布者创建一个共享目录,以在该目录下存储预定义快照和传输文件。
创建分发者过程如下所示:
-- 新建分发者,可在Microsoft SQL Server Management Studio>活动>快速任务>新建分发者来新建分发者。
EXEC sp_adddistributor
@distributor = N'DistributorName',
@password = N'DistributorPassword',
@retention = 72,
@cleanup_mode = 0,
@secure = N'true',
@job_login = N'replsvc',
@job_password = null,
@use_self_signed_certificate = 0,
@publisher_database_id = NULL
GO
创建订阅者
在MSSQL Server Management Studio中创建订阅者(Subscriber)。选择“新建订阅者向导”,选择发布者和分发者以及他们之间的连接。在此过程中,必须指定用于同步数据的订阅者数据库。
创建订阅者过程如下所示:
-- 新建订阅者
EXEC sp_addsubscription
@publication = N'YourPublicationName',
@subscriber = N'YourSubscriberServerName',
@destination_db = N'YourSubscriberDatabaseName',
@subscription_type = N'Push',
@sync_type = N'automatic',
@article = N'all',
@update_mode = N'read only',
@subscriber_type = 0
GO
启动复制
在管理控制台中,可以通过“复制监视器和“复制管理器开始实时监视和管理数据库对象的复制。在复制设置完成后,如果发布者或订阅者中的任何一个有所更改,则会自动启动复制机制。
总结
使用MSSQL实现数据库复制并不是特别困难。通过在MSSQL Server Management Studio中设置发布者、分发者和订阅者,并在必要时更改数据库对象的复制方案和管理复制过程,可以轻松地将数据同步到各个位置,实现数据的共享与分布式处理。