SQL Server 镜像数据库切换及同步状态变化

一  主从(Mirror)正常情况故障转移

正常情况下都是在主Server上执行的,此时主Server上DB仍然可以正常访问。

1.1 通过图形界面转移

(主Server DB上执行,不是MirrorDB

Step 1 选择需要故障转移的数据库,进入的镜像窗口

Step 2 选中【故障转移】

Step 3 点击 【是】

 

 Step 4 检查OK

 

1.2 通过SQL命令转移

 在master 数据库,下执行以下命令

Alter database Test_Mirror_0519 Set Partner failover 

注:Test_Mirror_0519为数据库名称

 

 二 主数据库不能连接的时候

测试验证环境为,关闭了主服务器中的SQL Server 服务,在副本上执行以下命令:

Alter database Test_Mirror_0519 SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS

注:只有在主副本坏掉了才可以。但不能手动关闭主副本的PARTNER 关系,否则,无法执行Mirror命令了。

 测试时,我们是关闭主Server 的SQL Server 服务,关闭后,Mirror 服务器上Mirror库的状态如下:

 然后再强制执行上述切换命令,此时数据库已经是可读写了

 但是,当我们重启原主Server上的SQL Server 服务后,切换后的Mirror镜像的同步状态变成了  挂起  状态

 注意:此时数据库仍是可读写,此时的挂起状态,是指的镜像同步关系

 

查看主Server上数据库在切换前后状态的变化,关闭SQL Server 服务前

切换后,重启SQL Server 服务

 

为了消除 挂起 这两个字,可以在主Server或者Mirror Server 执行以下命令:

Alter database Test_Mirror_0519 Set Partner off

例如 在 Mirror上执行后,切换后的新主Server 、原Mirror DB Server,其状态如下:

原主Server

 

三.切换时,注意镜像操作模式

操作模式 事务安全 传输模式 见证服务器 故障切换类型
高可用 Full 同步 自动或手动切换
高保护 Full 同步 没有 只能手动切换
高性能 Off 异步 无需配置 只能强制切换

 

在以下高性能模式下,不能正常FailOver

 

 告警提示如下:

复制代码
TITLE: Database Properties
------------------------------

Manual failover is possible only when the operating mode is High safety (synchronous).  To failover manually, change the operating mode and then click OK. You can optionally change the operating mode back to High performance (asynchronous) at the new principal server instance when failover is complete.

------------------------------
BUTTONS:

OK
------------------------------
复制代码

 

 解决方案

由高性能模式调整为安全模式,执行代码如下:

USE [master]
GO
ALTER DATABASE [Your_DB_Name] SET SAFETY FULL
GO

 调整后如下:

 正常切换后,MirrorDB变成主DB;主DB变成Mirror数据库。

 

四.当主从断掉的时候,Mirror DB不能直接删除

 

 此时可以执行 

Alter database 数据库名字 Set Partner off

执行后数据库状态变为 restoring ,此时可以删除.

 

五.数据库镜像 暂停 与 恢复

暂停数据库镜像,脚本如下:

ALTER DATABASE database_name SET PARTNER SUSPEND

成功执行后,主体服务器实例的数据库的状态变成了【主体,挂起】。

恢复数据库镜像 ,脚本如下:

ALTER DATABASE database_name SET PARTNER RESUME

需要注意的是:

(1) 恢复数据库镜像,建议使用脚本,不建议使用界面操作。

        界面恢复时,需要 【连接到镜像服务器实例】,容易出现错误:

在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。

.....error:40....错误:53。

(2)执行的命令,要在主体服务器上执行,本地执行。

(3)在主数据库上暂停数据库镜像后,应采取预防措施,以避免填满事务日志。

(4)当主库上的日志总是收缩不掉, 完整备份 后收缩不行,日志备份后 收缩也不行,此时应该查看下镜像的状态,看master-mirror 间 log的 sent 和 restore 是否正常。如果某一个指标数据不动了,

此时,暂停+恢复下镜像,然后再 备份 收缩 就好了。

 

有时候,镜像显示挂起,可以尝试执行以下脚本恢复:

ALTER ENDPOINT ENDPOINT_MIRRORING STATE = STARTED
alter database HZCCReportDB set partner resume

 

posted @   东山絮柳仔  阅读(2259)  评论(0编辑  收藏  举报
编辑推荐:
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· PostgreSQL 和 SQL Server 在统计信息维护中的关键差异
· C++代码改造为UTF-8编码问题的总结
阅读排行:
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 清华大学推出第四讲使用 DeepSeek + DeepResearch 让科研像聊天一样简单!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
历史上的今天:
2019-01-13 MySQL 基础知识梳理学习(四)----GTID
点击右上角即可分享
微信分享提示