SQL Server非域(跨域)环境下镜像(Mirror)的搭建步骤及注意事项
在实际的生产环境下,我们经常需要跨域进行数据备份,而创建Mirror是其中一个方案。但跨域创建Mirror要相对复杂的多,需要借助证书进行搭建。
下面我们将具体的步骤总结如下:
第一部分 创建证书
Step 1:创建数据库主密钥
主密钥的用处在这里是用于加密证书,当然主密钥不仅仅只有这个作用。对数据库主密钥的密码及存储保护要小心,这是实力级别的对象,影响面非常广。可以使用下面语句来创建:
USE master
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Pa$$w0rd';

通过系统表查看,确认
select top 100 is_master_key_encrypted_by_server,* from sys.databases

使用相同方式在镜像服务器创建数据库主密钥。
Step 2:创建证书,并用主密钥加密
创建证书时,默认在创建日期开始一年后过期,所以针对证书的创建,要注意其过期时间。下面是在“主体服务器”上创建HOST_P_cert证书的创建
USE master
GO
CREATE CERTIFICATE Host_A_Cert
WITH Subject = 'Host_P Certificate',
Expiry_Date = '2050-1-1'; --过期日期

使用相同的方法在镜像服务器上实现对HOST_S_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 = 'D:\ShareFoldersMirror\Host_A_Cert.cer';

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

备份证书文件互相Copy至对方文件中。

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 = 'D:\ShareFoldersMirror\Host_B_Cert.cer';

注意镜像服务器上也同样。
Step 8:把Step 5中的登录账号授权访问端口
GRANT CONNECT ON ENDPOINT::[DatabaseMirroring] TO [Host_B_Login];

镜像服务器也一样。
到此为止,镜像所需的证书已经配置完毕。
第二部分 备份还原数据库
如果是想按照界面操作的话,可以采用如下方式
step1 创建数据库,选择【还原文件和文件组】

step 2 手动输入目标数据库名称 选择 【源设备】,选择对应的文件

注意:本次还原是为Mirror做准备,所以,点击 【选项】 按钮 。
所以需要选择【不对数据库执行任何操作,不回滚未提交的事务….】

还原成功。
第三部分 启动镜像
依次分别在镜像Server和主Server上运行以下命令就可以了【最好在Master DB上执行以下命令】
在镜像Server上线运行
ALTER DATABASE [Test_Mirror]
SET PARTNER = 'TCP://172.XXX.XXX.93:5022';
GO

在主Server上运行
ALTER DATABASE [Test_Mirror]
SET PARTNER = 'TCP://172.XXX.XX.106:5022';
GO

配置成功,此时显示如下:
主体服务器上显示

镜像服务器上DB显示

第四部分 补充部分
问题1 查询判断数据库是否已添加主密钥
---sys.databases的is_master_key_encrypted_by_server得到是否有加密
select top 100 is_master_key_encrypted_by_server,* from sys.databases
----如果没有就看不到数据【需定义到数据库】
----解释说明:##MS_ServiceMasterKey##----是说的整个服务,而##MS_DatabaseMasterKey## 是说的Master数据库,需留意。
----我们 使用证书搭建镜像 是需要在master数据库上创建数据库主密钥(如果主密钥不存在)。
SELECT * FROM sys.symmetric_keys
以下截图查询的数据显示Master数据库尚未创建主密钥。

以下截图的数据显示Master数据库已有主密钥

问题2 由日志传送更改为镜像。
希望直接更改,即不再需要备份和还原。
Step 1 【注意:此时先手动执行一下此DB的Log 备份的Job,然后停掉此Job,接下来再执行Copy Log 文件的Job(如果有此Job的话),再停掉此Job,最后执行Restore 此Log 文件的Job,接着停掉此Job】
Step 2 选择指定DB,取消【将此数据库启用为日志传送配置中的主数据库…】,就是把 勾 去掉。

Step 3 开始建立伙伴关系
先在备份Server的DB上去做
ALTER DATABASE [数据库名称]
SET PARTNER = 'TCP://172.XXX.XXX.6:10001';
GO
然后再在主DB上运行
ALTER DATABASE [数据库名称]
SET PARTNER = 'TCP://172.XXX.XXX.4:10002';
GO
问题3 在建立伙伴关系时,需注意设置伙伴的顺序
我们需要先在Mirror服务器上执行,然后再在主服务器中执行,则不报错。
否则,提示错误:

