概述
v$sql和v$sqlarea视图一定是常用的视图之一,通常可以用来查sql语句,sql_id,sql执行情况
V$SQL在子游标级别上列出了在共享sql区域的统计信息,他将原始sql文本展现为一行。V$SQL中的视图信息一般在sql执行的最后进行更新。然而,对于长时间执行的sql,每5秒会更新一次v$sql视图。
v$sql列说明,如没有特别说明,均指子游标,存储的是具体的SQL 和执行计划相关信息,所以他是一个游标视图
v$sqlarea是一个综合视图,提供的是每条sql语句执行的汇总信息。它存储的SQL和一些相关的信息,比如累计的执行次数,逻辑读,物理读等统计信息。
一些列
常用的列我们都知道,这里只说几个关于时间的列
FIRST_LOAD_TIME:Timestamp of the parent creation time,父游标产生的时间戳
LAST_LOAD_TIME:Time at which the query plan was loaded into the library cache,SQL执行计划被载入library cache的时间,一般是SQL第一次运行的时间
LAST_ACTIVE_TIME:TIme at which the query plan was last active,SQL最后的执行时间
知道这些有啥用呢?
当你要查找谁悄悄执行了一个语句,别人还死活不承认,偏偏审计只到DB,就可以根据sql执行时间,对着监听日志,或者审计日志,猜一下,到底谁执行的,然后严刑逼问
select t.first_load_time, t.last_load_time, t.sql_text, t.sql_fulltext
from v$sqlarea t
where t.first_load_time between '2019-09-27/09:00:47' and
'2019-09-27/09:30:47'
order by t.first_load_time;