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'";