深入解析达梦数据库:模式分类、状态管理与实操指南

达梦数据库(DM Database)作为国产数据库的核心代表,其模式与状态机制是保障数据高可用、实现主备同步的关键基础。无论是日常运维中的数据库配置,还是故障场景下的主备切换,都需要深入理解模式与状态的特性及交互逻辑。

一、达梦数据库的三种核心模式

达梦数据库的模式定义了数据库的核心功能边界,尤其是在数据同步(主备、归档)和用户访问权限上的差异。三种模式分别为 Normal 模式Primary 模式Standby 模式,仅能在 MOUNT 状态下切换,且模式间可相互转换。

1.1 Normal 模式:独立运行的默认模式

Normal 模式是数据库初始化后的默认模式,适用于无需主备同步的独立部署场景,也是最灵活的运行模式。

核心特性
  • 访问权限:用户可无限制执行所有操作(增删改查、表结构修改、备份恢复等)。
  • 归档机制:仅生成本地归档日志,不支持实时归档(Realtime)、即时归档(Timely)和异步归档(Async),即不向其他节点发送 REDO 日志。
  • 适用场景:单节点部署的业务系统,无需数据冗余或异地备份的场景。
模式切换命令
-- 需在 MOUNT 状态下执行
ALTER DATABASE NORMAL;

1.2 Primary 模式:主备架构中的主库模式

Primary 模式专为 主备同步(DataWatch) 设计,作为主库节点运行,负责接收业务写入并同步日志到备库。

核心特性
  • 访问权限:用户可正常访问数据库,但存在极少限制(如不支持修改表空间文件名、不支持修改 arch_ini 归档配置参数)。
  • REDO 日志强制生成:对临时表空间以外的所有数据库对象修改,均强制生成 REDO 日志(保障备库可完整重做)。
  • 归档机制:生成本地归档的同时,支持实时、即时、异步三种归档方式,可将 REDO 日志实时发送到备库。
  • 适用场景:主备架构中的主库节点,需对外提供写入服务并保障数据同步到备库。
模式切换命令
-- 需在 MOUNT 状态下执行
ALTER DATABASE PRIMARY;

1.3 Standby 模式:主备架构中的备库模式

Standby 模式作为主备架构的备库节点,主要功能是接收主库的 REDO 日志并重做,保障数据与主库一致,仅提供只读服务。

核心特性
  • 访问权限:仅支持只读操作(查询、备份),不允许写入;可执行临时表的 INSERT/DELETE/UPDATE(临时表修改不生成 REDO 日志,主备临时表数据独立)。
  • 日志处理:接收主库发送的 REDO 日志并自动重做,保持与主库数据一致;仅生成本地归档和异步归档,实时、即时归档强制失效。
  • 功能限制:时间触发器、事件触发器等自动执行功能失效;不支持数据库作业备份(仅支持常规备份)。
  • 适用场景:主备架构中的备库节点,用于读写分离(承担查询压力)或故障切换(主库故障后可切换为新主库)。
模式切换命令
-- 需在 MOUNT 状态下执行
ALTER DATABASE STANDBY;

模式切换的关键注意事项

  1. 切换前提:所有模式切换必须在 MOUNT 状态下执行,Open 或 Suspend 状态无法直接修改模式。
  2. 新初始化数据库:首次启动需以 Open 状态正常启动并退出,后续才能以 MOUNT 状态启动并修改模式。
  3. DMDSC 集群(共享存储集群):修改模式需所有实例处于 MOUNT 状态,且仅需在一个节点执行命令即可同步到所有节点。
  4. 启动状态关联:非 Normal 模式(Primary/Standby)的数据库,启动时会自动进入 MOUNT 状态,需手动切换为 Open 状态后才能对外提供服务。

二、达梦数据库的六种运行状态

达梦数据库的状态描述了数据库当前的服务能力(如是否允许访问、是否允许日志写入),分为 用户可干预状态(Mount、Open、Suspend)和 系统内部状态(Startup、After Redo、Shutdown),状态间切换有明确的规则限制。

2.1 系统内部状态:用户无法主动干预

此类状态由数据库自动管理,用于标识启动、恢复等过程中的中间状态,用户无需手动操作。

状态名称触发场景核心作用
Startup 状态数据库实例刚启动时初始化内存结构、加载配置文件(如 dm.ini),为后续状态切换做准备
After Redo 状态启动过程中联机日志重做完成后、回滚活动事务前;非 Standby 模式执行 OPEN确保数据一致性(重做已提交事务日志),为进入 Open 状态做最终准备
Shutdown 状态数据库实例正常退出时(执行 SHUTDOWN 命令或正常关闭进程)标识实例已停止服务,释放内存、文件句柄等资源

2.2 用户可干预状态:运维核心操作对象

