赞
踩
环境:aliyun
系统版本:Microsoft Windows Server 2019 Datacenter
数据库版本:SQL server 2016
服务器1:192.168.1.1 test001
服务器2:192.168.1.2 test002
一、更改主机名字
主机:test001 →更改为→ test001.xxx.net
副机:test002 →更改为→ test002.xxx.net
操作过程(主/副机操作一样)
更改完会提示需要重启,确认重启即可;
二、更改host(主机/副机都要)
进入C:\Windows\System32\drivers\etc,找到host文件,编辑添加主机和副机的IP 主机名
如:
192.168.1.1 test001.xxx.net
192.168.1.2 test002.xxx.net
三、数据库/日志还原
主/副数据库的名字,账号密码建议统一一样;
1、数据库还原(备份时选择“完整”备份):
2、日志还原(备份时选择“事务日志”就行)
在还原日志时,“选项”里选择“norecovery”选项;
四、创建镜像
配置镜像(整个操作都需要在master下操作)
信息确认:
主机(生产数据库):test001.xxx.net
副机(镜像数据库):test002.xxx.net
切换到主机服务器
创建数据库主密钥
- --user master
- --a.创建数据库主密钥
- create master key encryption by password = 'qwe123';
- --可用以下语句查看生成的数据库主密钥
- --select * from sys.symmetric_keys ;
创建一个证书
- --b.创建一个证书
- create certificate db_host_a_cert with subject = 'db_host_a certificate for database mirroring', start_date = '02/12/2016', expiry_date = '12/31/2039'
- --db_host_a_cert 证书名字
- --查询证书
- --select * from sys.certificates;
【创建主密钥小插曲 不报错可以忽略】
如果在创建数据库主密钥时,提示已经存在;
- ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = 'kk_2020';
- ############################返回提示###########################
- 消息 15578,级别 16,状态 1,第 1 行 数据库中已存在主密钥。执行此语句前,请先删除该主密钥。
删除主密钥
- DROP MASTER KEY
- ############################返回提示###########################
- 消息 15580,级别 16,状态 1,第 1 行 无法删除 主密钥,因为 证书 'db_host_a_cert' 是由它加密的。
先删除证书再删除主密钥即可
- DROP CERTIFICATE db_host_a_cert
- ############################返回提示###########################
- 命令已成功完成。
- ###若提示正在有一个或多个端点正在使用,要先
- drop endpoint xxx端点名
-
- ###########################删除主密钥###########################
- DROP MASTER KEY
- ############################返回提示###########################
- 命令已成功完成。
-
创建镜像端点
- --c.创建镜像端点
- create endpoint db_mirr state = started as tcp(listener_port=5022, --镜像端点使用的通信端口
- listener_ip = all) -- 侦听的IP地址
- for database_mirroring (
- authentication = certificate db_host_a_cert, -- 证书身份验
- encryption = required algorithm rc4, -- 不对传输的数据加密,如果需要加密,可以配置为 SUPPORTED 或 REQUIRED, 并可选择加密算法
- role = all); -- 端点支持所有的数据库镜像角色, 也可以设置为 WITNESS(仅见证服务器),或 PARTNER(仅镜像伙伴)
-
- --查询
- --select * from sys.tcp_endpoints
- --select * from sys.database_mirroring_endpoints;
备份证书
- --d.备份证书
- backup certificate db_host_a_cert to file = 'D:\ShareFile\db_a_run.cer';
创建登入
- --e.创建登入
- create login to_host_a_login with password = 'qwe123';
- create user to_host_a_user for login to_host_a_login;
- *******************************************************
- --有问题的时候需要删除之前的用户
- --drop login to_host_a_login,drop user to_host_a_user
切换到副机服务器
- -- user master
- --1.创建数据库主密钥
- create master key encryption by password = 'qwe123';
- --可用以下语句查看生成的数据库主密钥
- --select * from sys.symmetric_keys ;
创建一个证书
- --2.创建一个证书
- create certificate db_host_b_cert with subject = 'db_host_b certificate for database mirroring', start_date = '02/12/2016', expiry_date = '12/31/2029'
- --查询
- --select * from sys.certificates;
创建镜像端点
- --3.创建镜像端点
- create endpoint db_mirr state = started as tcp( listener_port=5022 ,listener_ip = all ) for database_mirroring( authentication = certificate db_host_b_cert, encryption = required algorithm rc4, role = all);
- --查询
- --select * from sys.tcp_endpoints
- --select * from sys.database_mirroring_endpoints;
-
备份证书
- --4.备份证书
- backup certificate db_host_b_cert to file = 'D:\ShareFile\db_b_run.cer';
创建登入
- --5.创建登入
- create login to_host_b_login with password = 'qwe123';
- create user to_host_b_user for login to_host_b_login;
切换到主机服务器
从副机服务器上D:\ShareFile\下拷贝备份出来的证书db_b_run.cer到主机服务器的D:\ShareFile\下
还原副机服务器证书到主机服务器上;
- use master create certificate db_host_b_cert authorization to_host_a_user from file = 'D:\ShareFile\db_b_run.cer'
-
- --赋权
-
- grant connect on endpoint::db_mirr to [to_host_a_login];
切换到副机服务器
从主机服务器上D:\ShareFile\下拷贝备份出来的证书db_a_run.cer到副机服务器的D:\ShareFile\下
还原主机服务器证书到副机服务器上;
- use master create certificate db_host_a_cert authorization to_host_b_user from file = 'D:\ShareFile\db_a_run.cer'
-
- --赋权
-
- grant connect on endpoint::db_mirr to [to_host_b_login];
-
设置伙伴(自动启动镜像)
切换到副机服务器
alter database DB_1 set partner = 'tcp://test001.xxx.net:5022';
切换到主机服务器
alter database DB_2 set partner = 'tcp://test002.xxx.net:5022';
镜像日志清理
在做SQL 2016镜像,由于主服务器必须做完整备份,这时log日志很大,必须定期清理log日志,将下列存储过程每6个小时执行一次,其定期会将日志文件缩小到300M
- Create PROC [dbo].[CleanTranLog]
- AS
- BEGIN
- DECLARE @num TINYINT --执行次数
- DECLARE @backLogName VARCHAR(100) ;--备份日志文件名称
- DECLARE @backLogPath VARCHAR(100) ; --备份日志文件的路径
- SET @num = 0 ;
- SET @backLogPath = N'C:\SQLBackup' ;--设定需要备份日志的路径
- --备份3次镜像日志文件,同时删除
- WHILE( @num < 3 )
- BEGIN
- DECLARE @LogPath VARCHAR(100)
- SET @backLogName = CAST(@num as VARCHAR(2)) + '.trn' ;
- SET @LogPath = @backLogPath + '\' + @backLogName
- BACKUP LOG DB TO DISK = @LogPath WITH NOFORMAT, NOINIT,
- NAME= @backLogName, SKIP, REWIND, NOUNLOAD,STATS = 10
- SET @num = @num + 1
- --删除刚备份的trn日志文件结束的备份日志文件
- EXECUTE master.dbo.xp_delete_file 0, @LogPath ;
- end
- --收缩日志文件到300M
- DBCC SHRINKFILE (DB_log, 300) ;
- --注意
- --DB 这里指: 数据库名称
- --DB_log 为日志逻辑名称 可以通过数据库属性中“文件”查看日志的逻辑名称。
- END
存储过程创建后(手动执行一下测试是否成功)
① 新建一个维护计划
② 在工具箱内打开“执行T-SQL语句”
双击打开执行框,确认即可
- USE [testdb]
- --数据库
- GO exec CleanTranLog
- --需要执行的存储过程
④ 在子计划中按照实际需求设置“计划”
确定后保存,最后测试一下执行计划是否成功即可!!!
Perfect!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。