经过SQL Server 2008数据库复制实现数据库同步备份

SQL Server 2008数据库复制是经过发布/订阅的机制进行多台服务器之间的数据同步,咱们把它用于数据库的同步备份。这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常状况下只使用主数据库服务器,备份服务器只在主服务器出现故障时投入使用。它是一种优于文件备份的数据库备份解决方案。数据库

在选择数据库同步备份解决方案时,咱们评估了两种方式:SQL Server 2008的数据库镜像和SQL Server 2008数据库复制。数据库镜像的优势是系统能自动发现主服务器故障,而且自动切换至镜像服务器。但缺点是配置复杂,镜像数据库中的数据不可见(在SQL Server Management Studio中,只能看到镜像数据库处于镜像状态,没法进行任何数据库操做,最简单的查询也不行。想眼见为实,看看镜像数据库中的数据是否正确都不行。只 有将镜像数据库切换主数据库才可见)。若是你要使用数据库镜像,强烈推荐killkill写的SQL Server 2005 镜像构建手册,咱们就是按照这篇文章完成了数据库镜像部署测试。安全

最终,咱们选择了SQL Server 2008数据库复制。服务器

下面经过一个示例和你们一块儿学习一下如何部署SQL Server 2008数据库复制。网络

测试环境:Windows Server 2008 R2 + SQL Server 2008 R2(英文版),两台服务器,一台主数据库服务器CNBlogsDB1,一台备份数据库服务器CNBlogsDB2。学习

复制原理:咱们采用的是基于快照的事务复制。主数据库服务器生成快照,备份库服务器读取并加载该快照,而后不停地从主数据库服务器复制事务日志。见下图:测试

grid.ai

图片来自SQL Server联机丛书this

安装与配置步骤:.net

1、在两台服务器上安装好SQL Server 2008 R2,主要安装的组件:Database Engine(含SQL Server Replication),Management Tools。代理

2、主数据库服务器(发布服务器)的配置:日志

1. 在主数据库服务器CNBlogsDB1新建示例数据库CNBlogsDemo(注意Recovery mode要使用默认值Full,只有这个模式才能进行事务复制),而后创建一张测试表,好比:CNBlogsTest。

cnblogs_test

2. 设置存放快照的文件夹:

建立发布以前,先设置一下存放快照的文件夹,建立发布后会在该文件夹生成快照文件,订阅服务器须要在初始化时加载该快照文件。

选择Replication》Local Publications》属性,在出现的窗口中选择Publishers,以下图:

20100826-8

点击红框处的按钮,出现设置窗口:

20100826-9

在Default Snapshot Folder中设置快照文件存放路径。

3. 在主数据库服务器建立发布:

在Replication》Local Publications中选择New Publication,出现一个向导。先选择要发布的数据库CNBlogsDemo,而后选择发布类型Transational publication,以下图:

Transationalpublication

点击Next,出现错误:

20100826-1

原来全部要复制的表都须要有主键,刚才建CNBlogsTest表时,没有建主键。建一下主键,并从新启动向导就能够了。

接着选择要复制的对象:

20100826-2

点Next,Next,进入Snapshot Agent窗口,选择Create a snapshot immediately and keep the snapshot available to initialize subscriptions,见下图:

20100826-3

Next,进入Agent Security:

20100826-4

选择Security Settings,进行相应的账户设置:

20100826-5

一个是设置运行Snapshot Agent的Windows账户,咱们这里选择与SQL Server Agent一样的账户。

一个是设置链接发布服务器的SQL账户,咱们这里就用主数据库服务器的sa账户。

继续:OK,Next,Next,为这个发布起个名字:

 20100826-7

点击Finish,就开始正式建立发布,建立成功就会出现以下窗口:

20100826-10

这时查看快照文件夹,就会看到unc文件夹,快照文件就在这个文件夹中。

这里要考虑这样一个问题,如何让订阅服务器经过网络访问这个快照文件夹。

