MSSQL数据库如何实现复制?

介绍

在软件开发应用中,数据库复制(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中设置发布者、分发者和订阅者,并在必要时更改数据库对象的复制方案和管理复制过程,可以轻松地将数据同步到各个位置,实现数据的共享与分布式处理。

数据库标签