上次在oracle中访问一个表

时间:2014-10-21 18:37:15

标签: sql oracle11g

是否可以确定上次在Oracle中访问表的时间?  我正在尝试这个,但这不包括最后一次选择表时的时间。

select * from dba_objects;

3 个答案:

答案 0 :(得分:1)

select p.object_owner owners, p.object_name Obj_Name, p.operation Operation, 
p.options Options, count(1) Idx_Usg_Cnt 
from dba_hist_sql_plan p,dba_hist_sqlstat s 
where p.object_owner = '&USERNAME' and p.operation like 'TABLE%' 
and p.sql_id = s.sql_id and p.object_name=’&OBJNAME’ 
group by p.object_owner,p.object_name,p.operation,p.options order by 1,2,3

答案 1 :(得分:1)

从@KD回答我已经开发了这个查询来检测未使用的表:

select a.obj#, b.object_name, b.owner, b.object_type, b.timestamp
    from dba_hist_seg_stat a, dba_objects b
    where a.obj# = b.object_id
    and   b.owner = 'YOUR_SCHEMA_NAME'
    and object_name = 'A_TABLE_NAME'
order by timestamp desc

由于此查询使用SYS用户视图,因此您必须具有特殊权限才能运行它。如果你有它们,你可以查看dba_hist_XXX视图,或者只看一下这里使用的视图中的其余列:你有关于读,写,锁等的信息。

编辑:感谢@APC的警告。 DBA_HIST_XXX是诊断包中需要特殊许可的视图。

答案 2 :(得分:0)

我正在使用下面的SQL来查找获取全表扫描的段的列表以及多少次 他们已经全表扫描..这个SQL是正确的。

    select a.obj#,a.table_scans_delta,b.object_name,b.owner,b.object_type 
    from dba_hist_seg_stat a, dba_objects b
    where a.obj# = b.object_id
    and   b.owner like 'USERNAMES%'
    order by table_scans_total desc