将指定SQL从pool中清除

本文详细介绍了Oracle11g中DBMS_SHARED_POOL.PURGE存储过程的功能与使用方法,该过程可清除游标、包、序列、触发器等具体对象,提供了参数说明及具体操作步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

存储过程DBMS_SHARED_POOL.PURGE说明


Oracle 11g在DBMS_SHARED_POOL包中引入了一个名为PURGE的新存储过程,可将如下类型的具体对象从pool中清除掉

  • 游标
  • 序列
  • 触发器

 

参数说明


DBMS_SHARED_POOL.PURGE (name    VARCHAR2,  flag    CHAR DEFAULT 'P',  heaps   NUMBER DEFAULT 1); 
 
Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 NAME                           VARCHAR2                IN
 FLAG                           CHAR                    IN     DEFAULT
 HEAPS                          NUMBER                  IN     DEFAULT

  • 参数flag

       c : cursor

       p/P :package/procedure/function.

       t/T :type

       r/R :trigger

       q/Q  : sequence

 

  • name

       若要清除的对象类型为cursor,则通过如下方法

  1.  确定要清除的SQL,并找出对应的SQL_ID
  2. 用SQL_ID从v$sqlarea中查出address和hash_value 
  3. SELECT a."ADDRESS",a."HASH_VALUE",a."SQL_FULLTEXT" FROM v$sqlarea a WHERE a.sql_id = 'd06r9341vzuah';
  4. 将address,hash_value组合成参数name
  5. 执行过程exec dbms_shared_pool.purge('0000000B3A6551F8,62908752','C'); 
  •  

 

### 如何清除 Oracle 19c 数据库中的 SQL 查询缓存 在 Oracle 19c 中,SQL 查询缓存主要由共享池 (Shared Pool) 和库高速缓存 (Library Cache) 组成。要清除这些缓存的内容,可以采取不同的方法。 #### 使用 `ALTER SYSTEM FLUSH SHARED_POOL` 命令 最常用的方法之一是通过执行 `ALTER SYSTEM FLUSH SHARED_POOL;` 来刷新整个共享池。这会清空所有的游标和存储过程,从而有效地清除 SQL 查询缓存[^1]。 ```sql ALTER SYSTEM FLUSH SHARED_POOL; ``` 需要注意的是,此操作会影响所有正在运行的应用程序,并可能导致性能暂时下降,因为在重新加载到内存之前,新的查询需要被解析并编译。 #### 针对特定对象清理 如果只需要针对某个具体的 SQL 游标或 PL/SQL 过程进行清理,则可以通过以下命令实现: 对于单个 SQL 游标: ```sql ALTER SYSTEM FLUSH SHARED_POOL 'hash_value'; ``` 其中 `'hash_value'` 是目标 SQL 语句的哈希值,可通过视图 `V$SQLAREA` 或者 `DBA_HIST_SQLSTAT` 获取相应信息来确定具体哪条记录对应待处理的对象。 对于指定的PL/SQL 单元(如包、函数等): ```sql ALTER SYSTEM DISCARD CACHE FOR PACKAGE package_name; ``` 以上两种方式相对更加精细控制,减少了不必要的资源浪费以及潜在的影响范围。 #### 动态参数调整 有时也可以考虑动态改变某些初始化参数以间接达到目的,比如设置 `_CURSOR_CACHE_PIN_TIME` 参数为较小数值让不活跃的游标更快释放空间;不过这种方式较为复杂且需谨慎评估其影响后再做决定。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值