为了方便,这里以主数据库和镜像数据库为例,不设置见证数据;
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';