---------------------------------------------------------------------------
---- 本文为andkylee个人原创,请在尊重作者劳动成果的前提下进行转载;
---- 转载务必注明原始出处 : http://blog.csdn.net/andkylee
--- 2010-06-07 13:19:48
---- 关键字: mirror unmirror remirror 镜像 移动设备
----------------------------------------------------------------------------
一、添加镜像
为master设备添加镜像设备:
ASE默认是关闭设备镜像功能的,需要配置参数启用。disable disk mirroring 这是一个静态参数,配置完之后需要重启ASE服务器。
重启ASE服务器之后。
执行命令镜像master设备
成功完成!
利用过程sp_helpdevice查看master设备目前的状态。
下面来解析一下被镜像后master设备的状态字段。
master设备被镜像后,在sysdevices系统表中并没有增加记录行;仅仅是更新了master设备对应的记录行中的status和mirrorname两个字段的内容。
从上面可以看出master设备对应的status变成了739。status字段用bit位来表示各个状态的信息。
739 = 1 + 2 + 32 + 64 + 128 + 512
其中:
1:缺省磁盘;
2:物理磁盘
32:串行写
64:设备已镜像
128: 读已镜像
512:已允许镜像
这几个状态和sp_helpdevice master 中查看到的相一致。 呵呵, 要是看过sp_helpdevice的源代码的话,自然很好理解。
二、取消镜像
unmirror分两种情况:user-initiated 和 system-initiated 。 在镜像设备上如果出现了IO错误会导致系统自动取消该设备的镜像。
用户手动取消镜像的语法为:
disk unmirror
name="logical_device_name"
[,side={"primary"|secondary}]
[,mode={retain|remove}]
其中side和mode两个选项是可选的。side的默认值为:secondary,意思是取消哪一边的镜像设备(有主设备和镜像设备两个)。mode的默认值是retain,意思是本次取消是临时的(retain,下次还可以激活设备以再次用来镜像)还是永久的(remove,删除设备了)。
下面测试临时取消master设备的镜像功能!
执行完,没有任何提示信息。在errlog文件中看到有这么一条信息:00:00000:00030:2010/06/07 13:20:59.59 kernel Closing the secondary device for virtual device master
现在再来看看master设备的状态信息:
sp_helpdevice显示master设备已被MIRROR DISABLED。 sysdevices系统表中master对应的status列为:2275 = 2048 + 128 + 64 + 32 + 2 + 1 。状态为2048表示镜像已禁用(内部使用)。
三、重新激活镜像
语法:disk remirror name="logical_device_name"
在设备的镜像功能因为用户或者系统的缘故而被中止时,可以利用此命令恢复设备上的镜像功能。发出该命令后,ASE服务器会将镜像主设备上的数据拷贝到镜像次设备上面去。
恢复本文上面暂时取消的master上的镜像。
在errorlog文件中有下面的日志内容:00:00000:00030:2010/06/07 13:31:03.26 kernel mirror for virtual device 0 started using asynchronous (with DIRECTIO) I/O
再次查看status状态信息,
可以看到重新恢复镜像后,master设备的status状态信息和刚开始添加镜像时相同。个人感觉重新激活镜像(remirror)和新添加镜像已经是一样的。只是不用告诉系统镜像到什么位置了而已;还有初次镜像的时候secondary设备文件必须不存在而激活镜像则相反。
四、利用镜像功能来移动设备的物理位置
可以利用镜像功能将数据库设备移动到其它物理位置。比如设备A原来在C盘,要是将其移动到D盘。 需要两个步骤:
1.将设备A镜像到D盘的设备文件上;
2.取消设备A在C盘的主镜像文件。
下面演示将tempdb的设备文件由D:/sybase/data/tempdbdev.dat移动到D:/syb_data/tempdbdev.dat
对应于errorlog中的信息为: 00:00000:00030:2010/06/07 13:45:33.34 kernel mirror for virtual device 2 started using asynchronous I/O
00:00000:00030:2010/06/07 13:46:56.00 kernel Closing the primary device for virtual device tempdbdev
00:00000:00030:2010/06/07 13:46:56.00 kernel The new primary device is now d:/syb_data/tempdbdev.dat
其中status:16386 = 16384 + 2 这是一个普通的物理设备文件。
五、对master设备进行镜像的另外一种方法
对master设备镜像还有一种方法,就是直接利用命令参数。 windows下sqlsrvr.exe的参数中有个是: -r mirror_file - master device's mirror device name
可以修改RUN_SEVERNAME文件来加入-r这个参数来镜像master设备。
如改为:
在windows下的ASE还需要修改注册表中的配置信息, 才能用系统工具中的服务正常启动数据。 不过你要是习惯每次都用RUN_SERVERNAME这个命令行来启动数据库的话, 也不用改注册表了。至于如何改注册表, 本篇暂时不介绍。
好了,关于ASE中的mirror就介绍这么多吧。