环境检查

(1)网络是否能联通,并且端口可用。

(2)SQL Server版本、补丁是否满足镜像要求。

(3)SQL Server数据库的恢复模式、兼容级别。

(4)SQL Server上是否有常规的备份作业,特别是日志备份。

(5)主体服务器和镜像服务器的SQL Server能否互通。

注意事项

1、操作系统:Windows 2016,数据库 SQL 2016企业版(确保版本一致)

2、数据库模式:镜像方式(不使用见证服务器,不启用自动切换)

3、master\temp等系统数据库不能镜像;自定义作业、脚本及数据库用户不自动同步;

4、使用证书方式验证数据库镜像,镜像完成配置后,不能更改数据库操作系统主机名称、IP地址,不能删除master库

5、不能手动添加事务日志,否则同步失败,若是要添加事务日志只能重做镜像

配置证书,备份还原数据库

Step 1、创建数据库主密钥

主密钥的用处在这里是用于加密证书,当然主密钥不仅仅只有这个作用。对数据库主密钥的密码及存储保护要小心,这是实力级别的对象,影响面非常广。可以使用下面语句来创建:

USE master 
GO 
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Pa$$w0rd';

/*
--删除主密钥
USE master;
DROP MASTER KEY
*/

使用相同方式在镜像服务器创建数据库主密钥。

Step 2、创建证书,并用主密钥加密

创建证书时,默认在创建日期开始一年后过期,所以针对证书的创建,要注意其过期时间。下面是在“主体服务器”上创建HOST_A_cert证书的创建

USE master 
GO 
CREATE CERTIFICATE Host_A_Cert 
WITH Subject = 'Host_A Certificate', 
Expiry_Date = '2035-1-1'; --过期日期

/*
--删除证书
USE master;
DROP CERTIFICATE HOST_A_cert
*/

使用相同的方法在镜像服务器上实现对HOST_B_cert证书的创建

Step 3、创建端点

可以使用下面的代码在主体服务器中创建端点,并且指定使用5022,端口,端口在镜像配置过程中不强制使用特定端口(被占用或者特定端口如1433除外)。

--使用Host_A_Cert证书创建端点 
IF NOT EXISTS ( SELECT 1 
FROM sys.database_mirroring_endpoints ) 
BEGIN 
CREATE ENDPOINT [DatabaseMirroring] STATE = STARTED AS TCP ( LISTENER_PORT = 5022, LISTENER_IP = ALL )
FOR DATABASE_MIRRORING ( AUTHENTICATION = CERTIFICATE Host_A_Cert, ENCRYPTION = REQUIRED Algorithm AES, ROLE = ALL ); 
END

在镜像服务器对证书名稍作修改,创建镜像服务器的端点。

Step 4、备份证书

备份证书的目的是发送到别的服务器并导入证书,以便别的服务器能通过证书访问这台服务器(主体服务器)。

BACKUP CERTIFICATE Host_A_Cert TO FILE = 'C:\ShareFolders\Host_A_Cert.cer';

同理,在镜像服务器上重复一次,注意证书名和路径。备份之后可以在目标文件夹上看到有一个cer文件:

这里有个建议,分别在RepA和RepB本地创建一个单独的文件夹Certifications,然后用来存储本服务器和伙伴服务器的证书,证书一直存放在共享文件夹并不合理。本例分别在本机的C盘上创建一个Certifications的文件夹并存放所有的证书,如图:

Step 5、创建登录账号

针对每个服务器单独创建一个服务器登录账号,这里只需要创建一个登录给镜像服务器即可:

CREATE LOGIN Host_B_Login WITH PASSWORD = 'Pa$$w0rd';

同理,在镜像服务器上创建Host_A_Login给主体服务器。

Step 6、创建用户,并映射到Step 5中创建的登录账号中

在主体服务器上运行:

CREATE USER Host_B_User For Login Host_B_Login;

同理在镜像服务器也创建。

Step 7、使用证书授权用户

创建一个新的证书,并使用从伙伴服务器中复制过来的证书导入,然后映射step 6中的账号到这个新证书上。

CREATE CERTIFICATE Host_B_Cert  AUTHORIZATION Host_B_User FROM FILE = 'C:\Certifications\Host_B_Cert.cer';

注意镜像服务器上也同样。

Step 8、把Step 5中的登录账号授权访问端口

GRANT CONNECT ON ENDPOINT::[DatabaseMirroring] TO [Host_B_Login];

镜像服务器也一样。到此为止,配置镜像的步骤已经完毕,后续会给出尽可能自动化的配置脚本。

Step 9 、 副本还原数据库

主服务器备份完整数据库到副本数据库

副本数据库执行还原数据库,选项如下图

Step 10 、执行镜像

注意顺序,先要在RepB上执行

ALTER DATABASE AdventureWorks2008R2
SET PARTNER = 'TCP://RepA:5022';
GO

在RepA上执行

ALTER DATABASE AdventureWorks2008R2
SET PARTNER = 'TCP://RepB:5022';
GO

异常情况处理

做了镜像后事务日志会不断增加,请做好清理日志作业。

BACKUP LOG [SCFPData_GD] TO DISK = 'NUL:'; -- 备份事务日志,备份成NUL,就不用占硬盘空间
USE [SCFPData_GD];
DBCC SHRINKFILE(SCFPDATA_log, 64); --收缩数据库日志文件,收到7M
DBCC SHRINKFILE(SCFPDATA2_log, 64); --收缩数据库日志文件,收到7M,数据库有两个日志文件

同步失败,启用副本数据库:请在镜像选项中

副本服务器执行如下语句:

alter database db_name set partner off;
restore database db_name with recovery;

  • 无标签

0 评论

你还没有登录。你所做的任何更改会将作者标记为匿名用户。 如果你已经拥有帐户,请登录