【sql server镜像】SQL SERVER 基于数据库镜像的主从同步(数据库镜像实践汇总)

SQL SERVER 基于数据库镜像的主从同步

Author:chaoqun.guo    createtime:2019-03-26html

 

 

目录算法

SQL SERVER 基于数据库镜像的主从同步... 1sql

一、概念... 2数据库

1.一、服务器概念... 2windows

1.二、模式概念... 2安全

1.三、数据库镜像的优点... 3服务器

1.四、数据库镜像的不足... 3网络

二、实施前提(基于证书访问实现)... 4dom

三、实施步骤(基于证书访问实现)... 4异步

3.一、步骤目录... 4

3.二、实操... 5

3.三、主备切换... 7

四、数据库镜像监控... 9

4.一、数据库镜像监视器... 9

4.二、系统存储过程监视(联机丛书—监视数据库镜像)... 9

五、常见故障排查... 11

【5.1】服务器网络地址 “TCP://xxx:5022″ 没法访问或不存在。... 11

【5.2】TCP://xxx:5022 的数据库镜像链接错误... 11

【5.3】程序如何在主从切换时自动切换链接?... 11

【5.4】孤立用户问题... 11

【5.5】自增键在镜像中的影响... 11

【5.6】镜像服务器与主服务器断开... 11

【5.7】其余相关... 12

附录1:数据库镜像主从+见证中断状况... 13

1.一、1个点中断的状况... 13

1.二、2个点中断的状况... 13

1.三、镜像集群监控概述... 13

附录2:镜像相关信息查阅... 14

2.一、查看master中的证书... 14

2.二、查看镜像端点状态(联机丛书视图参考)... 14

2.三、查看端点链接权限... 14

2.四、常见删除语句... 14

2.五、更多查阅... 14

附录3:加入见证服务器,实现自动故障转移(基于证书)... 15

附录4:基于域帐户的镜像搭建... 18

4.一、操做步骤... 18

4.二、操做实践... 18

参考文献... 25

 

 

一、概念

1.一、服务器概念

◆ 主体服务器(Principal Server)

  其中一个实例为客户端提供服务,这个实例称为"主体服务器"。该服务器"扮演"主体角色",其数据库副本为当前的"主体数据库"。

 

◆ 镜像服务器(Mirror Server)

  另外一个实例则充当备用服务器,这个实例称为"镜像服务器"(Mirror Server)。该服务器扮演"镜像角色",其数据库副本为当前的"镜像数据库"。镜像数据库不能供客户端访问,可是能够为镜像数据库建立一个快照,让客户端访问这个快照。

 

◆ 见证服务器(Witness Server)

  见证服务器并不能用于数据库,只是用来支持自动故障转移。见证服务器验证主体服务器是否保持运行,当见证服务器与主体服务器断开链接以后,若是此时镜像服务器和见证服务器保持相互链接,则镜像服务器启动自动故障转移,成为新的主体服务器。

 

 

1.二、模式概念

数据库镜像会话以同步操做或异步操做运行。

  在同步操做下,事务将在伙伴双方处提交。因为主体数据库须要等待镜像数据库将日志写入磁盘后返回的确认消息,所以会延长事务滞后时间。在异步操做下,事务不须要等待镜像服务器将日志写入磁盘即可提交,这样可最大程度地提升性能。

在SQL SERVER 2008以后,主库和镜像库之间的日志流传送会默认使用压缩,压缩一方面下降了网络压力,另外一方面增大了镜像两端的CPU压力。 能够打开 TF 1462 来关闭日志流压缩,SQL SERVER 2005 上日志传送没有使用压缩。

 

根据是否同步操做以及是否支持自动故障转移功能,数据库镜像有如下三种运行模式。

(1) 高安全性模式:主库把事务日志数据信息发给从库,从库返回事务日志持久化确认信息,确认同步后,事务将在主从库一块儿提交。

(2) 高性能模式:主库把事务日志数据信息发给从库,发完后无需等待从库返回确认信息。

(3) 自动故障转移模式(高可用模式):在高安全模式运行时,能够添加见证服务器,从而实现自动故障转移。

 

 

1.三、数据库镜像的优点

数据库镜像技术有如下优点:

 

(1)消除存储方面的单一故障点:不用共享磁盘

(2)提升数据库可用性:快速自动/手动主从切换

