如何捕获Oracle中v $ session的每个更改?

时间:2015-11-26 17:02:39

标签: sql oracle

有没有办法捕获v$session表中发生的每一个变化?

active session history没有任何变化。我试着编写一个PL / SQL块,每秒将v$session表的所有内容复制到另一个表中。但是,一秒钟仍然太长,因为我错过了很多活动/非活动/杀死状态的变化。

是否可以编写类似于触发器的内容,以便在发生任何插入/更新/删除时复制更改? 我尝试在v$session上创建触发器,但看起来像v$session这样的视图无法创建触发器。

基本上我正在寻找的是捕捉v$session中所有变化的任何方法。

有了这个,我打算做一些趋势分析来识别会话行为。

任何帮助?

PS:有人能说出v$session的刷新率是多少?有了这些信息,如果我在刷新率的时间间隔内捕获所有内容,我应该能够捕获我认为的所有更改。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

V$SESSION建立在X$表之上,因此没有刷新率。 X$表映射到Oracle内存结构。所以它总是显示当前数据,没有读一致性模型。

V$ACTIVE_SESSION_HISTORY基本上每秒对所有会话进行采样。默认情况下,每10个样本都会保留在自动工作负载存储库和DBA_HIST_ACTIVE_SESS_HISTORY中。

如果您对会话状态更改感兴趣,则会有连接和断开连接操作的数据库级触发器以及DDL触发器,因此您也可以检测到ALTER SYSTEM KILL SESSION