本文章参考了多篇文章,以下内容为精简:
--1.删除镜像端点
IF EXISTS (SELECT * FROM sys.endpoints e WHERE e.name = N'DatabaseMirroring')
DROP ENDPOINT [DatabaseMirroring]
GO
--2.删除证书
USE master;
DROP CERTIFICATE HOST_MASTER_cert
--3.删除主密钥
USE master;
DROP MASTER KEY
--创建主密钥
USE master;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'password'; --演示所需,否则不要设置这么简单的密码
GO
USE master;
CREATE CERTIFICATE HOST_MASTER_cert
WITH SUBJECT = 'HOST_MASTER certificate'--在Winess实例上创建证书,命名为HOST_MASTER_cert,这个选项是描述证书
,EXPIRY_DATE ='2055-10-1' ;--证书过期时间,可以适当设置长一点,具体按实际需要设置
GO
CREATE ENDPOINT DatabaseMirroring
STATE = STARTED
AS TCP (
LISTENER_PORT=5022 --使用5022端口,这个端口可以改成未被使用的端口,但是镜像过程中的所有合作者都应该使用相同的端口
, LISTENER_IP = ALL
)
FOR DATABASE_MIRRORING (
AUTHENTICATION = CERTIFICATE HOST_MASTER_cert --使用证书来授权端点
, ENCRYPTION = REQUIRED ALGORITHM AES
, ROLE = ALL --表示这个端点可以作为任何角色,包括主服务器、镜像服务器、见证服务器。
);
GO
BACKUP CERTIFICATE HOST_MASTER_cert TO FILE = 'D:\Certifications\HOST_MASTER_cert.cer';
GO
二.创建账号/用户并进行证书授权
/*
--删除账号
DROP LOGIN HOST_A_user
*/
--创建登陆帐号
USE master;
CREATE LOGIN Host_MIRROR_Login WITH PASSWORD = 'password';
GO
--创建用户,映射至登陆帐号
USE master;
CREATE USER Host_MIRROR_User For Login Host_MIRROR_Login;
GO
--创建一个新的证书,并使用从伙伴服务器中复制过来的证书导入,然后映射登陆账号到这个新证书上
CREATE CERTIFICATE Host_MIRROR_Cert
AUTHORIZATION Host_MIRROR_User
FROM FILE = 'D:\Certifications\Host_MIRROR_Cert.cer';
--授予这个新账号连接端点的权限
GRANT CONNECT ON ENDPOINT::DatabaseMirroring TO HOST_MIRROR_login;
GO
三.从主数据库还原至镜像数据库
1.完整备份mydb到共享文件夹D:\ShareFolders
2.复制备份文件到镜像服务器
3.以Nonrecovery选项还原mydb到镜像服务器
4.日志备份mydb,并同样方式还原到镜像mydb(备份文件中包含全部数据文件跟日志文件)
5.在镜像服务器上执行下面脚本:
ALTER DATABASE mydb
SET PARTNER = 'TCP://***:5022';
GO
6.在主体服务器执行下面脚本,把RepB添加成RepA的伙伴
ALTER DATABASE mydb
SET PARTNER = 'TCP://***:5022';
GO
7.切换模式(自定义选择)
alter database mydb set partner safety full; --设置数据库高安全模式
alter database mydb set partner safety off; --设置数据库高性能模式
四.数据库镜像运维方案
--1. 主服务器断开,在镜像服务器上执行操作,镜像服务器->主服务器
ALTER DATABASE [mydb] SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS
镜像服务器状态:主体,已断开连接
主体服务器状态:镜像,挂起/正在还原...
--2. 主服务器恢复,在镜像服务器执行操作,主附
alter database [mydb] set partner resume
镜像服务器状态:主体,已同步
主体服务器状态:镜像,已同步/正在还原...
此时,主服务器与镜像服务器完全切换,处于互热备状态
--3. 切换回原始的主体镜像服务器
USE master;
ALTER DATABASE [mydb] SET PARTNER FAILOVER; --切换主备
镜像服务器状态:镜像,已同步/正在还原...
主体服务器状态:主体,已同步
可以发现,主体与镜像完全切换回来。