(3)加强的数据保护:提供完整的数据冗余

(4)自动页修复:2008企业版在某些类型的错误致使页损坏,使其没法读取后,在 SQL Server 2008 企业版或更高版本上运行的数据库镜像伙伴(主体或镜像)将尝试自动修复该页。没法读取该页的伙伴将从其伙伴请求该页的新副本。若是此请求成功,则将以可读副本替换不可读的页,而且这一般会解决该错误。

 

1.四、数据库镜像的不足

镜像数据库技术有如下不足之处:

 

(1)版本限制

  对于标准版的 SQL Server 实例,只可使用"高安全模式",即主体数据库与镜像数据库必须实现同步操做。在这种运行模式时,若是任何一个伙伴遇到性能问题,都将使同步操做带来较大的延时。一般标准版的 SQL Server 受到一些技术限制致使性能不能提高,从而使同步操做的延时更加明显。

 

(2)镜像数据库的访问限制

  镜像数据库甚至不能够提供只读访问,只有经过建立快照才能访问,所以镜像数据库的利用率不高。

因为数据库镜像技术存在上述不足,SQL Server 后续产品将删除此项功能,建议改用 AlwaysOn 可用性组。SQL Server 2016 标准版中已经引入了"AlwaysOn 基本可用性组",用来替代数据库镜像技术。

  

二、实施前提(基于证书访问实现)

(1)实例版本:必须是2005 SP1及以上(且兼容级别也要在这个版本及以上),且主从版本一致。

(2)数据库版本:必须是标准版及更高的开发/评估/企业,且只有企业版/开发版才能实现高性能模式。且主从一致。

(3)通讯:确认网络能ping通,肯定端点端口(默认通常是5022)与实例端口(默认1433)能够telnet 通实现访问。

(4)磁盘:足够的磁盘空间(全备复制+事务备复制+还原空间+预留空间)。最好主从是相同的目录(不一样会形成没法加文件)。

(5)限制:不支持 FILESTREAM。不能在主体上建立它。不能为包含 FILESTREAM 文件组的数据库配置数据库镜像。

(6)系统:32位系统下,单实例最多支持10个数据库作镜像。

(7)主数据库:镜像的数据库对象不能是系统数据库。主库必须是完整恢复模式。且主从库必须是相同的数据库名。

(8)从数据库:利用主数据库的相关备份进行还原,必须以norecovery模式(RESTORING 状态)

(9)权限:登陆名具备实施步骤权限,最好sysadmin。可能还须要实例帐户拥有必定程度的windows权限,最好是admin组;

(10)端点:镜像两端的加密算法必须保持一致,不然没法搭建。(由于不一样版本默认加密算法不同)小版本不要紧,但前提是从库能够还原主库。

 

 

三、实施步骤(基于证书访问实现)

3.一、步骤目录

主服务器host_A

从服务器host_B

【1】在master中,建立数据库秘钥

【1】建立master数据库秘钥

【2】基于【1】中秘钥,建立服务器实例加密证书的出站证书

【2】基于【1】中秘钥,建立服务器实例加密证书的出站证书

【3】使用服务器实例的证书为该服务器实例建立端点。

【3】使用服务器实例的证书为该服务器实例建立端点。

【4】将证书备份到文件,并将其安全地复制到从服务器。

【4】将证书备份到文件,并将其安全地复制到主服务器。

【5】为从服务器建立登陆名。

【5】为主服务器建立登陆名。

【6】建立一个使用该登陆名(【5】中的)的用户

【6】建立一个使用该登陆名(【5】中的)的用户

【7】使用证书对【6】中用户受权

【7】使用证书对【6】中用户受权

【8】对【5】中登陆名进行链接端点的受权

【8】对【5】中登陆名进行链接端点的受权

【9】主数据库设置为彻底恢复模式,并以全备传输到从服务器

【9】以norecovery模式还原须要镜像的库

【10】(后作)设置镜像伙伴为从库

【10】(先作)设置镜像伙伴为主库

【11】核验,基于SSMS与T-SQL

【11】核验,基于SSMS与T-SQL

 

 

 

 

 

 

3.二、实操

主服务器:SQLSVR1, 192.168.1.1

从服务器:SQLSVR2, 192.168.1.2

--一、建立 master 数据库主密钥

Use master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '23987hxJ#KL95234nl0zBe';

GO

 

