coy 的程序人生

有鸟止南方之阜,三年不翅,不飞不鸣
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

如何创建SQL Server 2008 Replication

Posted on 2013-01-17 17:41  coy  阅读(1862)  评论(1编辑  收藏  举报

SQL Server的Replication就是一个数据复制的服务,从一个数据库实时复制到另一个数据库。一个典型的应用场景是将业务系统的数据实时复制到位于另一实例中的Reporting数据库,以供数据分析使用。

什么原理都不说了,直接以一个最简单的例子演示如何创建一个Replication及其实际效果。跑出来再说,等你体验实际效果以后再去深入研究原理和高级应用吧。

 1. 安装

首先要确保在SQL Server安装过程中选择了Replication:

2.场景介绍及准备工作

我们有两个实例(当然用一个实例也是一样的,你完全可以用同一个实例体验),一个是默认实例,模拟我们的业务系统,里面有一个名为SalesDB的数据库,数据库里有一个名为Sales的表,记录销售情况。我们的第二个实例是一个名为REPORTING的命名实例。我们的目标是建立从默认实例SalesDB数据库到REPORTING实例的replication,默认实例中SalesDB数据库里的Sales发生任何变化都能实时地更新到REPORTING实例中。

请注意:在本例中,我们都用sa用户登录操作,或者也可以用其他具有sysadmin权限的SQL用户登录,最好不要用windows登录,否则可能遇到类似“Could not obtain information about Windows NT group/user” error code 0x54b的问题。这个问题我至今也没找到答案。总之,本例就用sa就行了。

用sa登录默认实例,新建一个数据库SalesDB,里面建一张表Sales,字段有ID (int自增,主键,一定要有主键!),SaleDate (datetime),ProductName (nvarchar(50)),Price (decimal(18,0))。其实建什么样的字段不重要,反正我们只是演示数据如何被复制。

再用sa登录REPORTING实例,新建一个数据库,名为SalesDB_Reporting,不用建任何表。

 

3.配置Distribution

简单介绍几个名词。Publisher是数据的发布者,在我们这里就是默认实例;Subscriber是数据的订阅者,就是我们这里的REPORTING实例;Distributor是管理replication过程的服务,负责把数据从publisher复制到subscriber。Distributor可以在一个单独的服务器或实例上,也可以和Publisher在同一个服务器上,我们这里是后者,和Publisher一起,就是默认实例。总结一下,在我们这个场景下,Publisher和Distributor在默认实例上,Subscriber在REPORTING实例上。

现在配置Distributor:

用sa登录默认实例,在服务器节点下面找到Replication节点,右键->Configure Distribution。弹出配置向导,欢迎页直接点next,依次进入下面页面:

Distributor

选择第一项,这个选项的意思是把当前的实例作为Distributor。点击next

Snapshot Folder

这一页是指定快照目录,什么都不用改,直接点next。

Distribution Database

这一页指定distribution数据库名,这个数据库是管理replication用的,将放在当前实例(在这里是默认实例)的系统数据库下面。什么都不用改,直接点next。

Publishers

这一页指定Publisher,就是告诉Distributor从哪里复制数据,这里勾选默认实例。点next。

Wizard Action

只勾第一项,点next。最后一页点finish。

这样,我们就配置好了distributor,也就是指定了默认实例为distributor和publisher。

4.创建发布(Publication)

现在要创建实际的发布了,在默认实例(也就是我们的publisher)的Replication节点右键->New->Publication,开启新建publication向导,欢迎页点next。

Publication Database

这一页选择要复制的数据库,SalesDB,点next。

 Publication Type

这一页指定publication的类型,这几种类型的区别简单来说就是Snapshot是始终将完整的数据原封不动地搬过去,而Transactional就是跟踪数据变化然后在目标库做相应的变化。我们这里选择第二种,Transactional publication。点next。

Articles

这一步选择要复制的表,选择全部表。点next。

Filter Table Rows


这一步对表的行设置过滤条件,这是比较高级的功能,我们先不用了,直接点next。

Snapshot Agent

这一步勾选第一项,立即创建快照。在replication开始正式工作之前有一个初始化(initialize)的过程,就是对当前现有的数据做一个快照。这里让你选择是立即做快照还是以后指定时间做,我们选择立即做。点next。

Agent Security

做SnapShot需要一个Agent,还需要指定运行这个Agent的用户。点击Security Settings按钮,按下图设置,第一项选SQL Server Agent service account,第二项选使用SQL Server login,输入sa用户和sa的密码。

点击OK关闭后点next。

Wizard Actions

点next。

最后一步给这个publication取个名字,点finish。

5.创建订阅(Subscription)

前面我们已经创建了发布,现在就要创建订阅了。这次我们要连接REPORTING实例,因为是REPORTING实例来订阅默认实例的数据。用sa登录REPORTING实例,在Replication节点右键->New->Subscription。欢迎页点next。

Publication

这里选择Publication的服务器,默认是当前实例,但我们要选择默认实例,在Publisher里选择<Find SQL Server publisher...>,弹出连接窗口,连接默认实例,现实默认实例里我们刚刚创建的Publication,如图:

 

点next。

Distribution Agent Location

选择第一项。这一步的意思是在发布端还是在订阅端运行Distribution Agent服务,如果是在发布端就是所谓的推,那就是用默认实例的Sql Server Agent;如果是在订阅端就是所谓的拉,那就是用REPORTING实例的Sql Server Agent。我们选择推的方式。点next。

Subscribers

这一步指定订阅端的数据库,就是告诉它要复制到哪个数据库。选择我们在准备工作里创建的数据库SalesDB_Reporting。点next。

Distribution Agent Security

同样要指定运行Distribution Agent的用户,点击省略号按钮,按下图选择。

点击OK,然后点next。

Synchronization Schedule

这一步选择Run continuously。点next。

Initialize Subscriptions

这一步也接受缺省设置。点next。

最后两步next,finish。

6.测试成果

到此为止Replication就创建好了,接下来看一下效果。去REPORTING实例的SalesDB_Reporting数据库里刷新一下table,可以看到一个名为Sales的表已经自动创建好了(如果还没看到,稍等几秒钟)。现在到默认实例的SalesDB数据库的Sales表里新建一条记录,不用等,马上去REPORTING实例Sales表查看,就能看到这条被复制过来的记录。不管你在默认实例的表里做任何改动都能实时反映到REPORTING实例中来。