专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

在Oracle中,如何清除Shared Pool中某条SQL语句?

ins518 2024-10-25 14:29:12 技术文章 8 ℃ 0 评论

如果数据库版本为Oracle 10.2.0.4以前,那么只能清空整个Shared Pool,命令为:“ALTER SYSTEM FLUSH SHARED_POOL;”

而从Oracle 10.2.0.4开始提供了一个包DBMS_SHARED_POOL,该包可以实现清除Shared Pool中某条SQL语句的功能。若该包没有安装,则可以通过$ORACLE_HOME/rdbms/admin/dbmspool.sql进行安装。

使用这种方法可以精确的将一个SQL从共享池中删除,从而使得Oracle为这个SQL重新生成执行计划。这种方法只针对单个SQL语句,使得解决问题的同时不会造成任何的误伤。

举例说明:

SELECT ADDRESS,HASH_VALUE FROM V$SQLAREA WHERE ROWNUM<=1;

ADDRESS HASH_VALUE

---------------- ----------

0000000092D263D0 3231842444

EXEC DBMS_SHARED_POOL.PURGE('0000000092D263D0,3231842444','C');--这里的C表示游标(Cursor)

PL/SQL procedure successfully completed.

SELECT ADDRESS,HASH_VALUE,SQL_TEXT FROM V$SQLAREA WHERE ADDRESS='0000000092D263D0' AND HASH_VALUE='3231842444';

no rows selected

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表