综合Database Mirroring Witness


If you want to replace the Witness in a SQL Server database mirroring session using T-SQL, you can remove the existing Witness first by running this code from either database mirroring partner:

ALTER DATABASE [Database_Name] SET WITNESS OFF

Before you set a mirroring Witness, create an endpoint for database mirroring on the witness server instance, andgrant connect permissions on the witness mirroring endpoint

When a mirroring endpoint is created, only members of the sysadmin role and the endpoint owner have connect permissions to the endpoint.

To grant CONNECT on a previously created Mirroring Endpoint in SQL Server run following query:

USE master;
GO
GRANT CONNECT on ENDPOINT::Mirroring_Endpoint_Name TO [domain_name\user_name];
GO

To grant VIEW DEFINITION on a previously created Mirroring Endpoint in SQL Server run following query:

USE master;
GO
GRANT VIEW DEFINITION on ENDPOINT::Mirroring_Endpoint_Name TO [domain_name\user_name];
GO

To list logins that have been granted permissions on SQL Server Mirroring Endpoint, run following query:

SELECT e.name as mirror_endpoint_name, s.name AS login_name
, p.permission_name, p.state_desc as permission_state, e.state_desc endpoint_state
FROM sys.server_permissions p
INNER JOIN sys.endpoints e ON p.major_id = e.endpoint_id
INNER JOIN sys.server_principals s ON p.grantee_principal_id = s.principal_id
WHERE p.class_desc = 'ENDPOINT' AND e.type_desc = 'DATABASE_MIRRORING'

to login account of partner instances. On each of the partner server instances grant connect permissions on mirroring endpoint to login account of witness instance. On the principal server, run this code to set the new Witness (in this example database name is AdventureWorks, the Witness address is WTNSRVR, the witness database mirroring endpoint is 5024):

ALTER DATABASE AdventureWorks
SET WITNESS = 'TCP://WTNSRVR:5024'
GO


镜像数据库是SQL Server高可用性方案的一种。配置比较简单,但是有多种模式。如果镜像数据库出现异常,在不同模式下的表现形式也是各异的。这里,我们演练在不同模式下,服务器出现异常后,可能的效果,这样能帮助我们选择合适的模式,以及了解在对数据库镜像做维护期间,需要注意的地方。

 

数据库镜像的模式

 

数据库镜像主要有这么几种模式:

·        High Performance模式(也就是异步模式)

数据库在Principle的事务,不需要得到Mirror的确认,可以直接完成。Principle数据库性能会比较好。但是MirrorPrinciple之间事务传递可能延迟。

·        High Safety 模式(也就是同步模式)没有 witness服务器

数据库在Principle的事务,需要马上得到mirror的确认,才能完成。这种情况下,MirrorPrinciple的数据是同步的。但是因为所有的事务需要mirror的确认,所以性能可能会有所影响。

·        High Satefy模式(也就是同步模式)有 witness服务器

如果带有witness,那么一旦Principle数据库有异常,无法连通,则在witness服务器的见证下,会做自动切换。镜像数据库会变成主数据库,以继续提供服务。

 

 

High Performance模式下,出现异常

 

 

·        MIRROR数据库有问题,这时候PRINCIPLE数据库会处于 (Principle, Disconnected)状态。在这种情况下,Principle数据库依旧能正常服务。当Mirror数据库恢复正常后,数据会自动进行同步,同步后,PRINCIPLE服务器会恢复到(Principle, Synchronized) 正常状态。这种情况虽然不会对服务造成问题,但是我们应该尽快恢复Mirror数据库,否则,在Principle端,日志会累积,变得越来越大。会占满磁盘空间。

·        Principle数据库有问题,无法连接,这时候应用当然不能使用。Mirror数据库处于 (Mirror, Disconnected/In Recovery)状态。这时候我们有两种选择,1. 尽快恢复Principle数据库运营。2.使用Forcing Service方法把Mirror数据库改为主数据库以继续服务。对于Forcing Service方法,我们要注意:

1.       完全停掉旧的PRINCIPLE 数据库,以避免出现两边同时做数据更新。

2.       mirror服务器上,我们用下面命令把mirror数据库改为主数据库:

ALTERDATABASE <Database> SETPARTNER FORCE_SERVICE_ALLOW_DATA_LOSS

3.       使用Forcing Service会导致数据有丢失的可能。如果在原先的主数据库数据还没来得及传送到镜像数据库,那么该部分数据会被丢失。所以使用Forcing Service我们需要权衡。

4.       原先的主数据库起来后,Mirror会处于暂停状态,我们可以恢复镜像,把原来的主数据库为新的镜像数据库  (当然,会导致部分数据永久丢失)。或者把原先的主数据库去除镜像设置,改为普通数据库,查看在原主数据库上写入而在原镜像数据库上没有写入的记录,然后手工倒入到新的主数据库上。用这种办法倒数据,我们需要对应用非常熟悉。

 

