我们正在清理我们的数据库,我们有一些数据库对象已经使用了近5年。所以它已经过时了。
有没有办法查看视图的使用次数以及上次使用时的时间?
ObjName | Num times used | Last Used |
---------------------------------------------
vw_PSEUDO | 23 | 13/06/2014
vw_ABC123 | 9999 | 23/07/2014
答案 0 :(得分:1)
SELECT *
FROM V$SQLAREA
WHERE UPPER (SQL_TEXT) LIKE '%NAME_OF_YOUR_VIEW%'
ORDER BY FIRST_LOAD_TIME DESC;
V $ SQLAREA是一个系统视图,用于存储所有已启动的查询,因此,如果某个实体查询了您的视图,您将在V $ SQLAREA中找到包含视图名称的记录。
字段FIRST_LOAD_TIME是一个字符串,显示您的视图使用的日期和时间。
这是为了查找Oracle用户最近未使用的视图:
SELECT ALFA.VIEW_NAME,
(SELECT COUNT ( * )
FROM V$SQLAREA
WHERE UPPER (SQL_TEXT) LIKE '%' || ALFA.VIEW_NAME || '%')
FROM USER_VIEWS ALFA;
这是为了查找Oracle用户最近未使用的对象,将搜索范围限制为前100个对象(rownum< = 100):
SELECT ALFA.OBJECT_NAME,
(SELECT COUNT ( * )
FROM V$SQLAREA
WHERE UPPER (SQL_TEXT) LIKE '%' || ALFA.OBJECT_NAME || '%')
COUNT
FROM USER_OBJECTS ALFA
WHERE ROWNUM <= 100
ORDER BY COUNT DESC;
警告:在我的系统中,2014年7月23日,最低FIRST_LOAD_TIME为:
select min(first_load_time) from v$sqlarea;
2014-06-14/19:29:33
所以我系统中的v $ sqlarea保留了大约39天。
请不要忘记夜间批次可以使用APPARENTLY UNUSED表进行数据库备份,因此您无法在V $ SQLAREA中查找有关备份表的查询或语句,尽管这些表在夜间使用为了备份主表。