用户可通过 SQL 命令切换这三种状态,分别对应“配置模式”“提供服务”“限制日志写入”三种核心场景。

2.2.1 Mount 状态:配置与维护专用状态

Mount 状态是“中间态”,不对外提供业务访问,但支持模式修改、归档配置、控制文件维护等核心运维操作。

核心特性
  • 访问限制:不能修改数据,不能访问表、视图等业务对象;可查询动态视图(如 v$instance)、执行只读系统过程。
  • 日志与刷盘:不生成 PWR 日志(Page Written Record,记录数据页刷盘信息),但数据页可正常刷盘,检查点正常推进。
  • 状态切换影响:从 Open 切换到 Mount 时,会强制回滚所有未提交的活动事务,但不清理已提交事务、不强制断开用户连接、不刷盘 Buffer 中的脏页。
状态切换命令
-- 从 Open/Suspend 状态切换到 Mount 状态
ALTER DATABASE MOUNT;
实操示例
-- 1. 查看当前状态(Open 状态)
SQL> select status$ from v$instance;
行号     STATUS$
---------- -------
1          OPEN
已用时间: 0.407(毫秒). 执行号:5.-- 2. 切换到 Mount 状态
SQL> alter database mount;
操作已执行
已用时间: 00:00:01.778. 执行号:0.-- 3. 验证状态
SQL> select status$ from v$instance;
行号     STATUS$
---------- -------
1          MOUNT
已用时间: 0.352(毫秒). 执行号:6.
2.2.2 Open 状态:对外提供服务的正常状态

Open 状态是数据库的“业务态”,可对外提供完整的读写服务(Normal 模式下)或只读服务(Standby 模式下),是业务运行的核心状态。

核心特性
  • 访问权限:支持所有符合模式权限的操作(如 Primary 模式可写入,Standby 模式仅只读)。
  • 功能限制:不能执行控制文件维护、归档配置修改、模式切换等操作(需先切换到 Mount 状态)。
  • 特殊注意:若数据库为 Primary/Standby 模式,从 Mount 切换到 Open 时必须加 FORCE 子句(强制打开,保障主备同步正常)。
状态切换命令
-- Normal 模式:直接切换
ALTER DATABASE OPEN;-- Primary/Standby 模式:必须加 FORCE 子句
ALTER DATABASE OPEN FORCE;
实操示例(Primary 模式切换 Open)
-- 1. 查看当前状态(Mount 状态)
SQL> select status$ from v$instance;
行号     STATUS$
---------- -------
1          MOUNT
已用时间: 54.783(毫秒). 执行号:4.-- 2. Primary 模式下切换 Open(加 FORCE)
SQL> alter database open force;
操作已执行
已用时间: 00:00:09.971. 执行号:0.-- 3. 验证状态
SQL> select status$ from v$instance;
行号     STATUS$
---------- -------
1          OPEN
已用时间: 0.407(毫秒). 执行号:5.
2.2.3 Suspend 状态:限制日志写入的临时状态

Suspend 状态是“过渡态”,主要用于主备同步异常时的临时维护,限制 REDO 日志刷盘,避免主备数据不一致。

核心特性
  • 访问权限:可正常查询、修改数据,但执行 COMMIT(触发日志刷盘)或 CREATE TABLE(需写入元数据日志)时会挂起。
  • 状态切换优势:从 Open 切换到 Suspend 时,不回滚活动事务、不断开用户连接,切换效率远高于 Open 到 Mount。
  • 典型场景:备库故障恢复后,重新启用实时归档前;主库实时归档失败时,数据库自动切换为 Suspend 状态,防止多余日志写入导致主备不一致。
状态切换命令
-- 从 Open 状态切换到 Suspend 状态
ALTER DATABASE SUSPEND;-- 从 Suspend 状态恢复到 Open 状态
ALTER DATABASE OPEN;
实操示例(Suspend 状态下的事务行为)
-- Session 1:切换到 Suspend 状态
SQL> alter database suspend;
操作已执行
已用时间: 100.968(毫秒). 执行号:0.
SQL> select status$ from v$instance;
行号     STATUS$
---------- -------
1          SUSPEND-- Session 2:插入数据正常,提交挂起
SQL> insert into test values(1,'a',10000);  -- 插入成功
影响行数 1
已用时间: 0.882(毫秒). 执行号:11.
SQL> commit;  -- 提交挂起,等待状态恢复-- Session 1:恢复到 Open 状态
SQL> alter database open;
操作已执行
已用时间: 0.644(毫秒). 执行号:0.-- Session 2:提交成功
SQL> commit;
操作已执行
已用时间: 00:01:44.580. 执行号:12.

2.3 状态切换的核心规则

