今天是2021/9/9 17:00 需要通过v$sql 查找到10点半左右关于一个业务表的merge操作 根据对应条件找到这个sql和sql_id, 此时需要定位到当时是谁执行的这个sql 但通过这个sql_id 无论在v$session v$active_session_history 还是在dba_active_sess_history均没有找到相关信息。 通过sql_id匹配,返回结果均为0行,这个是什么情况? v$session_active_history不是每秒中都会记录信息么?难道当时记录信息的时候,恰好这个sql已经执行完没有被记录?此时应该如何查找对应对操作,也就是谁执行了这个sql? ---追加 今天上午针对昨天的sql又做了一次检查,具体行为如下: --session当中记录的是正在连接的会话,推出连接的会话应该在历史表当中招 (1)通过v$sql和v$session找,后来想一想,v$session记录的是连接会话,退出登陆的应该不做记录。 LAST_LOAD_TIME between '2021-09-09/10:00:00' and '2021-09-09/11:00:00' and lower(sql_text) like '%agent_merchant_info%'; (2)再一次通过v$sql试图确认这段时间内是有执行过相关sql,并有记录 s
select address,hash_value,SQL_TEXT,LAST_LOAD_TIME from v$sql where LAST_LOAD_TIME between '2021-09-09/10:00:00' and '2021-09-09/10:35:00' and sql_id='b3kqzkwtxh21n';
(3)此时通过v$sql定位到的sql_id在活动会话历史试图当中找不到,返回值为空 select * from v$active_session_history where sql_id='b3kqzkwtxh21n'; (4)通过关联查询发现这个时间段内的sql没有记录?没有返回值 v$ACTIVE_SESSION_HISTORY A,v$EVENT_NAME B,v$SQLAREA C WHERE A.sample_time> to_date('20210909 10:00:00','yyyymmdd hh24:mi:ss') and A.sample_time<to_date('20210909 10:40:00','yyyymmdd hh24:mi:ss') AND A.EVENT# = B.EVENT# AND A.SQL_ID = C.SQL_ID and c.sql_id='b3kqzkwtxh21n' GROUP BY C.SQL_TEXT, B.NAME; (5)通过历史活动会话和历史sql找到指定的这个时间段内的sql是有返回值,但根据之前v$sql中查到的sql_id匹配就没有返回值,,根据sql_text 和表名匹配,发现记录的仅仅是select操作,这期间其实是有update和merge的相关操作
dba_hist_active_sess_history a,dba_hist_sqltext bwhere sample_time >=to_date('2021-09-09 10:00:00', 'YYYY-MM-DD HH24:MI:SS')and sample_time <=to_date('2021-09-09 11:00:00', 'YYYY-MM-DD HH24:MI:SS')and a.sql_id=b.sql_id and lower(b.sql_text) like 'merge%';
求解答
