Skip to content

DM 故障排除工具

命令行工具

1. dmserver

dmserver是DM数据库的核心服务进程,同时也是一个重要的故障排除工具。通过不同的启动参数,可以实现不同的故障排除功能。

shell
# 查看版本信息
dmserver -V

# 查看帮助信息
dmserver -h

# 以调试模式启动
# 调试模式下会输出更详细的日志信息,便于故障排查
dmserver /dm/data/DAMENG/dm.ini debug

# 以mount模式启动
# mount模式下数据库只加载控制文件,不打开数据文件,便于维护操作
dmserver /dm/data/DAMENG/dm.ini mount

2. dmctl

dmctl是DM数据库的命令行控制工具,用于管理和监控数据库实例。

shell
# 查看实例状态
dmctl status /dm/data/DAMENG/dm.ini

# 停止实例
dmctl stop /dm/data/DAMENG/dm.ini

# 强制停止实例
dmctl stop /dm/data/DAMENG/dm.ini force

# 注册服务
dmctl register DmServiceDMSERVER /dm/data/DAMENG/dm.ini

# 注销服务
dmctl unregister DmServiceDMSERVER

3. dmrman

dmrman是DM数据库的备份恢复管理工具,同时也提供了一些故障排除功能。

shell
# 检查备份集完整性
dmrman CTLSTMT="CHECK BACKUPSET '/dm/backup/full_backup_20230101'";

# 检查数据库完整性
dmrman CTLSTMT="CHECK DATABASE '/dm/data/DAMENG/dm.ini'";

# 修复数据库
dmrman CTLSTMT="REPAIR DATABASE '/dm/data/DAMENG/dm.ini'";

4. dmrachk

dmrachk是DM数据库的RAID检查工具,用于检查和修复RAID相关问题。

shell
# 检查RAID状态
dmrachk /dm/data/DAMENG/raid.conf

# 修复RAID问题
dmrachk /dm/data/DAMENG/raid.conf repair

5. dmservice.sh

dmservice.sh是DM数据库的服务管理脚本,用于管理数据库服务。

shell
# 启动服务
dmservice.sh start DmServiceDMSERVER

# 停止服务
dmservice.sh stop DmServiceDMSERVER

# 重启服务
dmservice.sh restart DmServiceDMSERVER

# 查看服务状态
dmservice.sh status DmServiceDMSERVER

图形化工具

1. DM管理工具

DM管理工具是DM数据库的主要图形化管理工具,提供了全面的数据库管理和故障排除功能。

主要功能

  • 数据库实例管理
  • 会话管理
  • 性能监控
  • SQL执行计划分析
  • 日志查看和分析
  • 备份恢复管理
  • 用户和权限管理

2. DM性能监控工具

DM性能监控工具专门用于监控数据库的性能指标,帮助管理员及时发现和解决性能问题。

主要功能

  • 实时监控系统资源使用情况
  • 监控SQL执行情况
  • 监控会话状态
  • 生成性能报告
  • 设置性能告警

3. DM日志分析工具

DM日志分析工具用于分析数据库日志,帮助管理员定位和解决问题。

主要功能

  • 查看和分析重做日志
  • 查看和分析归档日志
  • 查看和分析错误日志
  • 查看和分析审计日志
  • 日志搜索和过滤

系统视图和动态性能视图

1. 实例状态视图

sql
-- 查看实例状态
SELECT * FROM V$INSTANCE;

-- 查看数据库状态
SELECT * FROM V$DATABASE;

-- 查看系统基本信息
SELECT * FROM V$SYSTEMINFO;

2. 性能监控视图

sql
-- 查看系统负载
SELECT * FROM V$SYSLOAD;

-- 查看CPU使用率
SELECT * FROM V$CPU_USAGE;

-- 查看内存使用情况
SELECT * FROM V$MEMORY;

-- 查看磁盘I/O情况
SELECT * FROM V$DISK_IO;

-- 查看等待事件
SELECT * FROM V$SESSION_WAIT;

3. 会话和SQL视图

sql
-- 查看所有会话
SELECT * FROM V$SESSION;

-- 查看活跃会话
SELECT * FROM V$SESSION WHERE STATE = 'ACTIVE';

-- 查看SQL执行历史
SELECT * FROM V$SQL_HISTORY;

-- 查看慢SQL
SELECT * FROM V$LONG_EXEC_SQL;

-- 查看SQL统计信息
SELECT * FROM V$SQL_STAT;

4. 日志视图

sql
-- 查看重做日志信息
SELECT * FROM V$LOG;

-- 查看重做日志文件
SELECT * FROM V$LOGFILE;