问题4 删除主密钥相关问题
删除主密钥 需先删除由它加密的证书;而删除证书需要先删除由它映射的用户。
问题5 搭建前的检查项
(1) 网络是否能联通,并且端口可用;(2)SQL Server数据库的恢复模式是否为完整;(3)SQL Server上是否有常规的备份作业,特别是日志备份是否已经暂停。
SQL Server非域(跨域)环境下镜像(Mirror)的搭建步骤及注意事项的更多相关文章
- SQL Server 2016 + AlwaysOn 无域集群
目录 AlwaysOn 搭建 WSFC 配置计算机的 DNS 后缀 安装故障转移集群 验证集群 创建集群 创建文件共享见证 配置 AlwaysOn 新建可用性组 创建侦听器 可读副本的负载均衡 主角色 ...
- 浅析SQL Server在可序列化隔离级别下,防止幻读的范围锁的锁定问题
本文出处:http://www.cnblogs.com/wy123/p/7501261.html (保留出处并非什么原创作品权利,本人拙作还远远达不到,仅仅是为了链接到原文,因为后续对可能存在的一些错 ...
- C#面试题(转载) SQL Server 数据库基础笔记分享(下) SQL Server 数据库基础笔记分享(上) Asp.Net MVC4中的全局过滤器 C#语法——泛型的多种应用
C#面试题(转载) 原文地址:100道C#面试题(.net开发人员必备) https://blog.csdn.net/u013519551/article/details/51220841 1. . ...
- SQL Server 中的跨库视图
SQL Server 中的跨库视图 在一个SQL中,有多个数据库,A.B.C,在使用C为连接库中,现在要查询A中的表T1. 那么,在C中建创视图(A_T1). SELECT *FROM A.dbo.T ...
- SSRS (SQL Server Report Service) 在IE9, IE10下显示不全的解决办法
原文:SSRS (SQL Server Report Service) 在IE9, IE10下显示不全的解决办法 在做项目的过程中遇到SSRS与IE9, IE10不兼容的情况,具体表现为报表页面在IE ...
- 推荐SQL Server Management Studio以及Visual Studio下的免费的插件 ApexSQL Complete
SQL Server 并没有代码格式化的工具,对于处理他人编写的长SQL需要手工的格式化是一件麻烦的事情. 推荐SQL Server Management Studio以及Visual Studio下 ...
- CentOS 环境下基于 Nginx uwsgi 搭建 Django 站点
因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,CentOS 环境下基于 Nginx uwsgi 搭建 Django 站点 以下 ...
- Linux环境下Hadoop集群搭建
Linux环境下Hadoop集群搭建 前言: 最近来到了武汉大学,在这里开始了我的研究生生涯.昨天通过学长们的耐心培训,了解了Hadoop,Hdfs,Hive,Hbase,MangoDB等等相关的知识 ...
- 在linux环境下安装redis并且搭建自己的redis集群
此文档主要介绍在linux环境下安装redis并且搭建自己的redis集群 搭建环境: ubuntun 16.04 + redis-3.0.6 本文章分为三个部分:redis安装.搭建redis集群 ...
- Linux环境下使用VSCode编译makefile文件的注意事项
Linux环境下使用VSCode编译makefile文件的注意事项 首先安装C/C++的两个依赖 在debug,launch会自动的生成下方的launch.json launch.json { // ...
随机推荐
- [Swift]LeetCode795. 区间子数组个数 | Number of Subarrays with Bounded Maximum
We are given an array A of positive integers, and two positive integers L and R (L <= R). Return ...
- [Swift]LeetCode955. 删列造序 II | Delete Columns to Make Sorted II
We are given an array A of N lowercase letter strings, all of the same length. Now, we may choose an ...
- shell 删除重复文件脚本
摘自 <Linux Shell脚本攻略>一书,例子在109页,原理在110页,原理讲解的很好哦! 需要了解awk命令.xargs,脚本中所用的命令在Linux Shell脚本攻略一书中都有 ...
- 初始Oracle
1.Oracle简介 Oracle体系结构: 先是用户进程发起一个请求到服务器进程(PGA , 一个PGA对应一个请求),然后PGA在发送给SGA.SGA有三大块分别是:共享池,数据缓冲区,日志缓 ...
- 【mysql】Date和String的互相转换(DATE_FORMAT & STR_TO_DATE)
1.Date ——> String 使用的函数:DATE_FORMAT(date,format) date:需要转换的日期 format:格式化的样式 format样式整 ...
- java中 try catch finally和return联合使用时,代码执行顺序的小细节
代码1测试 public static void main(String[] args) { aa(); } static int aa() { try { int a=4/0; } catch (E ...
- Git的使用--如何将本地项目上传到Github(三种简单、方便的方法)
一.第一种方法: 1.首先你需要一个github账号,所以还没有的话先去注册吧! https://github.com/ 我们使用git需要先安装git工具,这里给出下载地址,下载后一路(傻瓜式安装) ...
- Ocelot监控
网关的作用之一,就是有统一的数据出入口,基于这个功能,我们可以在网关上配置监控,从而把所有web服务的请求应答基本数据捕获并展显出来.关于web的监控,一般的做法是采集数据并保存,然后通过图表的方式展 ...
- 前端笔记之JavaScript(八)关于元素&计算后的样式
一.获取元素方法(JS选择器) 1.1概述 得到id元素的方法 document.getElementById() 得到一个元素.事实上,还有一个方法可以得到标签元素,并且得到的是多个元素: docu ...
- [二]基础数据类型之Long详解
Long Long 基本数据类型long 的包装类 Long 类型的对象包含一个 long类型的字段 属性简介 值为 263-1 的常量,它表示 long 类型能够表示的最大值 ...