--二、对服务器实例建立一个用于其数据库镜像出站链接的加密证书。 

 

USE master; 
CREATE CERTIFICATE SQLSVR1_cert WITH SUBJECT = 'SQLSVR1 certificate for database mirroring', 
 start_date='2019-03-01',expiry_date='2030-01-01'; 
GO

 

--三、 使用主服务器实例的证书 SQLSVR1_cert 为主服务器 SQLSVR1 建立端点。
Use naster; 
CREATE ENDPOINT [默认的镜像端点]
 STATE = STARTED AS TCP (
 LISTENER_PORT=5022
 , LISTENER_IP = ALL
 ) 

FOR DATABASE_MIRRORING (
 AUTHENTICATION = CERTIFICATE SQLSVR1_cert 
 , ENCRYPTION = REQUIRED ALGORITHM AES 
 , ROLE = ALL
 ); 

GO

 

--四、备份主体服务器 SQLSVR1 的加密证书。必定要保证证书安全无损。
BACKUP CERTIFICATE SQLSVR1_cert TO FILE ='d:\temp_bak\SQLSVR1.cer'; 

 

--五、在主服务器实例的 master 数据库中为镜像服务器建立一个登陆名 
USE master;
CREATE LOGIN SQLSVR2_login WITH PASSWORD='Sample@#';

GO

 

--六、为5中新建立的登陆名建立一个用户 
USE master; 
GOCREATE USER SQLSVR2_user FOR LOGIN SQLSVR2_login;

 

--七、将用户与镜像服务器的证书相关联。 
--已经将从服务器的证书本分SQLSVR2.CER拷贝到D:\temp_bak\
Use master;CREATE CERTIFICATE SQLSVR2_cert AUTHORIZATION SQLSVR2_user FROM FILE = 'D:\temp_bak\SQLSVR2.cer'

GO

 

--八、授予其6中登陆名对数据库镜像端点的 CONNECT 权限。 
GRANT connect on endpoint::[默认的镜像端点] TO [SQLSVR2_login]; 
GO

 

--九、设置SQLSVR1中主库为完整恢复模式,并备份到从服务器SQLSVR2 
Alter databases db_name set recovery full with no_wait 
Backup databases db_name to disk='URL' 
/* 
【1】先关闭事务备份做业。 
【2】注意:模式的区别

(1)简单模式:那么设置为完整模式后全备到SQLSVR2便可

(2)大容量模式:那么设置为完整模式后,要利用以前的大容量模式下的全备,则须要顾及好日志链;(即要把主备+事务备+设置好完整模式后的事务备)

(3)完整模式:

    如要利用之前的备份,则须要全备+全备以后的全部事务备

    若是库小能够直接全备,再传输到SQLSVR2

(4)个人业务:主库搭建最佳实践:

 
*/ 

 

--十、(后作)设置镜像主从 
Alter database db_name set partner='TCP//192.168.1.2:5022' 
 

 

--一、建立 master 数据库主密钥

Use master;

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '23987hxJ#KL95234nl0zBe';

GO

 

--二、对服务器实例建立一个用于其数据库镜像出站链接的加密证书。 

 

USE master; 
CREATE CERTIFICATE SQLSVR2_cert WITH SUBJECT = 'SQLSVR2 certificate for database mirroring',
start_date='2019-03-01',expiry_date='2030-01-01';
GO

 

--三、 使用从服务器实例的证书 SQLSVR2_cert 为从服务器 SQLSVR2 建立端点。
Use naster; 
CREATE ENDPOINT [默认的镜像端点]
 STATE = STARTED AS TCP(

    LISTENER_PORT=5022
 , LISTENER_IP =ALL
 ) 

FOR DATABASE_MIRRORING (
 AUTHENTICATION = CERTIFICATE SQLSVR2_cert 
 , ENCRYPTION = REQUIRED ALGORITHM AES 
 , ROLE = ALL
 ); 

GO

 

--四、备份从服务器 SQLSVR2 的加密证书。必定要保证证书安全无损。
BACKUP CERTIFICATE SQLSVR2_cert TO FILE ='d:\temp_bak\SQLSVR2.cer'; 

 

--五、在从服务器实例的 master 数据库中为主体服务器建立一个登陆名 
USE master;
CREATE LOGIN SQLSVR1_login WITH PASSWORD='Sample@#';

GO

 

