是否可以确定上次在Oracle中访问表的时间? 我正在尝试这个,但这不包括最后一次选择表时的时间。
select * from dba_objects;
答案 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