咱们在这个问题上折腾了一些时间,原本想经过共享文件夹的方式,但又不想打开匿名共享,折腾了半天,没搞定订阅服务器访问共享文件夹用户验证的问题。因而采用了FTP的方式,因此,下面介绍一下如何让订阅服务器经过FTP访问快照文件。

4. 设置快照的FTP访问

首先在主数据库服务器上开通FTP服务,创建一个指向快照文件夹的FTP站点,设置好能够远程链接的FTP账户。而后在这台发布服务器设置一下FTP客户端配置。配置方法以下:

在Replication》Local Publications中选择刚才建立的发布[CNBlogsDemo]:CNBlogsDemo_Publication,选择属性》FTP Snapshot,以下图:

 20100826-11

选中Allow Subscribers to download snapshot files using FTP,并设置一下FTP客户端链接参数,订阅服务器就是经过这里的设置链接FTP服务器的(注:Path from the FTP root folder的设置要和上图同样,设置为:/ftp)。

点击OK,这时会在快照文件夹中建立一个ftp文件夹,并在该文件夹中生成快照文件。

这样,发布服务器就配置好了,下面配置订阅服务器。

3、备份数据库服务器(订阅服务器)的配置:

进入订阅服务器CNBlogsDB2,建立与发布服务器同名的数据库CNBlogsDemo,使用彻底恢复模式。

在Replication》Local Subscriptions中选择New Subscriptions,进入向导。

Next,进入选择发布服务器的窗口,选择Find SQL Server Publisher,出现服务器链接窗口:

20100826-12

这里要注意的是Server Name中必定要填写发布服务器的计算机名,若是计算机名链接不上,要在hosts文件中加一个IP地址解析。

成功链接发布服务器以后,就能够看到刚才在主数据库服务器上建立的发布:

20100826-13

Next,进入“分发代理工做位置”的选择窗口:

20100826-14

 

 

咱们这里选择pull subscriptions,把数据给拉过来,这样主数据库服务器的负担会轻些。

Next,选择订阅服务器上的数据库,以前咱们已经建好同名的数据库,因此系统本身会找到。

Next,进入分发代理安全设置窗口:

20100826-15

点击红框内的按钮,进入设置窗口:

20100826-16

设置如上图,Connect to the Distributor处设置的是发布服务器的sa账户。

OK, Next, Next, Next:

20100826-17

Next, Finish, Success:

20100826-18

备份数据库的订阅就建好了!

如今来瞧一瞧订阅服务器CNBlogsDB2上的用于复制的数据库CNBlogsDemo:

20100826-19

看!咱们在发布服务器上创建的表CNBlogsTest复制过来了。

如今咱们去发布服务器CNBlogsDB1上添加一条记录:

20100826-20

再去订阅服务器CNBlogsDB2瞧一瞧:

20100826-21

数据当即同步过来了!搞定!

 20791975316932   

遇到的问题:

在测试过程当中被两个问题折腾了很长时间。

1)发布服务器的Log Reader Agent不能启动,错误信息:

· The process could not execute 'sp_replcmds' on 'YCSERVER006'. (Source: MSSQL_REPL, Error number: MSSQL_REPL20011)
Get help: http://help/MSSQL_REPL20011
· Cannot execute as the database principal because the principal "dbo" does not exist, this type of principal cannot be impersonated, or you do not have permission. (Source: MSSQLServer, Error number: 15517)
Get help: http://help/15517
· The process could not execute 'sp_replcmds' on 'YCSERVER006'. (Source: MSSQL_REPL, Error number: MSSQL_REPL22037)
Get help: http://help/MSSQL_REPL22037

开始测试时,附加了一个现有数据库进行复制遇到了这个问题,附加的是一下SQL Server 2005数据库文件,Owner为空,改成sa问题就解决了,以下图:

2)第二个问题就是前面已经描述过的订阅服务器访问发布服务器上的快照文件夹的问题,后来经过FTP的方式解决的。

对于SQL Server 2008数据库复制,目前我就学习了这些,期待园子里有这方面经验的朋友也来分享一下,在分享过程当中你也会学到不少。

相关文章
相关标签/搜索