1. 概述
数据库复制是数据库管理和备份的重要方式之一。SQL Server支持复制数据,使得数据可以在多个服务器之间进行同步。该过程可以被用于多种目的,如将数据备份到远程服务器、在不同的服务器上分发数据、在它们之间同步数据等等。本文将详细介绍如何使用SQL Server快速实现数据库复制。
2. SQL Server复制的基本概念
2.1 发布者
一个发布者是指拥有一个计划或任务的对象,它会将数据复制到其他服务器。
2.2 订阅者
一个订阅者是指在一个发布者上订阅了数据的对象,即它是一个接收已发布信息的库。
2.3 分发器
分发器是复制监视器的一个实例,它的主要作用是复制数据到其他服务器,如转发改变、发布、重新发布和响应订阅请求。许多复制组件都使用分发器,例如交易、快照、合并、等等。
2.4 表示副本的三种模式
SQL Server 复制支持三种复制模式:快照复制、事务复制和合并复制。在快照复制中,源中的数据在同步之前快照,然后传输到副本。事务复制和合并复制是基于日志的复制,他们在源中捕获对数据的更改,而不是快照它们。
3. SQL Server数据库复制的过程
3.1 配置发布器
要配置发布者,需要定位到SQL Server的Management Studio上。在对象资源管理器下新建发布器,右键单击复制文件夹并单击添加发布器向导。在向导中,你需要提供发布服务器的详细信息,如服务器名、登录名、密码和发布服务器的内容数据库名称。
-- 在目标服务器上运行以下脚本,将完成发布者的配置
EXEC sys.sp_addpublication
@publication = N'SqlShack_Publication', -- 发布的名称
@description = N'SqlShack Publication', -- 发布的描述
@sync_method = N'native',
@retention = 0,
@allow_push = N'true',
@allow_pull = N'true',
@allow_anonymous = N'true',
@enabled_for_internet = N'false',
@snapshot_in_defaultfolder = N'true',
@compress_snapshot = N'false',
@ftp_port = 21,
@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',
@publication_compatibility_level = N'100RTM',
@dynamic_filters = N'false',
@conflict_retention = 0,
@keep_partition_changes = N'true',
@allow_synctoalternate = N'false',
@max_concurrent_merge = 0,
@retention_period_unit = N'days',
@fast_multicol_updateproc = N'true',
@partition_options = 0
3.2 创建订阅者
在定位到对象资源管理器后,右键单击发布服务器,选择新建订阅者。在向导中选择目标服务器的详细信息,如服务器名、登录名、密码和目标库的名称,完成订阅者的创建。
-- 在目标服务器上运行以下脚本,将完成订阅者的配置
USE [master]
EXEC sp_addsubscription
@publication = N'SqlShack_Publication', --发布名称
@subscriber = N'sqlshack', -- 订阅服务器的名称
@destination_db = N'SqlShack', -- 将发布的数据项传递到的数据库
@sync_type = N'automatic', --表明订阅者是否即时订阅
@subscriber_type = 0,
@subscription_priority = 0,
@article = N'all', --所有
@update_mode = N'read only',
@subscriber_security_mode = 1,
@frequency_type = 64,
@frequency_interval = 1,
@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,
@distribution_agent = N'run on agent',
@job_login = null,
@job_password = null,
@publisher_security_mode = 1
3.3 发布数据
现在发布器已配置成功,订阅者也已经准备好接收数据,下一步需要做的是发布数据。你可以通过配置初始化复制选项将旧数据传递到订阅者。在SQL Server Management Studio上,右键单击发布服务器,选择瓷砖编辑器,然后选择初始化复制选项,将初始化过程彻底地进行确定地配置。
-- 在发布服务器上执行以下脚本,将进行数据发布
EXEC sys.sp_addpublication_snapshot
@publication = N'SqlShack_Publication',
@frequency_type = 1, -- 1 代表快照发布 (1,2,4,8,16,32,64,128都代表不同的变体)
@snapshot_job_name=N'SqlShack_Publication-Snapshot',
@job_login = null,
@job_password = null,
@publisher_security_mode = 1
EXEC sys.sp_startpublication_snapshot
@publication = N'SqlShack_Publication'
-- 链接到订阅服务器,并获取发布副本的快照
EXEC sp_addsubscription
@publication = N'SqlShack_Publication', --发布的名称
@subscriber = N'sqlshack', -- 订阅服务器的名称
@destination_db = N'SqlShack_copy', -- 将发布的数据项传递到的数据库
@sync_type = N'automatic' --表明订阅者是否即时订阅
3.4 监测数据
现在,所有发布者和订阅者都已经配置完成,发布器已经发布了数据,订阅器已经接收到了数据,接下来需要做的就是监视所有出现的内容,以确保“一切正常”。要监视数据,可以使用各种监视程序,例如复制监视器和复制代理。
4. 总结
本文介绍了SQL Server数据库复制的基本概念和过程。我们需要完成的是设置发布者、创建订阅者、初始化复制、发布数据和监测数据等步骤。所有的复制步骤需要在SQL Server Management Studio中完成,复制监视器也用于监视所有活动以获取最大保证。使用这些步骤,可以很容易地将数据同步到多个服务器中。