外观
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 mount2. 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 DmServiceDMSERVER3. 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 repair5. 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. 数据库无法启动
排查步骤:
- 检查错误日志,查看具体错误信息
- 检查配置文件是否正确
- 检查数据文件和日志文件是否完整
- 使用mount模式启动数据库,检查数据库状态
- 根据具体错误信息进行修复
2. 数据库性能下降
排查步骤:
- 使用性能监控工具查看系统资源使用情况
- 查看活跃会话和等待事件
- 分析慢SQL和消耗资源较多的SQL
- 检查数据库配置参数
- 根据分析结果进行优化
3. 会话阻塞
排查步骤:
- 查看会话等待事件,识别阻塞会话
- 查看锁信息,确定阻塞源
- 分析阻塞原因
- 采取相应措施,如终止阻塞会话、优化SQL等
4. 数据损坏
排查步骤:
- 检查错误日志,查看数据损坏信息
- 使用dmrman工具检查数据库完整性
- 根据损坏程度采取相应的修复措施
- 恢复数据(如果需要)
版本差异
| 版本 | 故障排除工具差异 |
|---|---|
| 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: 诊断数据库性能问题的步骤包括:
- 查看系统资源使用情况(CPU、内存、磁盘I/O)
- 查看等待事件,识别瓶颈
- 分析SQL执行情况,找出消耗资源较多的SQL
- 检查数据库配置参数
- 检查索引使用情况
- 根据分析结果进行优化
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: 数据库无法启动时,可以按照以下步骤排查:
- 检查错误日志,查看具体错误信息
- 检查配置文件(dm.ini)是否正确
- 检查数据文件和日志文件是否存在且完整
- 尝试以mount模式启动数据库
- 根据错误信息采取相应的修复措施,如修复数据文件、恢复备份等
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'";