利用SQL Server快速实现数据库复制

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中完成,复制监视器也用于监视所有活动以获取最大保证。使用这些步骤,可以很容易地将数据同步到多个服务器中。

数据库标签