达梦数据库的状态切换并非完全自由,存在明确的限制,核心规则如下:

  1. 允许直接切换的组合
    • Open ↔ Mount(相互切换)
    • Open ↔ Suspend(相互切换)
  2. 禁止直接切换的组合
    • Mount 与 Suspend 不能直接切换(需先通过 Open 状态过渡)
  3. 系统内部状态:Startup、After Redo、Shutdown 由数据库自动管理,用户无法主动切换。

此外,可通过参数 ALTER_MODE_STATUS 控制是否允许手工修改模式/状态:

  • ALTER SYSTEM SET ALTER_MODE_STATUS = 1;(默认值,允许手工修改)
  • ALTER SYSTEM SET ALTER_MODE_STATUS = 0;(禁止手工修改,用于高安全场景)

三、模式与状态的协同关系

模式与状态是达梦数据库运维的两大核心维度,二者相互依赖、协同工作,具体体现在以下场景:

运维场景模式选择状态切换流程核心目的
单节点业务部署Normal 模式Startup → After Redo → Open快速对外提供完整读写服务
主备架构主库配置Primary 模式Startup → After Redo → Mount(改模式)→ Open配置主库模式,对外提供写入并同步日志
主备架构备库配置Standby 模式Startup → After Redo → Mount(改模式)→ Open配置备库模式,接收主库日志并提供只读服务
主备归档异常维护Primary 模式Open → Suspend(维护)→ Open临时限制日志刷盘,避免主备数据不一致
修改归档配置任意模式Open → Mount(改配置)→ Open保障配置修改时数据一致性

四、总结

达梦数据库的模式与状态机制是其高可用架构的基础,理解二者的特性与交互逻辑,是运维人员保障业务稳定运行的关键:

  • 模式决定“数据库能做什么”(如是否支持主备同步、是否允许写入),核心服务于数据冗余与高可用;
  • 状态决定“数据库当前的服务能力”(如是否对外提供访问、是否允许日志刷盘),核心服务于运维操作与故障处理。

在实际运维中,需根据业务场景(单节点/主备)选择合适的模式,结合状态切换完成配置修改、故障恢复等操作,同时严格遵循模式(需 MOUNT 状态)与状态(禁止 Mount↔Suspend 直接切换)的切换规则,确保数据库运行稳定、数据一致。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/diannao/97020.shtml
繁体地址,请注明出处:http://hk.pswp.cn/diannao/97020.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何选择适合自己的PHP微服务框架?

在开始选择之前,我们首先要明白:为什么需要微服务框架?传统的单体应用(Monolithic Application)虽然开发简单,但随着业务复杂度的增加,会变得臃肿且难以维护。而微服务架构通过将应用拆分为一组…

ESP32使用场景及大规模物联网IoT

最近用ESP32搭建了一个网络,想知道搭建的网络拓扑对不对。一、物联网无线通信v.s通讯网络无线通信我第一个好奇的问题就是,物联网用ESP32的话,路由器用什么?物联网也可以组WLAN,通讯网也可以组WLAN。把自己的Tenda AC1200路由器拆…

NSSCTF 4th WP

第一次打比赛AK了,虽然题比较简单没啥好说的,但还是想记录一下 WEB ez_signin 源码: from flask import Flask, request, render_template, jsonify from pymongo import MongoClient import reapp Flask(__name__)client MongoClient…

Paimon——官网阅读:主键表

主键表(Table with PK)PK 是 Primary Key(主键)的缩写。在数据库中,主键是一个或多个列的组合,其值在表中是唯一的,并且不能为 NULL。主键的作用是确保每一行记录的唯一性,便于数据的查找、管理和维护&…

【配置 PyCharm 连接远程服务器进行开发和调试的完整流程】

前提条件: 1.PyCharm Professional(社区版不支持远程解释器) 2.代码在本地目录里面,可以同步上传远程服务器 3.宿主机上安装了conda 环境 操作方法: 1、在本地使用PyCharm打开工程代码; 2、然后Add New_in…

在压力测试中如何确定合适的并发用户数?

确定压力测试中的合适并发用户数 在进行压力测试时,确定合适的并发用户数是评估系统性能的关键步骤。并发用户数是指同时向系统发送请求的用户数量,它直接影响系统的负载水平和性能表现。以下是几种常用的方法和考虑因素,用于确定合适的并发…

微算法科技(NASDAQ:MLGO)突破性FPGA仿真算法技术助力Grover搜索,显著提升量子计算仿真效率

在量子计算迅猛发展的今天,量子算法尤其是在搜索和加密领域的应用,正逐步揭开了其颠覆性潜力。然而,量子计算机的实际实现仍是一项复杂且充满挑战的任务,因此,如何在经典计算平台上高效建模和仿真量子算法成为了当前的…

TencentOS Server 4.4 下创建mysql容器无法正常运行的问题

