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
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· [.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