数据库双机热备(代码实现)

sql server 2008提供3种高可用性方案: 分发/订阅方式;传送事务日志方式;镜像方式.sql

前者的主机(A服务器),和备机(B服务器)上的数据库可同时访问(固然B上的数据库会有一部分数据延迟),后二者的B服务器上数据库处于“正在还原”状态,不可读写(即不能分任务负载)。数据库

       分发/订阅方式: 粒度为表/存储过程/函数/视图...的级别。异步将A服务器上的对象变化/或事务/或快照,传到分发服务器,再传到N个订阅服务器。windows

       事务传送日志方式:粒度为数据库级别。A服务器上备份数据库,放到B上去还原,而后A再按期备份事务日志(放共享目录下),B按期去(A服务器上的共享目录)拷贝备份的事务日志,再按期还原上去。 (能够有多个备份服务器, B1,B2,B3....)。缺点:主/备需手动切换,且切换过一次以后,全部配置要从新配一次。安全

       镜像方式:粒度为数据库级别。A服务器上备份数据库和事务日志,放到B上去还原;而后A上每一个事务,都同步/异步提交到B上去执行。(一个主机对应一个备机)。可自动切换或手动切换,配置一次便可。 服务器

1、本文档主要说明在设置sql server的镜像功能时,在主机,备机须要进行的操做步骤异步

2、须要环境:函数

一、 操做系统:window server 2008 r2测试

二、 数据库:sql server2008 r2开发者版操作系统

3、安装设置步骤:(假设数据库名称为Testbackup).net

一、安装windows2008 r2

二、主备机均修改计算机DNS后缀 (该步骤也可跳过了)

在”个人电脑”---“属性”---“计算机名”tab---“更改”按钮---“其余”按钮---输入后缀,例如tomisoft.net等等,须要注意2点:一是主备机的dns后缀彻底同样,二是不要和实际的域名不管外网或内网冲突;修改后重启计算机;重启后,注意修改windows\system32\drivers\etc\hosts文件,加入对方彻底计算机名和IP对应关系。

三、   安装sql server2008 r2,采用混合验证模式

四、建立数据库,配置主机

 创建一个须要作数据库镜像的主数据库

若要对此数据库进行数据库镜像,必须将它更改成使用完整恢复模式

在主机数据库执行脚本以下:

    USE master;

    ALTER DATABASE  Testbackup

    SET RECOVERY FULL;

五、 主机备份数据库

将主机数据库进行彻底备份,能够经过图形界面完成,

六、 备机还原数据库:

首先在数据库中创建与目标数据库同名的空库,而后将主机经过全库备份完成的数据库备份文件拷贝到本机,能够经过脚本或者图形操做的方式进行还原,若是经过脚本,执行以下语句:

RESTORE DATABASE TestBackup FROM DISK='D:\TB.BAK' WITH NORECOVERY

若是经过图形界面进行,注意还原数据的时候须要使用选上“with non recover”。

若是执行成功数据库将会变成这个样子:

七、 主机进行事务日志备份

经过图形界面在主机对数据库进行事务日志备份

八、 备机还原事务日志备份:

将主机备份的事务日志文件拷贝到本机,而后在镜像服务器上经过图形界面还原数据库日志,还原事务日志时需在选项中选择“restore with norecovery

9 - 12步骤也可跳过了, 在SQL Server management studio里配置的时候,可使用sql server帐号密码作为验证方式。(图形界面配置方法:右键单击“主机上需镜像的数据库”,选择“属性”菜单,再选择“镜像”页签)

九、建立证书:(主备份别执行)

 实现互通可使用域或证书来实现,考虑实现的简单,如下选取证书的方式实现。注意:实现“主备数据库实例互通”的操做只须要作一次,例如为了将两个SQL Server 2008的实例中的个数据库建成镜像关系,则只须要作一次如下操做就能够了;或者这样理解:每一对主备实例(不是数据库)作一次互通。

   打开”SQL Server management studio”,  新建查询,执行脚本:

 主机:

     USE master;

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'tomisoft';

    CREATE CERTIFICATE HOST_A_cert WITH SUBJECT = 'HOST_A certificate' ,

    START_DATE = '01/01/2009';

 

