SQLserver2012配置镜像数据库

作者:佚名 来源:网络 点击数: 发布时间:2020年12月04日

为了方便,这里以主数据库和镜像数据库为例,不设置见证数据;

1、环境准备。

(1)准备一个主数据库服务器 10.10.10.1,一个镜像据库服务器 10.10.10.2;

(2)两个服务器都安装好SqlServer 2012;

2、数据库文件准备。

(1)主库创建一个数据库 EmptyDb,恢复模式为【完整】,自动关闭为【false】,

也可以用已经有的数据库,但是注意保证【恢复模式】:【完整】、【自动关闭】:【false】

58d0e44e2b08466aa0059a7b42070938.Png

 

 

(2)主库备份数据库 (完整备份)(注意还有做一次【事务日志备份】,备份指定的是一个文件)

522e410d00204384add208fd1af2da39.Png

(3)在镜像库还原数据库 ,保证镜像库还原中状态;

764ed5db91f44e45b263d44b9b9451ad.Png

 

3、加密、证书生成、证书互换

(1)主库执行(保证主服务器存在路径d:\mirror)

USE master

CREATE MASTER KEY ENCRYPTION BY PASSWORD ='123456'

--创建本地证书

CREATE CERTIFICATE MirrorDB0_Cerf WITH SUBJECT='MirrorDB0_Cerf ',EXPIRY_DATE='20501230'

-- 创建镜像端点

CREATE ENDPOINT Mirroring STATE=STARTED

  AS TCP(LISTENER_PORT = 5022, LISTENER_IP = ALL)

  FOR DATABASE_MIRRORING

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

-- 备份证书文件

BACKUP CERTIFICATE MirrorDB0_Cerf TO FILE ='D:\Mirror\MirrorDB0_Cerf.cer'

 

CREATE LOGIN sqlmirror WITH PASSWORD ='123456' --; //如果已经存在这个用户则不需要创建

CREATE USER sqlmirror FOR LOGIN sqlmirror--; //如果已经存在这个用户则不需要创建

(2) 镜像库执行(保证镜像服务器存在路径d:\mirror),跟主库基本一致,只是证书文件不一样;

 USE master

CREATE MASTER KEY ENCRYPTION BY PASSWORD ='123456'

--创建本地证书

CREATE CERTIFICATE MirrorDB0_Cerf WITH SUBJECT='MirrorDB1_Cerf ',EXPIRY_DATE='20501230'

-- 创建镜像端点

CREATE ENDPOINT Mirroring STATE=STARTED

  AS TCP(LISTENER_PORT = 5022, LISTENER_IP = ALL)

  FOR DATABASE_MIRRORING

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

-- 备份证书文件

BACKUP CERTIFICATE MirrorDB0_Cerf TO FILE ='D:\Mirror\MirrorDB1_Cerf.cer'

 

CREATE LOGIN sqlmirror WITH PASSWORD ='123456' --; //如果已经存在这个用户则不需要创建

CREATE USER sqlmirror FOR LOGIN sqlmirror--; //如果已经存在这个用户则不需要创建

(3)文件拷贝

 把主库服务器的D:\Mirror\MirrorDB0_Cerf.cer 拷贝到镜像数据库服务器的D:\Mirror;

 把镜像服务器的D:\Mirror\MirrorDB1_Cerf.cer 拷贝到主库数据库服务器的D:\Mirror;

(4)主库执行

--交换证书

GRANT CONNECT ON ENDPOINT::Mirroring TO sqlmirror;

CREATE CERTIFICATE MirrorDB1_Cerf AUTHORIZATION sqlmirror FROM FILE='D:\Mirror\MirrorDB1_Cerf.cer'

 

(5)镜像库执行

GRANT CONNECT ON ENDPOINT::Mirroring TO sqlmirror;

CREATE CERTIFICATE MirrorDB0_Cerf AUTHORIZATION sqlmirror FROM FILE='D:\Mirror\MirrorDB0_Cerf.cer'

4、生成镜像

(1)镜像库执行

 ALTER DATABASE EmptyDb SET PARTNER = 'TCP://10.10.10.1:5022';

 

(2)主库执行

 ALTER DATABASE EmptyDb SET PARTNER = 'TCP://10.10.10.2:5022';

 5、查验是否成功

(1)主库的状态【主体,已同步】;

(2)镜像库的状态【镜像,已同步/正在还原中】;

(3)语句查询(主库和镜像库都可以),name表示启用了镜像的数据名称;

SELECT DISTINCT

       d.name ,

       m.mirroring_role_desc ,

       m.mirroring_state_desc

FROM    sys.database_mirroring m

       JOIN sys.databases d ON m.database_id = d.database_id

WHERE   m.mirroring_role_desc IS NOT NULL

6、删除镜像。

 --手动执行故障转移

ALTER DATABASE ModelingTest_8011_Mirror SET PARTNER FAILOVER;

--取消数据库镜像

ALTER DATABASE ModelingTest_8011_Mirror SET PARTNER OFF

--恢复数据库

restore database Modeling_EmptyDB with RECOVERY ;