Oracle查看历史会话信息视图介绍
在日常运维过程中,处理故障时经常需要查看历史会话信息,在Oracle数据库中,查看历史会话信息主要依赖于以下动态性能视图(Dynamic Performance Views)和自动工作负载存储库(AWR)相关视图。以下是关键视图及说明:
1. 实时/历史会话视图
V$SESSION
作用:查看当前活动会话的实时信息(不包含历史会话)。
关键列:
SID, SERIAL#, USERNAME, STATUS, PROGRAM, SQL_ID, EVENT, LOGON_TIME
V$ACTIVE_SESSION_HISTORY
(ASH)
作用:存储最近的活动会话历史(每秒采样一次),默认保留约1小时。
关键列:
SAMPLE_ID, SAMPLE_TIME, SESSION_ID, SESSION_SERIAL#, USER_ID, SQL_ID, EVENT, WAIT_TIME
示例:
SELECT sample_time, session_id, sql_id, event, program FROM v$active_session_history WHERE session_type = 'FOREGROUND';
2. 长期历史会话视图(AWR)
DBA_HIST_ACTIVE_SESS_HISTORY
作用:ASH数据的长期存储(通过AWR快照持久化),保留时间由
AWR_RETENTION_POLICY
决定(默认8天)。关键列同
V$ACTIVE_SESSION_HISTORY
。示例1:
SELECT sample_time, session_id, sql_id, event FROM dba_hist_active_sess_history WHERE snap_id BETWEEN 1000 AND 1005; -- 指定快照范围
示例2:
select event, sql_id, machine,count(*)from dba_hist_active_sess_history ashwhere sample_time >=to_timestamp('2025-08-11 07:36:00', 'yyyy-mm-dd hh24:mi:ss')and sample_time <=to_timestamp('2025-08-11 07:40:00', 'yyyy-mm-dd hh24:mi:ss') group by event, sql_id,machineorder by 4 desc;
DBA_HIST_SESSION
作用:记录已断开连接的历史会话信息(通过AWR快照捕获)。
关键列:
SNAP_ID, SESSION_ID, SERIAL#, USERNAME, STATUS, PROGRAM, LOGON_TIME, LOGOFF_TIME
示例:
SELECT username, program, logon_time, logoff_time FROM dba_hist_session WHERE logoff_time > SYSDATE - 1; -- 最近24小时断开的会话
3. 辅助视图
DBA_HIST_SQLTEXT
作用:关联会话中执行的SQL文本。
SELECT sql_text FROM dba_hist_sqltext WHERE sql_id = 'xxx';
DBA_HIST_SNAPSHOT
作用:查看AWR快照时间范围,用于关联历史数据。
SELECT snap_id, begin_interval_time FROM dba_hist_snapshot ORDER BY snap_id DESC;
查询示例:合并历史会话与SQL文本
SELECT ash.sample_time,ash.session_id,ash.sql_id,st.sql_text,ash.event FROM dba_hist_active_sess_history ash JOIN dba_hist_sqltext st ON ash.sql_id = st.sql_id WHERE ash.user_id = (SELECT user_id FROM dba_users WHERE username = 'SCOTT')AND ash.sample_time BETWEEN SYSDATE - 1 AND SYSDATE; -- 最近24小时
权限要求
查询
V$
视图:需授予SELECT_CATALOG_ROLE
或SELECT ANY DICTIONARY
权限。查询
DBA_HIST_
视图:需授予DBA
或显式授权:GRANT SELECT ON dba_hist_active_sess_history TO your_user;
注意:历史数据依赖AWR快照。确保AWR已启用:
SELECT * FROM dba_hist_wr_control; -- 检查快照设置
通过组合这些视图,您可以全面分析Oracle数据库的历史会话行为、性能瓶颈及SQL执行情况。