通过SQL Server 2008数据库复制实现数据库同步备份
原文 通过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。
复制原理:我们采用的是基于快照的事务复制。主数据库服务器生成快照,备份库服务器读取并加载该快照,然后不停地从主数据库服务器复制事务日志。见下图:
图片来自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 数据库同步的两种方式 (发布、订阅)
转载于:https://www.cnblogs.com/lonelyxmas/p/3411640.html
通过SQL Server 2008数据库复制实现数据库同步备份相关推荐
- SQL Server 2008高可用性系列:数据库快照
SQL Server 2008高可用性系列:数据库快照 http://database.51cto.com 2010-09-13 14:45 我爱菊花 博客园 我要评论(0) 摘要:我们今天要 ...
- SQL Server 2008 R2如何开启数据库的远程连接
SQL Server 2008 R2如何开启数据库的远程连接 转载于:https://www.cnblogs.com/macT/p/10213025.html
- SQL Server 2008系统的系统数据库
系统数据库是指安装程序一起安装,用于协助SQL Server 2008系统共同完成管理操作的数据库,它们是SQL Server 2008运行的基础.它们分别是:master.model.tempdb. ...
- sql server 2008数据复制
SQL Server 2008数据库复制是通过发布/订阅的机制进行多台服务器之间的数据同步,我们把它用于数据库的同步备份.这里的同步备份指的是备份服务器与主服务器进行实时数据同步,正常情况下只使用主数 ...
- sql server 2008学习1–系统数据库
master数据库 数据库记录 SQL Server 系统的所有系统级信息.这包括实例范围的元数据(例如登录帐户).端点.链接服务器和系统配置设置.此外,master 数据库还记录了所有其他数据库的存 ...
- SQL SERVER 2008 利用发布订阅方式实现数据库同步
数据库同步方式有很多种,这里以SQL Server 2008 为例利用数据库发布和订阅的方式来演示数据库的同步技术.由于就有一台计算机,只能在同一个服务器下两个不同的数据库之间进行数据同步进行演示. ...
- 2008服务器怎么导入备份数据库文件,内江市审计局 *.dmp文件导入Sql Server 2008 R2的方法...
在2015年保障性住房跟踪审计中,从**局采集的业务数据为Oracle备份数据,备份文件的后缀名为.dmp.如何将*.dmp文件导入审计人员熟悉的Sql Server 2008 R2中呢?以下是现场审 ...
- Sql Server 2008 数据库实时同步
为了数据安全,我们都希望数据能得到及时备份,Sql Server 2008有自带的完全备份和差异备份,但仍免不了恢复时丢失一些未来得及备份的数据.这里讲数据库复制功能,可以做到实时备份. 机器A:发布 ...
- SQL Server 2008 R2开启数据库的远程连接及客户端配置
SQL Server 2008 R2如何开启数据库的远程连接 SQL Server 2008默认是不允许远程连接的,如果想要在本地用SSMS连接远程服务器上的SQL Server 2008,远程连接数 ...
- php报表服务器配置,服务器_SQL Server 2008升级报表服务器数据库,报表服务器数据库可以为一个 - phpStudy...
SQL Server 2008升级报表服务器数据库 报表服务器数据库可以为一个或多个报表服务器实例提供内部存储.因为报表服务器数据库架构可能会因为推出新的 Reporting Services 版本而 ...
最新文章
- 作为领导,如何提升自己的管理能力?
- mysql补丁如何安装_神技_如何快捷下载Oracle补丁的方法?!
- 【特别好】【位运算】maximum-xor-of-two-numbers-in-an-array
- 2019-11-13 惯性环节怎么写成m语言
- 韵镖侠登录不上 显示无法连接到服务器,什么是韵镖侠?韵镖侠是做什么的?...
- [python] 之 常用内建函数
- twitter达人不能不知的缩写
- attribute property --- jquery attr() prop()
- 逐月对比的交叉表处理
- 毕业3年,我换了4份工作:好工作,是这样“熬”出来的
- ios布局 分为左右两块_安卓手机一年后卡顿,原因是安卓系统太开放了,改走iOS封闭之路...
- Apollo(阿波罗)是携程框架部门研发的分布式配置中心,ubuntu本机安装
- DirectX组件之---DirectShow介绍
- 西门子g120变频器接线图_西门子变频器调试软件汇总starter,starterdrive,v-assistant
- 在rhel7.3中编译和使用log4cxx
- 十字链表画法——蓝墨云班课实践改错
- 新晋云计算工程师就业的感受和经验分享
- quartus 2 低版本打开IP核设置窗口的方法
- 史上最强:NumPy 实现全部机器学习算法,代码超3万行!
- 免费在线鉴别邮箱是不是国外客户(真实外国人)
热门文章
- 梳子刻字刻什么好_石阶上被刻了1700多个汉字,网友狂赞!
- java 反射 main_java – 通过反射访问main方法中的局部变量
- 系统学习机器学习之神经网络(十) --BAM网络
- 数据结构c语言版堆排序,【数据结构】堆排序(C++实现)
- 第一台通用计算机它的名字叫做什么,第一台计算机叫什么名字
- oracle中的日期加减,ORACLE 日期加减函数
- 魅族魅蓝note3完美开启usb调试模式的经验
- Python--day34--前面网络编程的复习
- zabbix-proxy+cacti+nagios基本安装配置
- Golang入门教程(九)复合数据类型使用案例二