--六、为5中新建立的登陆名建立一个用户 
USE master; 
CREATE USER SQLSVR1_user FOR LOGIN SQLSVR1_login; 
GO 

 

--七、将用户与镜像服务器的证书相关联。 
--已经将主服务器证书的证书备份SQLSVR2.CER拷贝到D:\temp_bak\
Use master;

CREATE CERTIFICATE SQLSVR1_cert AUTHORIZATION SQLSVR1_user FROM FILE='D:\temp_bak\SQLSVR1.cer'
GO 

 

--八、授予其6中登陆名对数据库镜像端点的 CONNECT 权限。 
GRANT connect on endpoint::[默认的镜像端点] TO [SQLSVR1_login]; 
GO

--九、还原SQLSVR1服务器上传过来的主数据库备份文件 
Restore database db_name from disk='RRL' with norecovery,stats=10, 
Move N'logic_name'to 'RRL', Move N'logic_name'to 'RRL' 
/*
【1】注意
(1)还原数据库:必定要和主库的数据库名一摸同样 
(2)还原模式:必定要选择norecovery模式,不然将会失败 
(3)还原库文件的存放路径:尽可能和主库的盘符及目录及名字一摸同样,不然不支持新增文件同步(咱们这里没用到,暂时不用管)。 
若是机器盘符目录不一致,那么须要在还原时用move选项来进行位置移动。
(4)个人业务:从库搭建最佳实践:

 
*/ 

 

 

 

 

 

--十、(先作)设置镜像主从 
Alter database db_name set partner='TCP//192.168.1.1:5022' 

 

 

十一、核验—基于SSMS

【11.1】主服务器/从服务器,查看数据库状态

右击数据库,刷新一下,看是否有出现这种状况

主服务器                                                从服务器

            

 

【11.2】查看数据库属性,镜像选项卡

 

十二、核验—基于T-SQL

--建立快照

create database dbtank_demo1

on (name='db_tank_data',filename='d:\temp_bak\db_tank20190325.snap')

as SNAPSHOT of db_tank

go

--查看表数据最先时间(能够多弄几个表之类的看看)

select top(5) gettime from dbtank_demo1..sys_users_runegoods

where gettime >='20190320'

order by gettime desc

--删除快照

drop databases dbtank_demo1

 

 

3.三、主备切换

 

【1】.在高安全模式下:

 

在主机执行:

 

use master;

alter database Demo1 set partner failover;

 

即完成主备切换

 

【2】.在高性能模式下,须要先切换到高安全模式下再执行切换

 

use master;

alter database Demo1 set partner safety full;

alter database Demo1 set partner failover;

 

【3】.在主机(SQLSVR1)宕机的状况下在备机(SQLSVR2)进行强制切换:

 

use master;

alter database Demo1 set partner FORCE_SERVICE_ALLOW_DATA_LOSS;

 

当主机(SQLSVR1)从新开机后,在SQLSVR2机器上执行

 

use master;

alter database Demo1 set partner resume;

 

此时SQLSVR1成为了备机,而SQLSVR2成为了主机。

 

再到SQLSVR2机器上执行

 

alter database Demo1 set partner failover;

 

就成了SQLSVR1成为主机,SQLSVR2成为备机

 

 

 

【4】切换镜像在高性能模式下(慎用,可能会丢失数据)

 

use master;

alter database Demo1 set partner safety off;

 

 

 

【5】.关闭数据库镜像

 

ALTER DATABASE Demo1 SET PARTNER OFF

 

 

 

【6】.暂停与恢复数据库镜像

 

  在主体镜像服务器上,如果不当心日志过大,能够进行暂停来设置日志上限

 

  (1)暂停:ALTER DATABASE AdventureWorks2012 SET PARTNER SUSPEND;

 

  (2)恢复:ALTER DATABASE AdventureWorks2012 SET PARTNER RESUME;

 

【7】移除见证服务器

USE [master]

GO

ALTER DATABASE Demo1 SET WITNESS OFF

GO

 

 

四、数据库镜像监控

4.一、数据库镜像监视器

【1】启动数据库镜像监视器

 

  1. 打开数据库镜像监视器

 