High Satefy模式没有witness,出现异常

 

 

 

·        MIRROR数据库有问题,无法连接,PRINCIPLE数据库会处于 (Principle, Disconnected)状态。在这种情况下,PRINCIPLE数据库依旧能正常服务。当MIRROR服务器恢复正常后,数据会自动进行同步,同步后,PRINCIPLE数据库会处于 (Principle, Synchronized) 正常状态。这种情况虽然不会对服务造成问题,但是我们应该尽快恢复MIRROR数据库,否则,在PRINCIPLE数据库上,日志会累积,变得越来越大。最后可能导致磁盘满。

·        PRINCIPLE服务器有问题,这时候应用当然不能使用。MIRROR数据库处于 (Mirror, Disconnected/In Recovery)状态。这时候我们有两种选择,1. 尽快恢复PRINCIPLE数据库。2.使用Forcing Service方法把Mirror数据库改为Principle以继续服务。

 

High Satefy模式但有witness,出现异常

 

 

 

·        MIRROR数据库有问题,PRINCIPLE数据库会处于 (Principle, Disconnected)状态。在这种情况下,PRINCIPLE数据库依旧能正常服务。当MIRROR数据库恢复正常后,数据会自动进行同步,同步后,PRINCIPLE数据库会恢复到(Principle, Synchronized) 正常状态。同样,这种情况虽然不会对服务造成问题,但是我们应该尽快恢复MIRROR服务器,否则,在PRINCIPLE端,日志会累积,变得越来越大。

·        PRINCIPLE数据库服务器有问题,服务停止,这时候,witnessmirror服务器会组成新的仲裁,mirror数据库转换成Principle.处于(Principle, Disconnected)状态,继续服务。当原先的PRINCIPLE数据库服务器恢复正常时,镜像会自动形成,原先的Principle数据库会变成新的镜像服务器。如果PRINCIPLE数据库服务本身并没有中止,而是处于无法连接状态,这种情况,我们下面会进一步解释。

·        WITNESS服务器有问题,这时候,没有影响,PRINCIPLE数据库还是处于(Principle, Synchronized)状态。当然,这时候系统处于有风险状态,万一Principle数据库再有危险,无法连接,整个镜像无法自动提供服务。

·        WITNESS服务器和MIRROR数据库有问题。跟Principle数据库处于断网状态。

o  如果MIRRORWITNESS之间,能够互联,这时候MIRRORWITNESS会组成新的仲裁,以继续提供服务。为避免两个数据库同时提供服务,原先的Principle的数据库一旦无法同时连接到WITNESS服务器和MIRROR服务器,它会把自己设为暂停状态。无法打开该数据库,这样以避免两份数据库同时提供服务的情况,导致两边数据不一致。

o  如果WITNESSMIRROR服务器之间也不能互联,这时候,整个镜像会停止工作。

·        WITNESS服务器和PRINCIPLE服务器有问题。跟Mirror数据库处于断网状态。

o  如果PRINCIPLEWITNESS之间,能够互联,则PRINCIPLE处于(Principle, Disconnected)状态,但数据库继续提供服务。

o  如果PrincipleWitness之间,不能互联,则整个镜像会停止工作。

·        PRINCIPLE服务器和Mirror服务器有问题。跟witness服务器处于断网状态。

o  如果PRINCIPLEMIRROR之间,能够互联,则PRINCIPLE处于(Principle, Disconnected)状态,但数据库继续提供服务。

o  如果PrincipleMIRROR之间,不能互联,则整个镜像会停止工作。

 

 

小结

 

在有witness服务器的情况下,数据库要能提供服务,必须要求三方中的至少两方能够互联。

 

我们要么不用Witness服务器,一旦用witness服务器,则这台witness服务器很重要。因为如果witnessmirror数据库同时连不上,则会导致Principle数据库停止工作。

 

Witness服务器应该跟Principlemirror放在不同的网段中。如果一定要放在一起,那么宁可跟Principle放在一起,也不要跟mirror服务器放在一起。

 

在做维护的时候,如果有witness服务器,建议先把WITNESS去掉。不然有可能会导致我们所不期望的切换。

 

在做维护的时候且没有witness,则镜像数据库可以在High Satefy模式,也可以在High Performance模式。从风险角度来看,这两个模式差别不大。当然,如果可能,最好切换到High Performance模式做维护。

CREATE ENDPOINT DbMirroringEP

AS TCP (LISTENER_PORT = 5024)

FOR DATABASE_MIRRORING (ROLE = WITNESS, ENCRYPTION = SUPPORTED);

GO

ALTER ENDPOINT DbMirroringEP STATE = STARTED

GO
SELECT * FROM sys.database_mirroring_endpoints


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值