-- 查看归档日志信息
SELECT * FROM V$ARCHIVED_LOG;

-- 查看日志归档状态
SELECT * FROM V$ARCH_STATUS;

故障排除脚本

1. 数据库状态检查脚本

sql
-- 数据库状态检查脚本
SET LINESIZE 200;
SET PAGESIZE 100;

PROMPT ===========================
PROMPT 数据库基本状态检查
PROMPT ===========================

SELECT INSTANCE_NAME, STATUS$, START_TIME FROM V$INSTANCE;
SELECT NAME, CREATE_TIME, ARCH_MODE FROM V$DATABASE;

PROMPT ===========================
PROMPT 系统负载检查
PROMPT ===========================

SELECT * FROM V$SYSLOAD;

PROMPT ===========================
PROMPT 活跃会话检查
PROMPT ===========================

SELECT SID, USERNAME, STATE, EVENT, SQL_TEXT
FROM V$SESSION
WHERE STATE = 'ACTIVE';

PROMPT ===========================
PROMPT 慢SQL检查
PROMPT ===========================

SELECT * FROM V$LONG_EXEC_SQL;

PROMPT ===========================
PROMPT 表空间使用情况检查
PROMPT ===========================

SELECT T.NAME AS TABLESPACE_NAME,
       ROUND(T.TOTAL_SIZE * P.PAGE_SIZE / 1024 / 1024, 2) AS TOTAL_MB,
       ROUND((T.TOTAL_SIZE - T.FREE_SIZE) * P.PAGE_SIZE / 1024 / 1024, 2) AS USED_MB,
       ROUND(T.FREE_SIZE * P.PAGE_SIZE / 1024 / 1024, 2) AS FREE_MB,
       ROUND((T.TOTAL_SIZE - T.FREE_SIZE) * 100 / T.TOTAL_SIZE, 2) AS USED_PERCENT
FROM V$TABLESPACE T, V$DM_INI P
WHERE P.PARA_NAME = 'PAGE_SIZE';

2. 性能问题诊断脚本

sql
-- 性能问题诊断脚本
SET LINESIZE 200;
SET PAGESIZE 100;

PROMPT ===========================
PROMPT 性能问题诊断报告
PROMPT ===========================

PROMPT ===========================
PROMPT CPU使用率
PROMPT ===========================

SELECT * FROM V$CPU_USAGE ORDER BY USED_TIME DESC;

PROMPT ===========================
PROMPT 内存使用情况
PROMPT ===========================

SELECT * FROM V$MEMORY;

PROMPT ===========================
PROMPT 磁盘I/O统计
PROMPT ===========================

SELECT * FROM V$DISK_IO ORDER BY TOTAL_IO_TIME DESC;

PROMPT ===========================
PROMPT 等待事件统计
PROMPT ===========================

SELECT EVENT, COUNT(*) AS WAIT_COUNT, SUM(WAIT_TIME) AS TOTAL_WAIT_TIME
FROM V$SESSION_WAIT
GROUP BY EVENT
ORDER BY TOTAL_WAIT_TIME DESC;

PROMPT ===========================
PROMPT 最消耗资源的SQL
PROMPT ===========================

SELECT SQL_TEXT, EXECUTIONS, ELAPSED_TIME, CPU_TIME, DISK_READS
FROM V$SQL_STAT
ORDER BY ELAPSED_TIME DESC
FETCH FIRST 10 ROWS ONLY;

日志文件

1. 错误日志

错误日志是故障排除的重要依据,记录了数据库运行过程中发生的错误和警告信息。

默认路径/dm/data/DAMENG/log/dm_实例名.err

主要内容

  • 数据库启动和关闭信息
  • 错误和警告信息
  • 重要操作记录
  • 系统资源使用情况

2. 跟踪日志

跟踪日志记录了数据库的详细运行信息,用于深入诊断问题。

默认路径/dm/data/DAMENG/log/dm_实例名.trc

主要内容

  • SQL语句执行过程
  • 内部函数调用
  • 锁等待情况
  • 性能统计信息

3. 审计日志

审计日志记录了用户的操作行为,用于安全审计和故障排查。

默认路径/dm/data/DAMENG/audit/

主要内容

  • 用户登录和注销信息
  • 权限操作记录
  • 数据操作记录
  • 系统配置变更记录

故障排除工具使用最佳实践

1. 建立完善的监控体系

建立完善的数据库监控体系,包括实时监控、定期巡检和告警机制,及时发现和解决问题。

2. 熟悉各种故障排除工具

熟悉DM数据库提供的各种故障排除工具,了解它们的功能和使用方法,以便在需要时能够快速使用。