环境 腾讯的 TencentOS Server 4.4 服务器系统 Linux app 6.6.92-34.1.tl4.x86_64 #1 SMP PREEMPT_DYNAMIC Wed Jun 25 14:33:47 CST 2025 x86_64 x86_64 x86_64 GNU/Linux docker使用的是yum安装的版本 [rootapp ~]# docker version Client:Version: 28.0.1-202…

稀土:从“稀有”到“命脉”的科技核心

稀土,这个听起来有些陌生的词汇,其实早已悄然渗透进我们生活的方方面面。它并非真的“稀有”,而是指17种金属元素的统称,包括镧、铈、钕、铕等。这些元素在地壳中并不稀少,但因其独特的物理和化学性质,使其…

开发手札:UnrealEngine编辑器开发

以前在unity框架中开发了非常多实用且高频使用的编辑器工具,现在准备把目前用得上工具移植到ue4中。下面说明一下ue4开发编辑器工具的流程。1.创建编辑器工具控件2.在控件中创建一个Button和一个EditableText,用于测试3.新建一个继承UEditorUtilityWidge…

EXCEL开发之路(一)公式解析—仙盟创梦IDE

Excel 数据校验:基于自定义格式的深度解析与开发实现引言在数据处理和管理领域,Excel 是一款广泛应用的工具。确保 Excel 中数据的准确性和完整性至关重要,而数据校验是达成这一目标的关键手段。本文将借助特定的代码示例,深入探讨…

Day14——JavaScript 核心知识全解析:变量、类型与操作符深度探秘

接续上文:《前端小白进阶 Day13:JavaScript 基础语法 交互技巧 知识图谱,零基础也能懂》-CSDN博客 点关注不迷路哟。你的点赞、收藏,一键三连,是我持续更新的动力哟!!! 主页:一位…

anaconda本身有一个python环境(base),想用别的环境就是用anaconda命令行往anaconda里创建虚拟环境

差不多是这个意思,但需要稍微澄清一下:Anaconda 可以管理任意版本的 Python你安装了 Anaconda 后,默认有一个 base 环境自带的 Python。如果你想用其他版本,比如 Python 3.9、3.10,可以用 conda create -n py39 python…

毕业项目推荐:28-基于yolov8/yolov5/yolo11的电塔危险物品检测识别系统(Python+卷积神经网络)

文章目录 项目介绍大全(可点击查看,不定时更新中)概要一、整体资源介绍技术要点功能展示:功能1 支持单张图片识别功能2 支持遍历文件夹识别功能3 支持识别视频文件功能4 支持摄像头识别功能5 支持结果文件导出(xls格式…

字库原理 GB2312-80

这篇文章介绍的是 在嵌入式开发中 常常会遇见的 中文字体点阵字库(如汉字库) 的核心编码原理:区位码 偏移计算 内存映射。我们将会介绍 GB2312-80 字库的工作机制。 📘什么是 GB2312-80? GB2312-80 是中国国家标准定…

【Golang】 项目启动方法

Go 项目启动方法 1. 常见启动方式 使用 go run 命令 # 运行主程序文件 go run main.go# 运行多个文件 go run *.go# 运行整个模块(Go 1.11) go run .# 运行指定包 go run github.com/yourusername/yourproject先构建再执行 # 构建可执行文件 go build# 运…

3459. 最长 V 形对角线段的长度

Problem: 3459. 最长 V 形对角线段的长度 文章目录思路解题过程复杂度Code思路 深度优先搜索 记忆数组 解题过程 主函数和先遍历从每一个1开始搜索,并枚举每一个方向进入dfs,dfs先检查是否遍历过,然后枚举下一个可以走的方向,最后…

Unity 串口通信

可以通过计算机管理->设备管理器,查看端口串口通讯,通常是指的通过计算机或其他设备上的串行端口实现数据传输的过程。 定义与特点:串口通讯是按位(bit)发送和接收字节的通信方式,它将数据一位一位地顺序…

ArcGIS JSAPI 高级教程 - 创建渐变色材质的自定义几何体

ArcGIS JSAPI 高级教程 - 创建渐变色材质的自定义几何体核心代码完整代码在线示例工作中遇到一个比较复杂的功能,其中用到渐变色,于是研究了一下,发现虽然 JS API 不直接支持渐变色,但是也可以自定义创建渐变色,通过 M…

不增加 GPU,首 Token 延迟下降 50%|LLM 服务负载均衡的新实践

作者:钰诚 简介 传统的负载均衡算法主要设计用于通用的 Web 服务或微服务架构中,其目标是通过最小化响应时间、最大化吞吐量或保持服务器负载平衡来提高系统的整体效率,常见的负载均衡算法有轮询、随机、最小请求数、一致性哈希等。然而&am…