4.二、系统存储过程监视(联机丛书—监视数据库镜像

    

sp_dbmmonitoraddmonitoring

建立按期更新服务器实例上每一个镜像数据库的状态信息的做业。

sp_dbmmonitorchangemonitoring

更改数据库镜像监视参数的值。

sp_dbmmonitorhelpmonitoring

返回当前更新持续时间。

sp_dbmmonitorresults

返回所监视数据库的状态行,使您可以选择此过程是否预先获取最新的状态。

sp_dbmmonitordropmonitoring

中止并删除服务器实例上全部数据库的镜像监视器做业。

 

 

重点查看

Use msdb

Go

--查看2个小时之内的同步数据记录

EXEC sp_dbmmonitorresults db_tank, 2, 0;

、常见故障排查

【5.1】服务器网络地址 "TCP://xxx:5022″ 没法访问或不存在。

请检查网络地址名称,并检查本地和远程端点的端口是否正常运行。 (Microsoft SQL Server,错误: 1418)

     后来在SQLServer日志中看到了以下错误:  Database mirroring connection error 4 'An error occurred while receiving data: '10054(远程主机强迫关闭了一个现有的链接。)'.' for 'TCP://xxx:5022′.

经过这个错误找到了问题,c:\ProgramData\Microsoft\Crypto\RSA\MachineKeys\ 没有读写权限,一看真的是这样,加入管理员(即sqlserver的运行用户)的读写权限后一切正常!(若是还不行,配置权限后,再从新配置镜像)

具体见:http://dba.stackexchange.com/questions/6222/mirroring-problems-after-removing-domain

 

【5.2】TCP://xxx:5022 的数据库镜像链接错误

5 'Connection handshake failed. The login 'ZBIAN\Administrator' does not have CONNECT permission on the endpoint. State 84.'。

 在日志中看到如上这个错误,发现是由于镜像数据库实例没有权限

 对主数据库与镜像数据库进行了调整,主数据库与镜像数据库使用相同的实例帐户,并从新启动数据库服务SQL Server (MSSQLSERVER)

 

【5.3】程序如何在主从切换时自动切换链接?

(1)标准办法的链接字符串示例(参考:联机丛书—镜像数据库的链接字符串

通常形式:"Server=Partner_A; Failover Partner=Partner_B; Database=AdventureWorks; "

举例演示:"Server=250.65.43.21,4734; Failover Partner=Partner_B; Database=AdventureWorks; "

(2)程序控制:

    直接作IP判断便可,断线重试,重试几回后进行伙伴服务器链接尝试。

 

【5.4】孤立用户问题

当一个数据库从一个实例迁移(恢复)到另一个实例时,登陆名数据并无随之一块儿迁移。即便从新新建与数据库用户相同的登陆名,却由于SID不一样,也成了孤立的用户/孤立的登陆名。即-》只有数据库用户。没有登陆名,没法登录实例,则数据库用户无用。 即-》有登陆名与同名数据库用户,可是二者没有关联起来,则登陆名登陆到实例没法访问数据库。解决方案以下:

  1. 当一个库刚迁移(恢复)到另一台实例时,新建同名登陆名-》进行用户与登陆名更新关联
  2. 在主库上查询获得须要同步的用户sid,上在从库上建立登陆并设定该登陆的sid为查询到的sid
  3. 推荐作法:直接重构一遍,删除全部的数据库用户与同名登陆名,从新创建登陆名与用户映射关系

 

【5.5】自增键在镜像中的影响

  1. 在对表TB1插入两条数据后,表中自增列当期值为 2 发生故障转移
  2. 故障转移后,对表TB1插入一条数据,发现表中自增列当期值变成1002

结论:假设故障转移前自增列的当前值为 X ,在故障转移后,自增列的初始值会变成:((X/1000)+1)*1000+1

 

【5.6】镜像服务器与主服务器断开

(1). 由于主库或镜像库存在内存压力,致使没法完成镜像日志传送和重作

解决办法:设置数据库最小内存,保证数据库有足够内存完成镜像操做

 

(2) 由于主库和镜像库断开链接,致使镜像失败

 

解决办法:

1.使用TELNET IP 5022来检查双方之间的网络和端口是否打开

2.重启主库和镜像库的镜像端口

ALTER ENDPOINT [Endpoint_Mirroring] STATE=STOPPED

ALTER ENDPOINT [Endpoint_Mirroring] STATE=STARTED

链接上之后,若是主库与镜像没有自动开始继续同步,则使用以下进行尝试

(1)暂停:ALTER DATABASE AdventureWorks2012 SET PARTNER SUSPEND;

(2)恢复:ALTER DATABASE AdventureWorks2012 SET PARTNER RESUME;

 

3. 检查证书是否过时和被更换

use master;

select *from sys.certificates

--过时了就新建一个新的证书,而后alter endpoint endpoint_name来应用新的证书。而后重新关联用户与证书。

--查看镜像端点与证书的关系,是否被更换了

 

4.检查主库是否有非法关机的状况,若是存在,优先运行DBCC CHECKDB和检查备份

若是主库上备份还原失败,则须要使用备份重新搭建镜像

 

【5.7】其余相关

  1. 更换证书:过时或不安全时使用
  2. 如何在主库上增长文件:磁盘不足或须要作文件组规划时使用

 

 

 

附录1:数据库镜像主从+见证中断状况

1.一、1个点中断的状况

 

  1. principal 与 witness 链接中断:

(1)状态:主库会变成Disconected 状态,表示失去与mirror链接,切断全部客户端链接, 中止读写服务,等待故障切换(默认超时为10S)

(2)结果:若是mirror与witness正常链接,mirror成为新的principal,开始对外提供读写服务。

 

    

  1. mirror 与 witness 链接中断

(1)状态:principal与witness链接正常,principal状态变为Disconected,表示终止与mirror链接,mirror状态变为suspend; principal再也不向mirror发送事务日志,等待mirror从新创建到witness连接后,principal才会恢复与mirror进行数据同步;

 

  1. principal 与 mirror 链接中断:

principal与mirror同时保持witness的链接会话,可是principal与mirror之间会话中断,witness会通知mirror,principal依然保持链接状态,不会触发故障切换;此时principal因为保持有witness的链接会话,服务正常;

 

 

 

1.二、2个点中断的状况

 

  1. principal 与全部节点会话中断

只要mirror与witness会话正常,便可完成正常的故障转移;若是mirror与witness链接也中断,则没法完成,即使是后来mirror与witness的会话优先恢复,则也没法故障切换,由于已然不肯定mirror是否拥有所有principal的数据,此时即使principal处于运行状态,也没法提供服务,等待principal与任意节点会话恢复正常,便可恢复读写服务;

 

【2】mirror 与 全部节点会话中断

不会触发故障切换,principal切入公开运行模式(异步),即不会再向mirror发送事务日志,也再也不须要等待mirror的响应,直到mirror从新恢复会话。

 

【3】witness 与 全部节点会话中断

 

不会触发故障切换,principal继续提供读写服务,与mirror数据继续同步,镜像集群丧失自动故障转移能力,退化为不带故障转移的高安全模式;若是三方会话同时链接中断,则principal没法提供服务,直到principal与任意节点通讯恢复正常。

 

 

1.三、镜像集群监控概述

 

镜像集群的监控能够经过SQL Server Management stdio启动镜像监视器,或者系统内置的存储过程来实现,监控的主要指标包括:

 

(1)未发送日志:principal上未发送的日志超过指定的阈值,会在principal上生成一个警告,在高性能模式下,强制服务时能够做为评估principal上事务丢失数量的依据,一样也适用于在高安全模式切换成异步模式状态下(mirror失去链接)

 

(2)未还原日志:重作队列中的未被应用的事务日志数量(KB),超过阈值,会在mirror上生成一个警告,该值能够做为评估故障转移时间的主要因素。

 

(3)最先未被发送的事务:principal发送队列中,最先未被发送的事务的至今的时间,单位时分钟,超过阈值,会在principal上生成警告,与未发送日志量一块儿,从时间维度,衡量高性能模式下和高安全异步模式下,数据丢失数量;

 

(4)镜像提交开销:高安全模式下,principal上事务从提交到等到mirror响应的时间开销的平均值,若是超过阈值,则在principal上生成一个警告,在同步模式下,该值能够i衡量同步开销;

 

附录2:镜像相关信息查阅

2.一、查看master中的证书

    USE master;

SELECT * FROM sys.certificates;

 

2.二、查看镜像端点状态(联机丛书视图参考

    (1)数据库镜像端点

SELECT name, role_desc, state_desc, connection_auth_desc, encryption_algorithm_desc

FROM sys.database_mirroring_endpoints;

 

2)查看全部端点

select * from sys.endpoints

 

修改状态:

    ALTER ENDPOINT Endpoint_Mirroring

STATE = STARTED

AS TCP (LISTENER_PORT = <port_number>)

FOR database_mirroring (ROLE = ALL);

GO

 

 

2.三、查看端点链接权限

SELECT 'Metadata Check';

SELECT EP.name, SP.STATE,

CONVERT(nvarchar(38), suser_name(SP.grantor_principal_id))

AS GRANTOR,

SP.TYPE AS PERMISSION,

CONVERT(nvarchar(46),suser_name(SP.grantee_principal_id))

AS GRANTEE

FROM sys.server_permissions SP , sys.endpoints EP

WHERE SP.major_id = EP.endpoint_id

ORDER BY Permission,grantor, grantee;

GO

 

2.四、常见删除语句

查看与修改:
更多查阅参考:联机丛书--镜像

删除:
【1】. 删除某终端点(终端点不带引号) drop endpoint <endpoint_name>
【2】. 删除证书 在master | Security | Certificates (drop master key...) 
【3】. 删除用户 在master | User
【4】. 而后能够删除登陆名 drop login <login_name>
【5】. 修改master key : alter master key drop encryption by service master key
【6】. 删除master key : drop master key
【7】. 删除镜像的命令: alter databse <dbname> set partner off 

 

2.五、更多查阅

参考:如何使用T-SQL查看镜像状态

 

 

 

附录3:加入见证服务器,实现自动故障转移(基于证书)

 

主服务器:SQLSVR3, 192.168.1.3

加入见证服务器

 

--USE master;

--DROP MASTER KEY

 

--一、建立 master 数据库主密钥

Use master;

 

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '23987hxJ#KL95234nl0zBe';

 

GO

------------

USE master;

---二、而后对服务器实例建立一个用于其数据库镜像出站链接的加密证书。

--drop CERTIFICATE SQLSVR3_cert

CREATE CERTIFICATE SQLSVR3_cert

WITH SUBJECT = 'SQLSVR3 certificate for database mirroring',

start_date='2019-03-01',expiry_date='2030-01-01';

 

GO

 

--三、使用主体服务器实例的证书 SQLSVR3_cert 为主体服务器 SQLSVR3 建立端点。

CREATE ENDPOINT [默认的镜像端点]

STATE = STARTED

AS TCP (

LISTENER_PORT=5022

, LISTENER_IP = ALL

)

 

FOR DATABASE_MIRRORING (

AUTHENTICATION = CERTIFICATE SQLSVR3_cert

, ENCRYPTION = REQUIRED ALGORITHM AES

, ROLE = ALL

);

 

GO

 

---四、备份见证服务器 SQLSVR3 的加密证书。请确保此证书保存在安全可靠的存储介质上。

 

BACKUP CERTIFICATE SQLSVR3_cert TO FILE = 'D:\temp_bak\SQLSVR3.cer';

 

GO

 

 

--五、建立登陆名,在见证服务器实例的 master 数据库中为主体、镜像服务器分别建立1个登陆名

 

USE master;

 

CREATE LOGIN SQLSVR2_login

WITH PASSWORD = 'Sample@#';

GO

 

CREATE LOGIN SQLSVR1_login

WITH PASSWORD = 'Sample@#';

GO

 

--六、为新建立的2登陆名分别建立一个用户

 

USE master;

 

CREATE USER SQLSVR2_user FOR LOGIN SQLSVR2_login;

GO

 

CREATE USER SQLSVR1_user FOR LOGIN SQLSVR1_login;

GO

 

 

--七、将用户与镜像服务器的证书相关联

USE master;

 

CREATE CERTIFICATE SQLSVR2_cert

AUTHORIZATION SQLSVR2_user

FROM FILE = 'D:\temp_bak\SQLSVR2.cer'

GO

 

CREATE CERTIFICATE SQLSVR1_cert

AUTHORIZATION SQLSVR1_user

FROM FILE = 'D:\temp_bak\SQLSVR1.cer'

GO

 

--八、授予其各自的登陆名对数据库镜像端点的 CONNECT 权限。

USE master;

 

GRANT connect on endpoint::[默认的镜像端点] TO [SQLSVR2_login];

GO

 

GRANT connect on endpoint::[默认的镜像端点] TO [SQLSVR1_login];

GO

 

 

--九、而后在主、从库上都建立登陆名、用户、绑定证书、受权端点(已经复制见证服务器的SQLSVR3.cer证书过去)

USE master;

 

CREATE LOGIN SQLSVR3_login

WITH PASSWORD = 'Sample@#';

GO

 

CREATE USER SQLSVR3_user FOR LOGIN SQLSVR3_login;

GO

 

CREATE CERTIFICATE SQLSVR3_cert

AUTHORIZATION SQLSVR3_user

FROM FILE = 'D:\temp_bak\SQLSVR3.cer'

GO

 

GRANT connect on endpoint::[默认的镜像端点] TO [SQLSVR3_login];

GO

 

 

 

 

 

--十、在主从库上进行与见证服务器链接

ALTER DATABASE AdventureWorks2012 SET WITNESS = 'TCP://192.168.214.13:5022'

 

-- 验证结果

 

 

 

复制代码

 

 

这里的IP尾数,11为SQLSVR1,12为SQLSVR2,13为见证服务器

而后关掉主库11的引擎服务,查看从库是否实现故障转移~

 

成功~

 

 

 

附录4:基于域帐户的镜像搭建

4.一、操做步骤

主服务器:SQLSVR1

从服务器:SQLSVR1

【1】检查:网络,实例端口,镜像端口(5022),版本信息一致性

【1】检查:网络,实例端口,镜像端口(5022),版本信息一致性

【2】初始化:完整模式下,备份主库

【2】初始化:以norecovery的方式还原从主库获取的完整日志链备份

【3】登陆名:能够手动构建域帐户做为镜像登陆名也能够在主数据库镜像配置向导中输入一个不存在的,则sql server会自动建立该登陆名,并给与端点connect权限与数据库的public权限;

 

【4】配置:使用配置数据库安全向导,配置主从与见证,端点与登陆名

 

【5】核验:

  1. 查看登陆名(若是是sql server自动建立的)
  2. 查看端点是否建立成功
  3. 查看数据库状态,是否出现同步字样
 

 

4.二、操做实践

【1】 检查:略

  1. 初始化:略
  2. 登陆名:略
  3. 配置:

(4.1)右击数据库-》属性/右击数据库-》任务-》镜像

(4.2)点击上图中的配置安全性,直接下一步

(4.3)选择是否配置见证服务器,这里暂时先不配置

(4.4)主服务器实例与端口配置

配置向导默认使用 5022 端口进行侦听。若是主体服务器已经手动建立了端点,配置向导将选取这个端点。

(4.5)镜像服务器实例与端口配置

在"镜像服务器实例"页,单击"链接"按钮,链接到镜像服务器实例。在链接到镜像服务器时,请注意使用有权限的登陆账户,该登陆账户必须具备在镜像服务器建立端点和登陆名的权限。配置向导能够默认为其分配侦听器端口。若是镜像服务器已经手动建立了端点,配置向导将选取这个端点。

(4.6)服务账户与端点受权

分别为主体和镜像指定一个域账户。配置向导将为这些账户建立登陆名,并为其授予对端点的 CONNECT 权限。这个登陆名只须要 public 固定服务器角色便可

点击下一步

点击完成

(4.7)开始镜像

完成"配置安全性"过程后,配置向导自动询问是否当即开始镜像。若要当即开始镜像,则单击"开始镜像"。

若是单击"不开始镜像",将返回到数据库镜像配置的主界面。能够在配置界面上单击"开始镜像"。

 

  1. 核验

(5.1)登陆名

配置向导若是没有检查到指定的登陆名,则将自动为 Windows 账户建立登陆名。

(5.2)端点

确认配置向导是否成功建立了端点。

(5.3)主体数据库和辅助数据库的状态

配置成功后,主体数据库的状态应为"主体,已同步",镜像数据库的状态应为"镜像,已同步/正在还原..."。

 

 

 

参考文献

基本故障问题排除请参考:联机丛书—镜像故障排除

证书方式配置与演示参考:联机丛书---使用证书设置数据库镜像

暂停、恢复、删除参考 :联机丛书---暂停、恢复、删除数据库镜像

监事数据库镜像参考     :联机丛书---监视数据库镜像

设置数据库镜像:https://docs.microsoft.com/zh-cn/previous-versions/sql/sql-server-2008-r2/ms190941(v%3dsql.105)

相关信息参考自:http://www.mssqlmct.cn/dba/?post=51

相关文章
相关标签/搜索