备机: 

    USE master;

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'tomisoft';

    CREATE CERTIFICATE HOST_B_cert WITH SUBJECT = 'HOST_B certificate',

    START_DATE = '01/01/2009';

 

十、建立链接的端点:(主备机分别执行) 

主机: 

    CREATE ENDPOINT dbmirrep

    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 dbmirrep

    STATE = STARTED

    AS

    TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL )

    FOR

    DATABASE_MIRRORING    

    ( AUTHENTICATION = CERTIFICATE HOST_B_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );

 

十一、备份证书以备创建互联:(主备机分别执行) 

主机:

    BACKUP CERTIFICATE HOST_A_cert TO FILE = 'D:\database \HOST_A_cert.cer'

 备机:

    BACKUP CERTIFICATE HOST_B_cert TO FILE = 'D:\database\HOST_B_cert.cer';

此处注意相关目录要存在

 

十二、互换证书,将对方证书拷贝到本地,即主机的拷贝到备机,备机的拷贝到主机 

主机执行:

    CREATE LOGIN HOST_B_login WITH PASSWORD = 'tomisoft';

    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:: dbmirrep TO [HOST_B_login];

 

备机执行:

    CREATE LOGIN HOST_A_login WITH PASSWORD = 'tomisoft';

    CREATE USER HOST_A_user FOR LOGIN HOST_A_login;

    CREATE CERTIFICATE HOST_A_cert AUTHORIZATION HOST_A_user FROM FILE = 'D:\database\HOST_A_cert.cer';

    GRANT CONNECT ON ENDPOINT::dbmirrep TO [HOST_A_login];

 

1三、 主机创建镜像:

在A主机的目标数据库属性中,选择镜像,单击‘配置安全性…’进行配置的时候,主机和镜像机机器名须要设置为,形如:tomisoft201.tomisoft.tomi 不然镜像关系将执行不成功 (不必定非要这种方式,也能够直接用: ip地址+端口, 或者 主机名+端口, 后者须要配hosts文件。 这样的话,设置服务帐户的时候,会报错,但不影响.)

备机等待主机执行数据库镜像完成后,镜像数据库会变成以下模式,若是没有,能够经过刷新便可:

 

(四)镜像故障的切换

一、 主机当机后的处理:

若是主机当机后(数据库显示:【主体,已断开】,备机数据库会变成以下模式:

,此时在备机执行以下脚本,将镜像库变为主体可用库,便可进行读写:

alter database Testbackup set partner force_service_allow_data_loss

注:测试中发现主体数据库的sql服务必须启动,不然备份数据库执行完上述语句后仍然处于‘正在恢复‘状态,依然不可用。切换后的正确状态如图,表示备机已经成为当前的主体,而以前的主体已经挂起。

二、 主机恢复后的处理:

若是主机恢复,执行以下脚本便可将主机从新设置为主机,当前镜像仍然恢复镜像模式:

首先主机要执行脚本:

USE master;

ALTER DATABASE TestBackup SET PARTNER SAFETY FULL; --事务安全,同步模式

备机执行脚本:

USE master;

ALTER DATABASE Testbackup SET PARTNER RESUME

注:成功执行后结果如图

成功后再执行:

ALTER DATABASE Testbackup SET PARTNER FAILOVER

注:执行后备机数据库如图,至此原来的主体数据库完全恢复主体角色。

三、 其余说明:

若是主机没法恢复,但愿以当前镜像机为主机,须要从新创建镜像

正常状况下,若是但愿进行主备切换,即将主机人为停掉,将镜像做为主机,则能够在主机执行脚本进行主备互换:

USE master;
ALTER DATABASE <DatabaseName> SET PARTNER FAILOVER

主机当机后恢复的状况,默认状况下,事务安全级别的设置为 FULL,即同步运行模式,并且SQL Server 2005 标准版只支持同步模式。

在主机中执行:

USE master;
ALTER DATABASE <DatabaseName> SET PARTNER SAFETY FULL --事务安全,同步模式, (测试过程当中发现,备份机执行切换主备脚本的时候,若是主机不先执行此脚本,备机会执行失败)

下面的异步模式通常不推荐使用:

ALTER DATABASE <DatabaseName> SET PARTNER SAFETY OFF; --事务不安全,异步模式

相关文章
相关标签/搜索