SQLserver2012配置镜像数据库
为了方便,这里以主数据库和镜像数据库为例,不设置见证数据;
1、环境准备。
(1)准备一个主数据库服务器 10.10.10.1,一个镜像据库服务器 10.10.10.2;
(2)两个服务器都安装好SqlServer 2012;
2、数据库文件准备。
(1)主库创建一个数据库 EmptyDb,恢复模式为【完整】,自动关闭为【false】,
也可以用已经有的数据库,但是注意保证【恢复模式】:【完整】、【自动关闭】:【false】
(2)主库备份数据库 (完整备份)(注意还有做一次【事务日志备份】,备份指定的是一个文件)
(3)在镜像库还原数据库 ,保证镜像库还原中状态;
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 ;