外观
DM 常用监控命令
本文将介绍DM数据库的常用监控命令,按照不同的监控类别进行分类,方便数据库管理员查阅和使用。
系统状态监控
1. 实例状态
sql
-- 查看实例状态
SELECT status$ FROM v$instance;
-- 查看实例详细信息
SELECT * FROM v$instance;
-- 查看数据库版本信息
SELECT * FROM v$version;
-- 查看数据库启动时间
SELECT start_time FROM v$instance;2. 数据库状态
sql
-- 查看数据库状态
SELECT status$ FROM v$database;
-- 查看数据库详细信息
SELECT * FROM v$database;
-- 查看数据库模式
SELECT mode$ FROM v$database;
-- 查看数据库最近恢复时间
SELECT last_recover_time FROM v$database;3. 实例参数
sql
-- 查看所有系统参数
SELECT * FROM v$parameter;
-- 查看指定参数值
SELECT para_name, para_value FROM v$parameter WHERE para_name = 'BUFFER';
-- 查看动态参数
SELECT * FROM v$dynamic_parameter;
-- 查看参数文件信息
SELECT * FROM v$dm_ini;性能监控
1. CPU 监控
sql
-- 查看CPU使用率
SELECT * FROM v$sysstat WHERE name LIKE '%CPU%';
-- 查看会话CPU使用情况
SELECT sess_id, user_name, cpu_usage FROM v$session_stat WHERE cpu_usage > 0;
-- 查看系统负载
SELECT * FROM v$sysload;2. 内存监控
sql
-- 查看内存使用情况
SELECT * FROM v$memory;
-- 查看内存池使用情况
SELECT * FROM v$mem_pool;
-- 查看SGA使用情况
SELECT * FROM v$sga;
-- 查看PGA使用情况
SELECT * FROM v$pga;
-- 查看会话内存使用情况
SELECT sess_id, user_name, mem_usage FROM v$session_stat WHERE mem_usage > 0;3. IO 监控
sql
-- 查看IO统计信息
SELECT * FROM v$io_statistics;
-- 查看数据文件IO情况
SELECT * FROM v$datafile_io;
-- 查看表空间IO情况
SELECT * FROM v$tablespace_io;
-- 查看会话IO使用情况
SELECT sess_id, user_name, io_usage FROM v$session_stat WHERE io_usage > 0;4. 等待事件监控
sql
-- 查看系统等待事件
SELECT * FROM v$system_wait_events;
-- 查看会话等待事件
SELECT * FROM v$session_wait;
-- 查看等待事件历史
SELECT * FROM v$wait_event_history;存储监控
1. 表空间监控
sql
-- 查看所有表空间
SELECT * FROM dba_tablespaces;
-- 查看表空间使用情况
SELECT t.tablespace_name, t.total_size, t.free_size,
(t.total_size - t.free_size) used_size,
ROUND((t.total_size - t.free_size) / t.total_size * 100, 2) used_percent
FROM (
SELECT ts.name tablespace_name,
SUM(df.total_size) total_size,
SUM(df.free_size) free_size
FROM v$tablespace ts, v$datafile df
WHERE ts.id = df.tablespace_id
GROUP BY ts.name
) t;
-- 查看表空间数据文件
SELECT * FROM dba_data_files;2. 数据文件监控
sql
-- 查看所有数据文件
SELECT * FROM v$datafile;
-- 查看数据文件详细信息
SELECT * FROM dba_data_files;
-- 查看临时文件
SELECT * FROM v$tempfile;
-- 查看临时文件详细信息
SELECT * FROM dba_temp_files;3. 磁盘空间监控
sql
-- 查看磁盘空间使用情况
SELECT * FROM v$disk_stat;
-- 查看归档目录空间
SELECT * FROM v$arch_dir;会话与锁监控
1. 会话监控
sql
-- 查看所有会话
SELECT * FROM v$session;
-- 查看活跃会话
SELECT * FROM v$session WHERE status = 'ACTIVE';
-- 查看指定用户的会话
SELECT * FROM v$session WHERE user_name = 'SYSDBA';
-- 查看会话详细信息
SELECT s.sess_id, s.user_name, s.status, s.os_user, s.machine,
s.program, s.logon_time, s.last_send_time
FROM v$session s;2. 锁监控
sql
-- 查看所有锁
SELECT * FROM v$lock;
-- 查看锁等待情况
SELECT * FROM v$lock_wait;
-- 查看阻塞会话
SELECT * FROM v$blockers;
-- 查看锁统计信息
SELECT * FROM v$lock_stat;
-- 查看会话锁信息
SELECT s.sess_id, s.user_name, l.lock_type, l.mode$, l.object_name
FROM v$session s, v$lock l
WHERE s.sess_id = l.sess_id;3. 会话执行的SQL
sql
-- 查看会话正在执行的SQL
SELECT s.sess_id, s.user_name, s.sql_text
FROM v$session s
WHERE s.status = 'ACTIVE' AND s.sql_text IS NOT NULL;
-- 查看会话SQL执行计划
SELECT * FROM v$session_plan WHERE sess_id = 12345;
-- 查看会话SQL执行统计
SELECT * FROM v$session_stat WHERE sess_id = 12345;日志监控
1. 在线日志监控
sql
-- 查看在线日志信息
SELECT * FROM v$log;
-- 查看在线日志状态
SELECT * FROM v$logfile;
-- 查看当前日志序列号
SELECT curr_lsn FROM v$database;
-- 查看日志切换信息
SELECT * FROM v$log_history;2. 归档日志监控
sql
-- 查看归档日志信息
SELECT * FROM v$archived_log;
-- 查看归档日志状态
SELECT * FROM v$arch_status;
-- 查看归档日志统计
SELECT * FROM v$arch_stat;
-- 查看归档日志目录
SELECT * FROM v$arch_dir;3. 错误日志监控
sql
-- 查看错误日志信息
SELECT * FROM v$error_log;
-- 查看最近的错误信息
SELECT * FROM v$error_log ORDER BY time DESC LIMIT 10;备份恢复监控
1. 备份监控
sql
-- 查看备份集信息
SELECT * FROM v$backup_set;
-- 查看备份片信息
SELECT * FROM v$backup_piece;
-- 查看备份进度
SELECT * FROM v$backup_progress;
-- 查看备份作业
SELECT * FROM v$backup_job;2. 恢复监控
sql
-- 查看恢复进度
SELECT * FROM v$recovery_progress;
-- 查看恢复状态
SELECT * FROM v$recovery_status;集群监控
1. DMDSC集群监控
sql
-- 查看DMDSC集群状态
SELECT * FROM v$dm_dsc_cluster;
-- 查看DMDSC节点信息
SELECT * FROM v$dm_dsc_node;
-- 查看DMDSC共享存储信息
SELECT * FROM v$dm_dsc_ssd;2. DMDataWatch监控
sql
-- 查看DataWatch状态
SELECT * FROM v$datwatch_status;
-- 查看DataWatch配置
SELECT * FROM v$datwatch_config;
-- 查看DataWatch应用进度
SELECT * FROM v$datwatch_ap_info;3. DMRAC监控
sql
-- 查看RAC集群状态
SELECT * FROM v$rac_cluster;
-- 查看RAC节点信息
SELECT * FROM v$rac_node;
-- 查看RAC资源信息
SELECT * FROM v$rac_resource;常用DM工具命令
1. dmctl 命令
dmctl是DM数据库的控制工具,用于管理数据库实例、会话等。
shell
# 连接到数据库实例
dmctl SYSDBA/SYSDBA@localhost:5236
# 查看实例状态
status
# 查看会话列表
list session
# 查看锁信息
list lock
# 终止会话
kill session <sess_id>
# 查看数据库模式
show mode
# 查看在线日志
show log2. dmrman 命令
dmrman是DM数据库的备份恢复管理工具。
shell
# 列出所有备份
dmrman backup list
# 检查备份完整性
dmrman check backupset '/opt/dmdbms/backup/full_backup_20230101'
# 查看备份集信息
dmrman show backupset '/opt/dmdbms/backup/full_backup_20230101'
# 执行全量备份
dmrman backup database '/opt/dmdbms/data/DAMENG/dm.ini' full to backupset '/opt/dmdbms/backup/full_backup_20230101'3. dmadmin 命令
dmadmin是DM数据库的管理工具,用于管理数据库服务、实例等。
shell
# 启动数据库实例
dmadmin start instance /opt/dmdbms/data/DAMENG/dm.ini
# 停止数据库实例
dmadmin stop instance /opt/dmdbms/data/DAMENG/dm.ini
# 重启数据库实例
dmadmin restart instance /opt/dmdbms/data/DAMENG/dm.ini
# 查看实例状态
dmadmin status instance /opt/dmdbms/data/DAMENG/dm.ini
# 查看服务列表
dmadmin list service4. disql 命令
disql是DM数据库的交互式SQL工具。
shell
# 连接到数据库实例
disql SYSDBA/SYSDBA@localhost:5236
# 执行SQL脚本
disql SYSDBA/SYSDBA@localhost:5236 < script.sql
# 导出查询结果
disql SYSDBA/SYSDBA@localhost:5236 -o result.txt -s "SELECT * FROM v$session;"
# 查看帮助信息
disql -h不同版本的差异
DM 7 vs DM 8
| 命令/视图 | DM 7 | DM 8 |
|---|---|---|
| v$sysload | 不支持 | 支持,查看系统负载 |
| v$disk_stat | 不支持 | 支持,查看磁盘空间使用情况 |
| v$arch_dir | 不支持 | 支持,查看归档目录空间 |
| v$backup_progress | 基本支持 | 增强支持,提供更详细的备份进度 |
| v$recovery_progress | 基本支持 | 增强支持,提供更详细的恢复进度 |
| dmctl命令 | 基本支持 | 增强支持,提供更多管理功能 |
| dmrman命令 | 基本支持 | 增强支持,提供更多备份恢复功能 |
DM 8.1 新特性
- 新增了更多性能监控视图
- 增强了dmctl命令的功能
- 新增了备份恢复进度的详细监控
- 增强了集群监控视图
- 新增了更多系统状态监控命令
最佳实践
1. 监控命令使用建议
- 定期执行关键监控命令,建立性能基准
- 使用脚本自动化监控,定期生成监控报告
- 结合监控工具使用,如DM企业管理器或第三方监控工具
- 关注异常指标,及时排查问题
- 记录监控数据,便于性能趋势分析
2. 常用监控脚本示例
sql
-- 监控表空间使用情况脚本
SELECT t.tablespace_name,
ROUND(t.total_size / 1024 / 1024, 2) total_mb,
ROUND(t.free_size / 1024 / 1024, 2) free_mb,
ROUND((t.total_size - t.free_size) / 1024 / 1024, 2) used_mb,
ROUND((t.total_size - t.free_size) / t.total_size * 100, 2) used_percent
FROM (
SELECT ts.name tablespace_name,
SUM(df.total_size) total_size,
SUM(df.free_size) free_size
FROM v$tablespace ts, v$datafile df
WHERE ts.id = df.tablespace_id
GROUP BY ts.name
) t
ORDER BY used_percent DESC;sql
-- 监控活跃会话脚本
SELECT s.sess_id, s.user_name, s.status, s.os_user, s.machine,
s.program, s.logon_time, s.last_send_time, s.sql_text
FROM v$session s
WHERE s.status = 'ACTIVE'
ORDER BY s.last_send_time DESC;3. 监控频率建议
- 系统状态监控:每5-15分钟
- 性能监控:每1-5分钟
- 存储监控:每小时-每天
- 会话与锁监控:每5-15分钟
- 日志监控:每小时-每天
- 备份恢复监控:实时监控
- 集群监控:每1-5分钟
常见问题(FAQ)
Q1: 如何快速查看数据库的整体状态?
A1: 可以使用以下命令快速查看数据库的整体状态:
sql
SELECT i.status$ instance_status, d.status$ database_status,
i.start_time, d.last_recover_time
FROM v$instance i, v$database d;Q2: 如何查看占用CPU最高的会话?
A2: 可以使用以下命令查看占用CPU最高的会话:
sql
SELECT s.sess_id, s.user_name, ss.cpu_usage, s.sql_text
FROM v$session s, v$session_stat ss
WHERE s.sess_id = ss.sess_id
ORDER BY ss.cpu_usage DESC
LIMIT 10;Q3: 如何查看表空间使用率超过80%的表空间?
A3: 可以使用以下命令查看表空间使用率超过80%的表空间:
sql
SELECT t.tablespace_name,
ROUND((t.total_size - t.free_size) / t.total_size * 100, 2) used_percent
FROM (
SELECT ts.name tablespace_name,
SUM(df.total_size) total_size,
SUM(df.free_size) free_size
FROM v$tablespace ts, v$datafile df
WHERE ts.id = df.tablespace_id
GROUP BY ts.name
) t
WHERE (t.total_size - t.free_size) / t.total_size * 100 > 80;Q4: 如何查看阻塞会话?
A4: 可以使用以下命令查看阻塞会话:
sql
SELECT * FROM v$blockers;或者使用以下命令查看更详细的阻塞信息:
sql
SELECT b.blocker_sess blocker, b.waiter_sess waiter,
s1.user_name blocker_user, s2.user_name waiter_user,
s1.sql_text blocker_sql, s2.sql_text waiter_sql
FROM v$blockers b, v$session s1, v$session s2
WHERE b.blocker_sess = s1.sess_id AND b.waiter_sess = s2.sess_id;Q5: 如何终止一个会话?
A5: 可以使用以下命令终止一个会话:
sql
-- 使用SQL命令终止会话
ALTER SYSTEM KILL SESSION '<sess_id>';
-- 使用dmctl命令终止会话
dmctl kill session <sess_id>Q6: 如何查看备份进度?
A6: 可以使用以下命令查看备份进度:
sql
SELECT * FROM v$backup_progress;Q7: 如何查看归档日志信息?
A7: 可以使用以下命令查看归档日志信息:
sql
SELECT * FROM v$archived_log ORDER BY sequence# DESC;Q8: 如何查看集群状态?
A8: 可以使用以下命令查看集群状态:
sql
-- DMDSC集群
SELECT * FROM v$dm_dsc_cluster;
-- DMDataWatch
SELECT * FROM v$datwatch_status;
-- DMRAC
SELECT * FROM v$rac_cluster;