日期:2014-05-16  浏览次数:20600 次

巧用dba_hist_active_sess_history跟踪某个时间段内SQL(原创)

昨日由于应用数据更改有误,开发商也不知道是那条sql导致的数据出现偏差,于是要我协助查找和该表相关的update语句,几经周折下,找到了dba_hist_active_sess_history视图,该视图数据来自于V$ACTIVE_SESSION_HISTORY。其中dba_hist_active_sess_history视图的记录了内存中活动会话的历史信息,而动态性能视图V$ACTIVE_SESSION_HISTORY则记录了当前活动会话信息。

通过dba_hist_active_sess_history视图关联v$sqlarea和DBA_HIST_SNAPSHOT可以跟踪到某个时间段内的sql。当然能跟踪到的sql多少取决于v$sqlarea,毕竟只有还保留在v$sqlarea中的sql才能跟踪到。

下面是根据客户需求写的查询,查询2011-12-28日对dj_sz表的update语句

select to_char(b.begin_interval_time,'yyyy-mm-dd hh24:mi:ss') update_time,c.sql_text sql_text
from dba_hist_active_sess_history a,DBA_HIST_SNAPSHOT b,v$sqlarea c
where a.snap_id=b.snap_id
and a.sql_id=c.sql_id
and b.begin_interval_time>=to_date('2011-12-28','yyyy-mm-dd') and b.begin_interval_time < to_date('2011-12-29','yyyy-mm-dd')
and lower(c.sql_text) like '%update%dj_sz%'
order by update_time;

?

感谢小苏打的帮助

参考至:http://www.itpub.net/thread-1033928-1-1.html

本文原创,转载请注明出处、作者

如有错误,欢迎指正

邮箱:czmcj@163.com