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。

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

图片来自SQL Server联机丛书

安装与配置步骤:

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

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

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

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

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

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

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

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

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

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

点击Next,出现错误:

原来所有要复制的表都需要有主键,刚才建CNBlogsTest表时,没有建主键。建一下主键,并重新启动向导就可以了。

接着选择要复制的对象:

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

Next,进入Agent Security:

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

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

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

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

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

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

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

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

4. 设置快照的FTP访问

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

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

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

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

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

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

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

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

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

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

成功连接发布服务器之后,就可以看到刚才在主数据库服务器上创建的发布:

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

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

Next,选择订阅服务器上的数据库,之前我们已经建好同名的数据库,所以系统自己会找到。

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

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

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

OK, Next, Next, Next:

Next, Finish, Success:

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

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

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

现在我们去发布服务器CNBlogsDB1上添加一条记录:

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

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

遇到的问题:

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

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数据库复制,目前我就学习了这些,期待园子里有这方面经验的朋友也来分享一下,在分享过程中你也会学到很多。

相关文章:

SQL Server 2008 数据库同步的两种方式 (发布、订阅)

sql server 2008数据复制的更多相关文章

  1. 通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行 实时数据同步,正常情况下只使用主 ...

  2. 【转】通过SQL Server 2008数据库复制实现数据库同步备份

    SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数 ...

  3. 《转》SQL Server 2008 数据维护实务

    SQL Server 2008 数据维护实务 http://blog.csdn.net/os005/article/details/7739553 http://www.cnblogs.com/xun ...

  4. sql server 2008数据复制方法

    发布订阅份为两个步骤:1.发布.2.订阅.首先在数据源数据库服务器上对需要同步的数据进行发布,然后在目标数据库服务器上对上述发布进行订阅.发布可以发布一张表的部分数据,也可以对整张表进行发布.下面分别 ...

  5. sql server 把数据 复制成脚本文件

    问题描述:想把一个数据库里的表和字段复制到另一个数据库里: 方法一:a.生成脚本文件 选择数据库右键->任务->生成脚本: b. 选择特定的数据库对象->下一步: c.高级-> ...

  6. SQL Server 2008数据备份与还原的原理是什么?

    为什么SqlServer有完整备份.差异备份和事务日志备份三种备份方式,以及为什么数据库又有简单模式.完整模式和大容量日志模式这三种恢复模式.本文内容适用于2005以上所有版本的SqlServer数据 ...

  7. sql server 2008 数据的行转列

    create table tb(id int, value varchar(10)) insert into tb values(1,'aa') insert into tb values(1,'bb ...

  8. SQL Server 2008 R2——学习/练习/错误/总结/搜集

    ==================================声明================================== 本文原创,转载在正文中显要的注明作者和出处,并保证文章的完 ...

  9. SQL Server 2000向SQL Server 2008 R2推送数据

    [文章摘要]最近做的一个项目要获取存在于其他服务器的一些数据,为了安全起见,采用由其他“服务器”向我们服务器推送的方式实现.我们服务器使用的是SQL Server 2008 R2,其他“服务器”使用的 ...

随机推荐

  1. ip_conntrack缓存neighbour

    在我的ip_conntrack版本中,它目前已经可以缓存路由,filter规则等,还可以平滑生效最新配置的NAT,它越来越像真正的SDN了,唯一有待完善的就是将5元组的tuple进化成N元组的tupl ...

  2. D3D游戏编程系列(三):自己动手编写即时战略游戏之寻路

    说起即时战略游戏,不得不提的一个问题是如何把一个物体从一个位置移动到另一个位置,当然,我说的不是瞬移,而是一个移动的过程,那么在这个移动的过程中我们如何来规划路线呢,这就不得不提到寻路了. 我所了解到 ...

  3. 史上最全的ASP.NET MVC路由配置,以后RouteConfig再弄不懂神仙都难救你啦~

    继续延续坑爹标题系列.其实只是把apress.pro.asp.net.mvc.4.framework里的CHAPTER 13翻译过来罢了,当做自己总结吧.内容看看就好,排版就不要吐槽了,反正我知道你也 ...

  4. 用sharding技术来扩展你的数据库(一)sharding 介绍

    数据库的sharding技术作为一个“新瓶装旧酒”的概念,在新的应用环境中被赋予了新的意义.随着云计算的发展,sharding在最近几年是越来越火热,越来越多的产品开始声称自己支持sharding功能 ...

  5. Ubuntu下开启root登陆

    亲手安装过Ubuntu的童鞋都知道,默认安装只会添加一个普通用户名和密码,而超级用户权限则是利用sudo命令来执行.在Ubuntu下使用root登陆或者在shell中用su命令切换到root时会提示错 ...

  6. CentOS 配置httpd使局域网能够正常訪问

    [转载请注明出处: 钱国正的专栏http://blog.csdn.net/qianguozheng/article/details/37611859] 问题: 在CentOS上安装apache,配置好 ...

  7. Android Studio中使用Gradle打包

    首先要注意一点,Android Studio中把proguard.txt已经命名为proguard-rules.pro,由此可见,採用Gradle打包,混淆规则文件的名称是不重要的.能够自己随便命名. ...

  8. redhat 6 配置 yum 源的两种方法

      由于 redhat的yum在线更新是收费的,如果没有注册的话不能使用,如果要使用,需将redhat的yum卸载后,重启安装,再配置其他源. 本文包括配置本地源及第三方源.第三方源包括:网易,epe ...

  9. UDF 编写自定函数

    在Mysql的官方文档中有说明如何给Mysql添加新的函数. 添加的函数可分为3种: .自行编写函数的源码,将源码编译成动态库,然后使用Mysql的CREATE FUNCTION语句来将函数添加进My ...

  10. 【转】Mac和iOS开发资源汇总—更新于2013-07-19

    小引 本文主要汇集一些苹果开发的资源,会经常更新,建议大家把这篇文章单独收藏(在浏览器中按command+D). 今天(2013年7月19日)收录了许多中文网站和博客.大家一定要去感受一下哦. 如果大 ...