- 由 虚拟的现实创建于10月 12, 2023 需要 2 分钟阅读时间
环境检查
(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;
- 无标签
添加评论