oracle 清除相关对象的执行计划

时间:2023-01-02 11:27:49

什么时候 shared pool 里面的 shared sql area 被 清除flush ?

几种情况:
1. 相关表 ,cluster , index 等,跟对象相关的, 执行过analyze 语句后,oracle会清除原来的缓存。
2. 相关对象被修改过,那么这个sql area 就变成无效状态,下一次读的时候会重新解析reparse
3. 数据库global database name 被修改过
4.执行alter system  flush shared_pool 的时候。

就是这几种情况下, 执行计划(还有其他的信息) 都会被刷新。


上面这几种情况参考 oracle concept 第8章。

 

根据上面的几种情况,我们可以选择ANALYZE相关对象,修改相关对象来清除相关对象的执行计划。

 

另外10G以后的数据库可以通过dbms_shared_pool.purge('address,hash','C',1)清除指定的游标对象,1是清除V$SQLAREA和V$SQL中的记录。