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 ash
      where 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,machine
      order 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_ROLESELECT 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执行情况。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值