[转帖]清除掉shared pool中某条sql语句方法
https://www.xifenfei.com/2012/02/%E6%B8%85%E9%99%A4%E6%8E%89shared-pool%E4%B8%AD%E6%9F%90%E6%9D%A1sql%E8%AF%AD%E5%8F%A5%E6%96%B9%E6%B3%95.html
作者:惜分飞版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
在论坛中看到一个帖子,如何清除掉shared pool中某条sql语句,如果是在10g以前的版本,那估计会比较麻烦,为了删除一条sql语句记录,需要清空整个shared pool,在10g中提供了新的dbms_shared_pool包可以实现该功能(如果该包没有安装,可以通过?/rdbms/admin/dbmspool.sql安装),下面我通过在11g中试验证明该问题
1.数据库版本信息
SQL> select * from v$version;BANNER----------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionPL/SQL Release 11.2.0.1.0 - ProductionCORE 11.2.0.1.0 ProductionTNS for 32-bit Windows: Version 11.2.0.1.0 - ProductionNLSRTL Version 11.2.0.1.0 - Production |
2.模拟一条sql语句
SQL> create table xff as 2 select * from dba_tables 3 where rownum<10;表已创建。SQL> select count(*) from xff; COUNT(*)---------- 9SQL> col sql_text for a30SQL> SELECT ADDRESS,HASH_VALUE,SQL_TEXT FROM V$SQLAREA 2 WHERE SQL_TEXT LIKE 'select % xff';ADDRESS HASH_VALUE SQL_TEXT-------- ---------- ------------------------------1EFB91B8 3642190903 select count(*) from xff |
3.打破神话一:权限操作
对表进行权限操作,可以清除该表在shared pool中关于该表记录
SQL> grant select on xff to chf;授权成功。SQL> col sql_text for a30SQL> SELECT ADDRESS,HASH_VALUE,SQL_TEXT FROM V$SQLAREA 2 WHERE SQL_TEXT LIKE 'select % xff';ADDRESS HASH_VALUE SQL_TEXT-------- ---------- ------------------------------1EFB91B8 3642190903 select count(*) from xffSQL> revoke select on xff from chf;撤销成功。SQL> col sql_text for a30SQL> SELECT ADDRESS,HASH_VALUE,SQL_TEXT FROM V$SQLAREA 2 WHERE SQL_TEXT LIKE 'select % xff';ADDRESS HASH_VALUE SQL_TEXT-------- ---------- ------------------------------1EFB91B8 3642190903 select count(*) from xff |
证明grant和revoke操作没有清除shared pool中关于该表的sql语句
4.打破神话二:ddl操作
对表进行ddl操作,可以清除该表在shared pool中关于该表记录
SQL> alter table xff add owner1 varchar2(100);表已更改。SQL> SELECT ADDRESS,HASH_VALUE,SQL_TEXT FROM V$SQLAREA 2 WHERE SQL_TEXT LIKE 'select % xff';ADDRESS HASH_VALUE SQL_TEXT-------- ---------- ------------------------------1EFB91B8 3642190903 select count(*) from xff |
事实证明ddl操作不能达到预期效果,没有清除掉这条sql语句
5.刷新shared pool
SQL> alter system flush shared_pool 2 ;系统已更改。SQL> SELECT ADDRESS,HASH_VALUE,SQL_TEXT FROM V$SQLAREA 2 WHERE SQL_TEXT LIKE 'select % xff';未选定行 |
把整个shared pool都刷新了,自然其中的一条sql语句也没有了,在10g前只能通过这种方法实现
6.使用dbms_shared_pool.purge
SQL> select count(*) from xff; COUNT(*)---------- 9SQL> SELECT ADDRESS,HASH_VALUE,SQL_TEXT FROM V$SQLAREA 2 WHERE SQL_TEXT LIKE 'select % xff';ADDRESS HASH_VALUE SQL_TEXT-------- ---------- ------------------------------1EFB91B8 3642190903 select count(*) from xffSQL> exec dbms_shared_pool.purge('1EFB91B8, 3642190903','C');PL/SQL 过程已成功完成。SQL> SELECT ADDRESS,HASH_VALUE,SQL_TEXT FROM V$SQLAREA 2 WHERE SQL_TEXT LIKE 'select % xff';未选定行 |
试验证明在shared pool中清除了一条sql记录
7.关于dbms_shared_pool.purge参数说明
purge(name varchar2, flag char DEFAULT 'P', heaps number DEFAULT 1);-- name-- The name of the object to keep. There are two kinds of objects:-- PL/SQL objects, triggers, sequences, types and Java objects,-- which are specified by name, and -- SQL cursor objects which are specified by a two-part number-- (indicating a location in the shared pool). For example:-- dbms_shared_pool.keep('scott.hispackage')-- will keep package HISPACKAGE, owned by SCOTT. The names for-- PL/SQL objects follows SQL rules for naming objects (i.e., -- delimited identifiers, multi-byte names, etc. are allowed).-- A cursor can be keeped by-- dbms_shared_pool.keep('0034CDFF, 20348871', 'C')-- The complete hexadecimal address must be in the first 8 characters.-- The value for this identifier is the concatenation of the-- 'address' and 'hash_value' columns from the v$sqlarea view. This-- is displayed by the 'sizes' call above.-- Currently 'TABLE' and 'VIEW' objects may not be keeped.---- flag-- This is an optional parameter. If the parameter is not specified,-- the package assumes that the first parameter is the name of a-- package/procedure/function and will resolve the name. Otherwise,-- the parameter is a character string indicating what kind of object-- to keep the name identifies. The string is case insensitive.-- The possible values and the kinds of objects they indicate are -- given in the following table:-- Value Kind of Object to keep-- ----- ------------------------ P package/procedure/function-- Q sequence-- R trigger-- T type-- JS java source-- JC java class-- JR java resource-- JD java shared data-- C cursor-- If and only if the first argument is a cursor address and hash-value,-- the flag parameter should be set to 'C' (or 'c').---- heaps-- heaps to purge. e.g if heap 0 and heap 6 are to be purged. -- 1<<0 | 1<<6 => hex 0x41 => decimal 65. so specify heaps=>65.-- Default is 1 i.e heap 0 which means the whole object will be purged. |
- 9I中清除特定表相关执行计划
- dbms_shared_pool.purge工作原理猜测
- oracle 中如何定位重要(消耗资源多)的SQL
- 使用dblink导致的/*+ OPAQUE_TRANSFORM */
- shared pool latch 等待事件
- library cache pin等待事件
- ORA-00001: unique constraint (PERFSTAT.STATS$SQL_SUMMARY_PK) violated
- Read by other session等待事件
- 通过hash_value获取sql语句执行计划
- sql_id和hash value的部分转换
- sql profile 使用
- 关于High Versions Count总结
[转帖]清除掉shared pool中某条sql语句方法的更多相关文章
- MySQL中的基本SQL语句
标准SQL包含了4种基本的语句类别: DDL语句,数据定义语句,主要用来定义数据库,表名,字段,例如create,drop,alter. DML语句,数据操作语句,用来对数据记录的增删改查,还用来保证 ...
- mysql 中常用的 sql 语句
SQL分类: DDL-----数据定义语言(CREATE--创建,ALTER--修改. DROP--删除表,DECLARE--声明) DML-----数据定义语言(SELECT--查询,DELECT- ...
- MySQL 中一条 sql 的执行过程
一条 SQL 的执行过程 前言 查询 查询缓存 分析器 优化器 执行器 数据更新 日志模块 redo log (重做日志) binlog (归档日志) undo log (回滚日志) 两阶段提交 为什 ...
- SQL Server中常用的SQL语句(转):
SQL Server中常用的SQL语句 转自:http://www.cnblogs.com/rainman/archive/2013/05/04/3060428.html 1.概述 名词 笛卡尔积.主 ...
- 在Access中批量调用SQL语句
access的SQL视图一次只能执行一条SQL语句,那么在VBA中调用或许可以简便一些 例如: Public Sub 批量()Dim strsql As String strsql = " ...
- c#中执行多条sql语句【ORA-00911: 无效字符】
问题描述: 在plsql里执行多条sql语句的时候,使用“,”(逗号)分隔,测试可以执行多条,而在C#执行多条sql语句的时候[ORA-00911: 无效字符]. 有时我们需要一次性执行多条sql语句 ...
- Spring 中jdbcTemplate 实现执行多条sql语句
说一下Spring框架中使用jdbcTemplate实现多条sql语句的执行: 很多情况下我们需要处理一件事情的时候需要对多个表执行多个sql语句,比如淘宝下单时,我们确认付款时要对自己银行账户的表里 ...
- 如何找出MySQL数据库中的低效SQL语句
面对业务的迅猛发展,DBA的一项重要工作就是及时发现数据库中的低效SQL语句,有的可以立刻着手解决(比如缺少合适的索引),有的需要尽快反馈给开发人员进行修改. MySQL数据库有几个配置选项可以帮助我 ...
- SQL*PLUS中批量执行SQL语句
SQL*PLUS中批量执行SQL语句 今天由于工作的需要,要在CMD中批量执行大量的SQL语句,对于Oracle学习还处在入门阶段的我,只能硬着头皮到处去寻找资料(主要是网络资料,也包括自己的电子书) ...
- 在ADO.NET中使用参数化SQL语句访问不同数据库时的差异
在ADO.NET中经常需要跟各种数据库打交道,在不实用存储过程的情况下,使用参数化SQL语句一定程度上可以防止SQL注入,同时对一些较难赋值的字段(如在SQL Server中Image字段,在Orac ...
随机推荐
- linux中iptables防火墙相关命令
https://www.cnblogs.com/seven1979/p/4173927.html https://blog.csdn.net/shenjianxz/article/details/62 ...
- 我开源了一个 Go 学习仓库
目录 前言 一.综述 1.1 Hello Word 1.2 命令行参数 1.3 查找重复行 1.4 GIF 动画 1.5 获取一个URL 1.6 并发获取多个URL 1.7 实现一个 Web 服务器 ...
- Sermant重磅更新,1.3.0 release版本发布
本文分享自华为云社区<新特性速览!Sermant重磅更新,1.3.0 release版本发布>,作者:华为云开源. Sermant社区在12月份正式发布了1.3.0 release版本,这 ...
- 实践案例丨云连接CC实现跨区域多VPC与线下IDC Server互联
摘要:用实践案例带你掌握云连接CC如何实现跨区域多VPC与线下IDC Server互联. [背景] 当前在华为云华南.华东.香港region均部署了业务,同时在华南region通过云专线与线下IDC打 ...
- 华为中国生态大会2021举行在即,GaussDB将重磅发布5大解决方案
摘要:企业数字化转型如火如荼,云成为数字化与新基建的关键要素,数据成为智能时代新的生产资料和企业数字化的生命,而数据库则是支撑数据生命线的底座. 本文分享自华为云社区<华为中国生态大会2021举 ...
- 面对 Log4j2 漏洞,安全人都做了什么?
摘要:本文从漏洞复现.漏洞防护.漏洞检测.软件供应链安全等方面,介绍安全人针对该漏洞做的尝试. 本文分享自华为云社区<面对 Log4j2 漏洞,安全人都做了什么?>,作者:maijun. ...
- 聊聊Hive数据血缘——从Atlas没有列级血缘的Bug讲起
前几天,Datahub提供了最新的字段级别数据血缘功能,很多朋友迫不及待想对比一下Datahub的字段级血缘与Atlas的区别. 这个时候问题来了,在Atlas收集Hive血缘的时候,由于部分版本问题 ...
- 一文了解 DataLeap 中的 Notebook
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 概述 Notebook 是一种支持 REPL 模式的开发环境.所谓「REPL」,即「读取-求值-输出」循环:输入一 ...
- 项目基于 Solon 进行构建,一般都有到哪些东西?
例如: 每个微服务工程是采用Solon开发. 基于Solon Cloud 实现微服务的配置.服务注册.事件总线. 其中,最重要的是实现了Solon Rpc接口与RESTful接口均可以注册至任何注册服 ...
- 我的程序跑了60多小时,就是为了让你看一眼JDK的BUG导致的内存泄漏。
这次的文章从JDK的J.U.C包下的ConcurrentLinkedQueue队列的一个BUG讲起.jetty框架里面的线程池用到了这个队列,导致了内存泄漏. 同时通过jconsole.VisualV ...