3. 结合多种工具进行故障排查

在进行故障排查时,结合使用多种工具,如命令行工具、图形化工具、系统视图等,全面收集信息,提高故障排查效率。

4. 定期分析日志文件

定期分析数据库日志文件,及时发现潜在问题,防患于未然。

5. 建立故障排查流程

建立标准化的故障排查流程,明确故障排查的步骤和方法,提高故障排查的规范性和效率。

6. 记录故障排查过程

详细记录故障排查过程,包括问题现象、排查步骤、解决方案等,建立故障案例库,便于后续参考。

常见故障排查场景

1. 数据库无法启动

排查步骤

  1. 检查错误日志,查看具体错误信息
  2. 检查配置文件是否正确
  3. 检查数据文件和日志文件是否完整
  4. 使用mount模式启动数据库,检查数据库状态
  5. 根据具体错误信息进行修复

2. 数据库性能下降

排查步骤

  1. 使用性能监控工具查看系统资源使用情况
  2. 查看活跃会话和等待事件
  3. 分析慢SQL和消耗资源较多的SQL
  4. 检查数据库配置参数
  5. 根据分析结果进行优化

3. 会话阻塞

排查步骤

  1. 查看会话等待事件,识别阻塞会话
  2. 查看锁信息,确定阻塞源
  3. 分析阻塞原因
  4. 采取相应措施,如终止阻塞会话、优化SQL等

4. 数据损坏

排查步骤

  1. 检查错误日志,查看数据损坏信息
  2. 使用dmrman工具检查数据库完整性
  3. 根据损坏程度采取相应的修复措施
  4. 恢复数据(如果需要)

版本差异

版本故障排除工具差异
DM 8.1.1.41 及以上支持基本的故障排除工具和视图
DM 8.1.1.133 及以上增强了性能监控和日志分析功能
DM 8.1.2.126 及以上支持更多的系统视图和动态性能视图,提供更完善的故障排除功能

常见问题(FAQ)

Q1: 如何查看DM数据库的错误日志?

A1: DM数据库的错误日志默认存放在/dm/data/实例名/log/目录下,文件名格式为dm_实例名.err。可以使用文本编辑器直接查看,也可以通过DM管理工具的日志查看功能查看。

Q2: 如何定位慢SQL?

A2: 可以通过以下方法定位慢SQL:

  • 使用V$LONG_EXEC_SQL视图查看慢SQL
  • 使用DM性能监控工具的慢SQL监控功能
  • 分析SQL执行历史和统计信息
  • 开启SQL跟踪,详细分析SQL执行过程

Q3: 如何诊断数据库性能问题?

A3: 诊断数据库性能问题的步骤包括:

  1. 查看系统资源使用情况(CPU、内存、磁盘I/O)
  2. 查看等待事件,识别瓶颈
  3. 分析SQL执行情况,找出消耗资源较多的SQL
  4. 检查数据库配置参数
  5. 检查索引使用情况
  6. 根据分析结果进行优化

Q4: 如何查看会话阻塞情况?

A4: 可以通过以下方法查看会话阻塞情况:

sql
-- 查看会话等待事件
SELECT * FROM V$SESSION_WAIT;

-- 查看锁信息
SELECT * FROM V$LOCK;

-- 查看阻塞关系
SELECT L1.SID AS BLOCKER_SID, L2.SID AS WAITER_SID, L1.TYPE, L1.ID1, L1.ID2
FROM V$LOCK L1, V$LOCK L2
WHERE L1.BLOCK = 1 AND L2.REQUEST > 0 AND L1.TYPE = L2.TYPE AND L1.ID1 = L2.ID1 AND L1.ID2 = L2.ID2;

Q5: 数据库无法启动时,如何排查问题?

A5: 数据库无法启动时,可以按照以下步骤排查:

  1. 检查错误日志,查看具体错误信息
  2. 检查配置文件(dm.ini)是否正确
  3. 检查数据文件和日志文件是否存在且完整
  4. 尝试以mount模式启动数据库
  5. 根据错误信息采取相应的修复措施,如修复数据文件、恢复备份等

Q6: 如何使用dmrman工具检查和修复数据库?

A6: 可以使用以下命令检查和修复数据库:

shell
# 检查数据库完整性
dmrman CTLSTMT="CHECK DATABASE '/dm/data/DAMENG/dm.ini'";

# 修复数据库
dmrman CTLSTMT="REPAIR DATABASE '/dm/data/DAMENG/dm.ini'";

# 检查备份集完整性
dmrman CTLSTMT="CHECK BACKUPSET '/dm/backup/full_backup_20230101'";