数据对于现代的企业来讲是非常重要的,很多企业因为数据丢失给企业造成极大的损失,尤其是对于存储众多数据的数据库更是需要做到保护,给数据库做双机热备是很多企业必要的选择, 能保证数据库里的数据更好的运行。

导致服务器出现故障的原因有很多,如果出现这种情况的话,常常需要几十分钟、几个小时甚至是好几天来进行恢复处理,这样就给我们的生活和工作造成了重大的影响。因此为了避免长时间的中断服务造成不良的影响,数据库双机热备就显得尤为的重要,给大家的工作带来了很多的好处和便利。

但是数据库双机热备并不是完美无缺的,它还是有一点小小的缺点的,那就是双机热备在系统出现故障时,并不是无缝连接的,需要一分钟左右的短暂的中断工作,在连接好之后,大家才能够恢复正常的工作,让你的工作不受影响的继续下去。相比较长时间的中断工作,这短短的一分钟一般人还是可以容忍的。

数据库双机热备占有很重要的意义和作用,具有不可取代的地位,同时还要指出的是数据备份和数据库双机热备不是同一个概念,大家千万不可将二者混为一谈。虽然数据备份也很重要,但是和数据库双机热备相比还是存在着差距,而且当出现服务器系统故障时,两者所发挥的作用也不是同日而语的,存在着天壤之别。下面我就讲讲在SQL service2014中如何配置双机热备。

一、配置主备机

1、服务器基本信息

主机名称为:DB_A,IP地址为:172.17.30.4

备机名称为:DB_B,IP地址为:172.17.30.5

二、主备实例互通

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

1、创建证书(主备可并行执行)

--主机执行:

USE master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123456';

CREATE CERTIFICATEDB_A_cert WITH SUBJECT = 'DB_A certificate' ,

START_DATE = '2012-08-02',

EXPIRY_DATE = '2099-08-02';

--备机执行:

USE master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123456';

CREATE CERTIFICATEDB_B_cert WITH SUBJECT = 'DB_B certificate',

START_DATE = '2012-08-02',

EXPIRY_DATE = '2099-08-02';

2、创建连接的端点(主备可并行执行)

--主机执行:

CREATE ENDPOINT Endpoint_Mirroring

STATE = STARTED

AS

TCP ( LISTENER_PORT=5022 , LISTENER_IP = ALL )

FOR

DATABASE_MIRRORING

( AUTHENTICATION = CERTIFICATE DB_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 DB_B_cert , ENCRYPTION = REQUIRED ALGORITHM AES , ROLE = ALL );

3、备份证书以备建立互联(主备可并行执行)

--主机执行:

BACKUP CERTIFICATE DB_A_cert TO FILE = 'C:SQLBackupDB_A_cert.cer';

--备机执行:

BACKUP CERTIFICATE DB_B_cert TO FILE = 'C:SQLBackupDB_B_cert.cer';

4、互换证书

将备份到C:SQLBackup的证书进行互换,即DB_A_cert.cer复制到备机的C:SQLBackup。DB_B_cert.cer复制到主机的C:SQLBackup。

5、添加登陆名、用户(主备可并行执行)

以下操作只能通过命令行运行,通过图形界面无法完成。(截至SQL Server2005的补丁号为SP2)

--主机执行:

CREATE LOGIN DB_B_login WITH PASSWORD = '123456';

CREATE USER DB_B_user FOR LOGIN DB_B_login;

CREATE CERTIFICATE DB_B_cert AUTHORIZATION DB_B_user FROM FILE = 'C:SQLBackupDB_B_cert.cer';

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DB_B_login];

--备机执行:

CREATE LOGIN DB_A_login WITH PASSWORD = '123456';

CREATE USER DB_A_user FOR LOGIN DB_A_login;

CREATE CERTIFICATE DB_A_cert AUTHORIZATION DB_A_user FROM FILE = 'C:SQLBackupDB_A_cert.cer';

GRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO [DB_A_login];

三、建立镜像关系

以下步骤是针对每个数据库进行的,例如:现有主机中有5个数据库以下过程就要执行5次。

1、手工同步登录名和密码

在上文中提到数据库镜像的缺点之一是无法维护登录名,所以需要我们手工维护登录。

通常来说数据库都将会有若干个用户作为访问数据库的用户,并且数据库会有相应的登录名,但是在备机中缺少与之相对应的登录名,例如某业务系统使用’myuser’作为登录名访问数据库,但是在备机中没有’myuser’这个登录名,因此一旦主备切换,业务系统就无法登录数据库了,这种情况称为"孤立用户"。在主机和备机数据库上建立相同用户名及密码即可。

2、准备备机数据库(主机备份及镜像还原)

在主机上备份数据库,先做完整备份,再做日志事务备份。

1、主数据必须设置成完整模式进行备份,如下图:

备份数据库(恢复模式选择完整备份)

2、备份事务日志,如下图:

备份事务日志(“备份类型”选成“事务日志”且备份目录与备份数据库的目录一致)

将备份文件在备机上使用主机的全备文件进行还原,在还原数据的时候需要使用选上“with non recover”。如图所示:

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

3、建立镜像

--在备机中执行如下语句:

ALTER DATABASE shishan SET PARTNER = 'TCP://172.17.30.4:5022';

说明:shishan为数据库名,需要根据实际进行修改。172.17.30.4为主机IP地址,需根据实际进行修改。

--主机执行:

ALTER DATABASE shishan SET PARTNER = 'TCP://172.17.30.5:5022';

说明:shishan为数据库名,需要根据实际进行修改。172.17.30.5为备机IP地址,需根据实际进行修改。

执行成功后:

做到这一步,数据库热备就完成了

下面是一些常用的命令:

--切换主备

use master;

alter database testdb set partner failover;

--备机强制切换

use master;

alter database testdb set partner force_service_allow_data_loss;

--恢复镜像

use master;

alter database testdb set partner resume;

--取消见证服务器

ALTER DATABASE testdb SET WITNESS OFF ;

--取消镜像

ALTER DATABASE testdb SET PARTNER OFF;

--设置镜像数据库还原为正常

RESTORE DATABASE testdb WITH RECOVERY;

(关于数据库备份和数据库集群,等待小编下次分析)