注册
达梦数据库故障排查常见方法
技术分享/ 文章详情 /

达梦数据库故障排查常见方法

Chen 2025/11/07 782 0 0

一、日志分析:逐类拆解 + 实操技巧

  1. 错误日志(最核心)
    查找路径:先通过 cat dm.ini | grep ERRORLOG_PATH 确认日志存放目录(默认是 $DM_HOME/log),日志文件命名格式为 dm_实例名_日期.log。
    关键排查点:
    启动失败:搜索日志中 “FAILED”“ABORT” 关键字,重点看启动阶段的报错(如 “无法打开配置文件 dm.ini”“数据文件损坏”)。
    运行中崩溃:查看崩溃前的日志记录,是否有 “内存不足”“磁盘 I/O 错误”“断言失败(Assert)” 等信息,这类问题多与硬件或配置有关。
    错误码解读:比如 -2501 是 “用户名或密码错误”,-104 是 “表不存在”,-6002 是 “磁盘空间不足”,可直接用 “达梦错误码 + 编号” 搜索官方文档或知识库。
    实操命令:tail -f 错误日志文件 实时监控日志,grep -E “ERROR|FAILED|断言” 错误日志文件 快速筛选异常信息。
  2. 事务日志(.trn)
    作用:记录事务提交、回滚信息,故障时用于数据恢复和定位事务异常。
    常见场景:数据库启动时提示 “事务日志损坏”“无法找到有效的 checkpoint 记录”。
    排查步骤:
    检查事务日志文件是否存在(默认路径 $DM_DATA/DAMENG/,文件名为 DAMENG01.trn DAMENG02.trn),是否有缺失或大小异常(正常情况下会按配置自动滚动)。
    若日志损坏,可尝试用 dmctlcvt 工具修复(命令:dmctlcvt TYPE=TRN REPAIR=1 SRC=/dm/data/DAMENG/DAMENG01.trn DST=/dm/data/DAMENG/repair.trn),修复后需重新启动数据库。
  3. SQL 日志(慢查询 / 语法错误排查)
    启用方法:修改 dm.ini 配置,LOG_SQL=1(开启 SQL 日志)、LOG_SQL_MIN_EXEC_TIME=1000(仅记录执行时间≥1 秒的 SQL),重启数据库生效。
    分析技巧:
    日志文件中包含 “执行时间”“SQL 语句”“会话 ID”,用 grep -E “EXEC TIME: [0-9]{4,}” SQL日志文件 筛选慢查询。
    语法错误会标注 “SQL 语法错误” 和错误位置(如 “第 3 行第 5 列”),可直接定位问题 SQL。
    二、系统与数据库状态检查:细化操作 + 故障关联
  4. 操作系统层面(先排除环境问题)
    磁盘空间:执行 df -h 查看达梦数据目录($DM_DATA)所在磁盘,剩余空间需≥数据文件总大小的 10%,否则会导致无法写入数据、事务提交失败。
    CPU / 内存:top 命令查看系统负载,达梦数据库进程(dmserver)若 CPU 占比长期 90%+,可能是存在高并发 SQL 或索引缺失;内存占用过高,需检查 dm.ini 中 MEMORY_POOL(内存池大小)配置是否合理。
    磁盘 I/O:iostat -x 1 10 查看磁盘读写速度(% util 接近 100% 表示 I/O 饱和),达梦对磁盘 I/O 敏感,I/O 瓶颈会导致 SQL 执行缓慢、事务阻塞。
    端口 / 防火墙:
    检查达梦默认端口 5236 是否被占用:netstat -anp | grep 5236,若被其他进程占用,需修改 dm.ini 中 PORT_NUM 配置。
    防火墙放行:firewall-cmd --list-ports 查看 5236 端口是否开放,未开放则执行 firewall-cmd --add-port=5236/tcp --permanent 并重启防火墙。
  5. 数据库进程与实例状态
    进程存活检查:
    执行 ps -ef | grep dmserver | grep -v grep,无输出说明进程已终止。
    手动启动:进入达梦二进制目录(DM_HOME/bin),执行 ./dmserver /dm/data/DAMENG/dm.ini(指定实例配置文件),若启动失败,会在控制台直接输出报错(如 “数据文件损坏”“端口被占用”)。 实例健康检查: 用 disql 连接后,执行 select status from v$instance;,返回 “OPEN” 表示实例正常运行,“MOUNT” 表示仅挂载未开放连接,“SHUTDOWN” 表示已关闭。
    表空间状态:执行 select tablespace_name, status from dba_tablespaces;,若状态为 “OFFLINE”,需执行 alter tablespace 表空间名 online; 恢复(多因磁盘空间不足或文件损坏导致)。
  6. 连接与锁冲突排查
    连接失败细分场景:
    提示 “用户名或密码错误”:确认账号密码是否正确,执行 alter user SYSDBA identified by 新密码; 重置密码。
    提示 “网络无法连接”:检查目标服务器 IP 是否可达(ping IP)、端口是否开放(telnet IP 5236)。
    锁冲突(业务卡顿常见原因):
    执行 select * from vlock; 查看锁持有情况,重点关注 LOCK_MODE(锁模式)、WAIT_FOR_LOCK(是否等待锁)。 找到阻塞会话:select a.sess_id, a.sql_text, b.sess_id block_sess from vsession a, v$lock b where a.sess_id = b.sess_id and b.wait_for_lock = 1;,通过 sp_close_session(阻塞会话ID); 关闭阻塞会话。
    三、工具辅助:具体工具用法 + 场景适配
  7. DM Manager(图形化工具,适合新手)
    实例监控:
    左侧导航栏 “实例”→右键 “监控”,查看 “会话监控”(实时会话数、活跃会话)、“SQL 监控”(正在执行的 SQL)、“资源监控”(CPU / 内存 / 磁盘使用率)。
    表空间监控:“存储”→“表空间”,右键 “查看表空间使用率”,若使用率≥90%,需扩展数据文件(右键表空间→“扩展数据文件”)。
    备份恢复检查:
    “备份恢复”→“备份集管理”,查看备份集状态(“有效”“无效”),无效备份集需重新备份,避免故障时无法恢复。
  8. dmctl 工具(命令行,适合无图形化环境)
    连接实例:dmctl connect SYSDBA/SYSDBA@IP:PORT(本地连接可省略 @IP:PORT)。
    核心命令:
    数据库一致性检查:checkdb,若输出 “数据库一致性检查通过” 则正常,否则会提示损坏的表或索引,需用 repair table 表名; 修复。
    查看锁状态:show locks,输出锁持有会话、锁类型(共享锁 / 排他锁),排他锁会阻塞其他会话写操作。
    启动 / 停止实例:startup(启动)、shutdown(正常关闭)、shutdown abort(强制关闭,紧急情况使用)。
  9. DM Performance Monitor(性能故障专用)
    启动方式:$DM_HOME/tool/dmperf(图形化),或通过 DM Manager 中 “性能”→“性能监控” 打开。
    关键监控项:
    慢查询 TOP10:“SQL 性能”→“慢查询统计”,定位耗时最长的 SQL,可通过优化索引、改写 SQL 解决。
    内存瓶颈:“内存监控”→“内存池使用”,若 “已使用” 接近 “总大小”,需调整 dm.ini 中 MEMORY_POOL 等内存配置。
    磁盘 I/O 瓶颈:“存储监控”→“磁盘 I/O”,查看各磁盘读写速度,若 I/O 饱和,可迁移数据文件到高性能磁盘(如 SSD)。
评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服