Skip to content

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 log

2. 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 service

4. 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 7DM 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;