SQL Server2005数据库复制----数据库的高可用性
杜老师布置得考试作业,下面由我这个菜鸟给大家露两手吧!希望大家一起学习啊!嘿嘿
数据库复制不是什么新的技术,在很早的SQL Server6.0中就引用了复制这个技术,利用复制技术,即使服务器位于不同的地理位置,也可以将数据移动到不同的服务器上,可能选择使用复制功能的情况有以下几种:
1 远程销售人员需要与总部同步产品目录,并且即时呈报其销售额
2 在手持设备上检查仓库的存货清单
3 信贷员需要将其便携式电脑与主系统的借款人信息保持同步
4 远程办公室需要与总部同步每周的销售额和存货清单量,同时总部的HR部门需要向远程办公室发送新雇员的名单
5 不同地域的分销商需要每日的存货清单和产品目录
  数据库复制将涉及发布服务器,分发服务器和订阅服务器,这三种服务器可以再不同的服务器上,也可部署在同一服务器。SQL数据复制包括有快照复制,事务复制,合并复制。今天就为大家介绍下快照复制,快照复制为订阅提供的自主权最大,所以本质上是单向操作,不能简单地更新订阅者,并期望数据被送回发布者,但这只能是强制完成,这种做法不明智,在订阅服务器的安装过程中,可以指定刷新数据的时间间隔,在以下情形中,快照复制是很好的选择:
1 用于运行特殊报表的数据库
2 数据仓库
3 远程办公室,需要不可编辑的产品更新目录
4 HR运用程序,必须每周更新分支办公室的新雇员
快照复制使用两个代理实现数据的移动:快找代理和分布代理。快找代理取给定时间点的数据,为传送做好准备,发行代理负责将快照和事物从发布者移至订阅者。
下面我们开始试验吧!先介绍下试验环境:Server1为发布服务器,Server2为订阅服务器!试验拓扑如下:

一 前期查看
看看两个服务器的计算机名和数据库名称,不一样的那就得统一计算机名了!
查看发布服务器的计算机名:

服务器名称:

统一计算机名称,具体命令:(杜老师以前给的)
if  serverproperty('servername')  <>  @@servername 
begin 
           declare  @server  sysname 
           set  @server  =  @@servername 
           exec  sp_dropserver  @server  =  @server 
           set  @server  =  cast(serverproperty('servername')  as  sysname)             
           exec  sp_addserver  @server  =  @server  ,  @local  =  'LOCAL' 
end 
如下图所示:

与Server1一样,订阅服务器(Server2)也查看服务器名称,并且也得统一计算机名:

完成之后重启数据库服务:

我们看看重启之后计算机名和数据库名改变了:

我们来启动SQL代理:

在数据库db1中建立一个员工表并插入员工记录:

二 建立发布服务器
在数据库中-----本地发布:

出现界面,发布向导:

将Server1 dufei做为数据库发布服务器,指定本机作为发布服务器:

重启计算机是启动SQL代理:

指定存放快照的文件夹:

选择要发布的数据库,我们选择db1为发布数据库:

我们选择快照发布:

选择要发布的表,我们创建的是员工表:

添加筛选器,以便从已发布表排除不需要的行:

指定何时运行快照代理,我们更改3分钟运行一次:

指定将运行快照代理进程的域或计算机账户:

我们选择创建发布:

发布名称,这个名字是随便的:

创建成功,我们需要检查一下有些服务是否是启动状态:
以上是发布服务器的一些配置,现在我们来完成订阅服务器的设置!
三 设置订阅服务器
同上面的发布服务器做法一样,本地订阅---新建订阅:

向导界面,我们点击下一步:

选择订阅服务器:

选择我们要订阅的数据库:

选择在其订阅数据库上运行分发代理的位置:

选择一个或多个订阅服务器并制定每个订阅数据库,我们选择db1库:

设置分发代理,用Windows账户运行:

新建订阅向导,指定每个代理的同步计划:

创建订阅:

看看,完成订阅啦:

四 我们测试下Server1和Server2的功能!
在Server1上插入两条记录:

等一下我们看看Server2的db1数据库有没有我们在Server1上面创建的两条记录,呵呵,看!有了吧!:
实验完成了!还算不错吧!嘿嘿…….. 有一方面体现了数据库高可用性,所以学好数据库还是很重要的啊!