一.环境配置
l 环境:Window2003 企业版+ SQL Server2005开发版
l 在服务器A上面安装一个数据库实例ServiceA,在服务器B上面安装一个数据库实例ServiceB;
l 升级版本号:由于我使用的是正式的开发版,所以,是不支持数据库镜像功能的
Sql server 版本号:
SQL Server 9.0.1399
查看版本号:
use master
print @@version
结果:
Microsoft SQL Server 2005 - 9.00.1399.06 (Intel X86)
Oct 14 2005 00:33:37
Copyright (c) 1988-2005 Microsoft Corporation
Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
安装完毕以后查看版本号,结果:
Microsoft SQL Server 2005 - 9.00.3042.00 (Intel X86)
Feb 9 2007 22:47:07
Copyright (c) 1988-2005 Microsoft Corporation
Developer Edition on Windows NT 5.2 (Build 3790: Service Pack 2)
二.数据库镜像操作
1. 在ServerA和ServerB中创建同名数据库MirrorDb,若要对此数据库进行镜像,要将其改成“完整恢复模式”,在ServerA的MirrorDb上面执行下面的SQL语句:
use master
alter database mirrorDb set recovery full
2. 创建证书(主备都创建)
i. 主机执行:
use master
create master key encryption by password='chenyong'
create certificate host_a_cert with subject = 'host_a certificate',start_date = '2009-11-18'
ii. 备机执行:
use master
create master key encryption by password = 'chenyong'
create certificate host_b_cert with subject = 'host_b certificate', start_date = '2009-11-18'
3. 创建终结点(主备都创建)
i. 主机执行:
create endpoint Endpoint_Mirroring
state = started
as
tcp(listener_port=5022,listener_ip=all)
for
database_mirroring
(authentication = certificate host_a_cert, encryption = required ALGORITHM AES, role=all);
ii. 备机执行:
create endpoint Endpoint_Mirroring
state=started
as
tcp(listener_port=5022,listener_ip=all)
for
database_mirroring
(authentication=certificate host_b_cert,encryption=required ALGORITHM AES, role=all);
4. 备份证书到文件,并互换证书
i. 主机执行
backup certificate host_a_cert to file='d:/host_a_cert.cer'
ii. 备机执行
backup certificate host_b_cert to file='d:/host_b_cert.cer'
将备份好证书文件互相copy
5. 在同步login
i. 主机执行:
create login host_b_login with password='chenyong'
create user host_b_user for login host_b_login
create certificate host_b_cert authorization host_b_user from file='d:/host_b_cert.cer'
grant connect on endpoint::Endpoint_Mirroring to [host_b_login]
ii. 备机执行:
create login host_a_login with password='chenyong'
create user host_a_user for login host_a_login
create certificate host_a_cert authorization host_a_user from file='d:/host_a_cert.cer'
grant connect on endpoint::Endpoint_Mirroring to [host_a_login]
6. 上面都是对实例进行操作,下面开始对要进行镜像的数据库进行操作了,一开始我就创建了数据库mirrorDb,并将其设置成了“完整恢复模式”;
7. 将主体数据库进行数据库完整备份,然后在镜像机上进行还原,过程如下:
主体数据库备份:
上面是“数据库完整备份”,下面进行“事务日志备份”
将文件:full.bak和log.trn复制到镜像服务器中,然后在镜像数据库中进行还操作
在镜像机上面还原:
下面是还原数据库完整备份
注意这一张图的选择
然后点击确定,刷新一下页面,mirrorDb数据库后面会出现(正在还原…)的字样,下面是恢复事务日志备份
注意下面这张图的选择
8. 建立镜像关系,设置伙伴
主机执行:alter database mirrorDb set partner='TCP://备机IP:5022'
备机执行:alter database mirrorDb set partner='TCP://主机IP:5022'
9. 如果在执行上面两句没有出错的话,那么主体数据库服务器与镜像数据库服务器就成功建立了镜像关系
三.菜鸟操作小结
昨天把镜像搞成功了,今天想把它使用到公司的服务器上面,想想不放心,还是再操练一遍吧,这回操练可没能昨天顺利,不过我学到了不少的东西,在此与大家一起分享一下……
听前辈说,SQL 2005镜像一般一次不会成功(到昨天我搞成功为止,我就搞了一次),以为原来这么简单,今天算是傻眼了
前面都是很顺利的,写SQL语句嘛,还不简单(我没有用图形界面操作,因为看windows的窗口我的头会莫名其妙的发晕),噼哩啪啦打好了,F5一路畅通,心里不禁乐滋滋的,想今天又可以早点回去给老婆煲汤喝了,突然,在主体数据库服务器上面执行:alter database DBName set partner=”TCP://镜像服务器IP:5022”时,一个红X的框框跳了出来,说是主体数据库服务器无法链接到那个镜像数据库的服务器,郁闷了,调试呗
链接不到,嗯,网络不通?ping了镜像服务器一下,人家立刻就给应答了!端口没开?cmd à netstat –a 显示5022开着的啊,难道链接不上去?在主体服务器端用TCP调试器try了镜像服务器一下,链接上去了,我还发信息过去了呢,不过镜像服务器没有过回(回了就有问题了!!)
再琢磨一下,不通,我试着在主体数据库服务器上面用SSMS链接镜像的数据库服务器,链接不上去哎!打开“SQL Server 外围应用配置器”à “服务和连接的外围应用配置器”à 实例名àDatabase Engineà远程连接à选择“本地连接和远程连接”à使用TCP/TP,确定,OK;再打开“SQL Server 配置管理器”à 实例名 的协议àTCP/TP项,都启用,确定,再在主体数据库服务器上面链接一下镜像数据库服务器看看,链接上去了,再在主体数据库服务器上面执行那条语句,XX,XXX,现在最需要的是淡定~~,泡了一杯咖啡,听了一首轻音乐,舒缓了一下神经,想起了前辈的话,这个东西一下子不一定能搞出来,好,我从头再搞一次!!
先别动实例的主意,先将主体数据库的完整备份和事务日志备份来恢复一下镜像库看看看行不行,晕了,镜像数据库怎么动不了啊,说是已经为它启用了镜像功能,OK,我关了你丫的:alter database DBName set partner off,这回可以了吧!恢复了一下,还是不行哎,算了,将实例重做一次吧,(不是重装!!)建立的时候,是从master key 开始建立的删除的时候得逆向删除certificate endpoint user login masterkey一个个的删除,再重做了一次,这次一下子就做好了,哎,后面不想写了
四.使用镜像数据库
如果主体数据库服务器宕机了,那么数据还保存在镜像数据库里面,那么怎么用呢,在镜像数据库中执行下面两句话(注意顺序)
1. alter database mirrorDb set partner off
alter database mirrorDb set partner force_service_allow_data_loss
2. 至于应用程序怎么写就看你自己的了~~~