sqlserver 2005 数据库双机热备(灾备)

      最近因为一个项目需要,要对数据库进行双机热备,不知道从何下手,于是上网找了很多的资料,然后经过多次尝试,最终成功,以下是实现过程中的总结。

      具体的环境如下:

      数据库是SqlServer2005,准备三台服务器做热备,分别是a、b、c,其中a是主服务器,b是镜像服务器,c是见证服务器

      一、硬件条件:

      1.a、b、c三台计算机都必须在一个局域网内

      2.修改a、b、c三台服务器的计算机名,具体操作如下:我的电脑-->计算机名,点击“更改”后进入到“计算机名称更改”,点击“其它”进入“DNS后缀和NetBIOS计算机名”,输入com,点击“确定”保证(此时会提示重启计算机,不过稍后再启动,因为还有其他文件要修改)。

      3.将三台计算机的ip+完整计算机名分别拷贝到主服务器、镜像服务器、见证服务器,具体格式如下:ip+空格+完整计算机名+enter,修改该文件必须是以管理员身份登录系统才可以。修改文件路径是:C:\Windows\System32\drivers\etc下的hosts文件

      4. 重启三台计算机

      二、软件条件

      1.只有企业版、标准版、开发版才可以建立数据库镜像,其他版本即Express只能作为见证服务器,查看版本语句

      select @@version(其实本人也不知道了解这几种版本之间的具体差别)

      2.若要对数据库进行数据库镜像,必须将它更改为使用完整恢复模式,具体修改语句为

      use master;
      alter database <databasename> set recovery full

      3.如果数据库没有打过sp2补丁,要先打补丁,不然后面语句无法成功执行。如果你的服务器系统是windows2008的,就需要打sp3补丁,这些补丁官网上都有。

      三、具体步骤:

      1.创建证书

       --主服务器
       use master;
       create master key encryption by password='killkill';
       create certificate host_a_cert with subject='host_a certificate',start_date='09/02/2012';
       --镜像服务器
       use master;
       create master key encryption by password='killkill';
       create certificate host_b_cert with subject='host_b certificate',start_date='09/02/2012';
       --见证服务器
       use master;
       create master key encryption by password='killkill';
       create certificate host_c_cert with subject='host_c certificate',start_date='09/02/2012';

       2.创建连接的端点

       --主服务器
       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)
       --镜像服务器
       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)
       --见证服务器
       create endpoint endpoint_mirroring
       state=started
       as
       tcp(listener_port=5022,listener_ip=all)
       for
       database_mirroring
       (authentication=certificate host_c_cert,encryption=required algorithm aes,role=all)

       注:创建端点的时候可能报错,可能是需要打sp2补丁(也许是其他问题)

      3.备份证书以备建立互联
       --主服务器
       backup certificate host_a_cert to file ='d:\sqlbackup\host_a_cert.cer';
       --镜像服务器
       backup certificate host_b_cert to file ='d:\sqlbackup\host_b_cert.cer';
       --见证服务器
       backup certificate host_c_cert to file ='d:\sqlbackup\host_c_cert.cer';

      4.互换证书
       将主服务器和见证服务器上的备份证书拷贝到镜像服务器的d:\sqlbackup下;
       将镜像服务器和见证服务器上的备份证书拷贝到主服务器的d:\sqlbackup下;
       将主服务器和镜像服务器上的备份证书拷贝到见证服务器的d:\sqlbackup下。

      5.添加登录名、用户
       --主服务器
       create login host_b_login with password='killkill';
       create user host_b_user for login host_b_login;
       create certificate host_b_cert authorization host_b_user from file='d:\sqlbackup\host_b_cert.cer';
       grant connect on endpoint::endpoint_mirroring to [host_b_login]
        
       create login host_c_login with password='killkill';
       create user host_c_user for login host_c_login;
       create certificate host_c_cert authorization host_c_user from file='d:\sqlbackup\host_c_cert.cer';
       grant connect on endpoint::endpoint_mirroring to [host_c_login]
        
       --镜像服务器
       create login host_a_login with password='killkill';
       create user host_a_user for login host_a_login;
       create certificate host_a_cert authorization host_a_user from file='d:\sqlbackup\host_a_cert.cer';
       grant connect on endpoint::endpoint_mirroring to [host_a_login]
        
       create login host_c_login with password='killkill';
       create user host_c_user for login host_c_login;
       create certificate host_c_cert authorization host_c_user from file='d:\sqlbackup\host_c_cert.cer';
       grant connect on endpoint::endpoint_mirroring to [host_c_login]

       --见证服务器
       create login host_a_login with password='killkill';
       create user host_a_user for login host_a_login;
       create certificate host_a_cert authorization host_b_user from file='d:\sqlbackup\host_a_cert.cer';
       grant connect on endpoint::endpoint_mirroring to [host_a_login]

       create login host_b_login with password='killkill';
       create user host_b_user for login host_b_login;
       create certificate host_b_cert authorization host_b_user from file='d:\sqlbackup\host_b_cert.cer';
       grant connect on endpoint::endpoint_mirroring to [host_b_login]

    

       四、建立镜像关系
       1.准备备机数据库(同步主备数据库的数据)
       可以尝试从刚刚使用的全备文件进行还原,在还原数据库的时候需要选上“restore with norecovery”,还原成功后的效果是“正在还原。。。”
       2.建立镜像
       --主服务器
       alter database <databasename> set partner='tcp://10.16.1.47:5022';(这个ip指的是镜像服务器的ip)
       如果不成功,就在备机数据库上执行以下语句
       --镜像服务器
       alter database <databasename> set partner='tcp://10.16.1.48:5022';(这个ip指的是主服务器的ip)

       如果失败,提示类似数据库事务未同步,则说明主备数据库的日志未同步,此时应将主数据库的事务日志进行备份,并还原到镜像数据库上,还原步骤同1一致。

       注:如果执行2中的语句仍无法实现,则通过手动创建镜像,具体操作步骤如下:

            1.选择热备的数据库,右键“属性”-->“镜像”,在右侧点击“配置安全性”-->“下一步”,选择“yes”-->“下一步”-->“下一步”-->主体服务器默认,“下一步”-->连接镜像服务器实例,服务器名选择计算机名,“下一步”-->连接见证服务器实例,服务器名选择计算机名,“下一步”-->“下一步”,完成。

      五、测试操作

       (简单的测试方法就是修改数据库中的数据,然后拔网线、关闭sqlserver服务)
       1.主备互换
       --主机执行
       use master;
       alter database <databasename> set partner failover;
       2.主服务器down掉,备机紧急启动并开始服务
       --备机执行
       use master;
       alter database <databasename> set partner force_service_allow_data_loss;
       3.原来的主机恢复,可以继续工作,需要重新设定镜像
       --备机执行
       use master;
       alter database <databasename> set partner resume;--恢复镜像
       alter database <databasename> set partner failover;--切换主机
       4.原来的主服务器恢复,可以继续工作
       use master;
       alter database <databasename> set partner safety full;--事务安全,同步模式
       alter database <databasename> set partner safety off;--事务不安全,异步模式

猜你喜欢

转载自dengmawei.iteye.com/blog/1455509