1. oracle10g以前我们都是直接刷新共享池,但这样数据库中所有sql的执行计划都会被删掉。这种办法也不可取,下面简单介绍一下这种办法:

测试版本:

SQL> select * from v$version;

BANNER CON_ID

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

Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production 0

1

2

3

4

SQL>select *fromv$version;

BANNERCON_ID

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

OracleDatabase12cEnterpriseEditionRelease12.1.0.1.0-64bitProduction0

PL/SQL Release 12.1.0.1.0 - Production 0

CORE 12.1.0.1.0 Production 0

TNS for Linux: Version 12.1.0.1.0 - Production 0

NLSRTL Version 12.1.0.1.0 - Production 0

1

2

3

4

PL/SQLRelease12.1.0.1.0-Production0

CORE12.1.0.1.0Production0

TNSforLinux:Version12.1.0.1.0-Production0

NLSRTLVersion12.1.0.1.0-Production0

1. 我们执行一条简单的sql:

SQL> select 1 from dual;

1

----------

1

1

2

3

4

5

SQL>select1fromdual;

1

----------

1

2. 此时sql的执行计划进入shared pool,但共享池中还有其他sql的执行计划

SQL> select sql_id, address, hash_value, executions, loads, parse_calls, invalidations from v$sqlarea where sql_text = 'select 1 from dual';

SQL_ID ADDRESS HASH_VALUE EXECUTIONS LOADS PARSE_CALLS INVALIDATIONS

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

520mkxqpf15q8 000000006ECCF9C0 2866845384 1 1 1 0

SQL> select count(*) from v$sqlarea;

COUNT(*)

----------

196

1

2

3

4

5

6

7

8

SQL>selectsql_id,address,hash_value,executions,loads,parse_calls,invalidationsfromv$sqlareawheresql_text='select 1 from dual';

SQL_IDADDRESSHASH_VALUEEXECUTIONSLOADSPARSE_CALLSINVALIDATIONS

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

520mkxqpf15q8000000006ECCF9C028668453841110

SQL>selectcount(*)fromv$sqlarea;

COUNT(*)

----------

196

3. 然后flush一下共享池

SQL> alter system flush shared_pool;

System altered.

1

2

3

SQL>altersystemflushshared_pool;

Systemaltered.

4. 发现最开始那条sql的执行计划已经被flush,但同时共享池所有的sql也被flush,这个代价是非常大的。不可取

SQL> select sql_id, address, hash_value, executions, loads, parse_calls, invalidations from v$sqlarea where sql_text = 'select 1 from dual';

no rows selected

SQL> select count(*) from v$sqlarea;

COUNT(*)

----------

83

1

2

3

4

5

6

7

SQL>selectsql_id,address,hash_value,executions,loads,parse_calls,invalidationsfromv$sqlareawheresql_text='select 1 from dual';

norowsselected

SQL>selectcount(*)fromv$sqlarea;

COUNT(*)

----------

83

2. 下面我们来看一下删除指定sql的执行计划,10.2.0.5版本以上可直接使用

1. 执行一条简单的测试sql

SQL> select 2 from dual;

2

----------

2

1

2

3

4

5

SQL>select2fromdual;

2

----------

2

2. 查看sql在共享池的执行计划

SQL> select sql_id, address, hash_value, executions, loads, parse_calls, invalidations

2 from v$sqlarea

3 where sql_text = 'select 2 from dual';

SQL_ID ADDRESS HASH_VALUE EXECUTIONS LOADS PARSE_CALLS INVALIDATIONS

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

9fusd37prv595 000000006C5D2988 3950875941 1 1 1 0

1

2

3

4

5

6

7

SQL>selectsql_id,address,hash_value,executions,loads,parse_calls,invalidations

2fromv$sqlarea

3wheresql_text='select 2 from dual';

SQL_IDADDRESSHASH_VALUEEXECUTIONSLOADSPARSE_CALLSINVALIDATIONS

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

9fusd37prv595000000006C5D298839508759411110

3. 将指定sql的执行计划flush

SQL> exec sys.dbms_shared_pool.purge('000000006C5D2988,3950875941', 'c');

PL/SQL procedure successfully completed.

1

2

3

SQL>execsys.dbms_shared_pool.purge('000000006C5D2988,3950875941','c');

PL/SQLproceduresuccessfullycompleted.

4.然后我们再来查看这条sql的执行计划的时候,已经被flush掉了

SQL> select sql_id, address, hash_value, executions, loads, parse_calls, invalidations

2 from v$sqlarea

3 where sql_text = 'select 2 from dual';

no rows selected

1

2

3

4

5

SQL>selectsql_id,address,hash_value,executions,loads,parse_calls,invalidations

2fromv$sqlarea

3wheresql_text='select 2 from dual';

norowsselected

删除完毕。就这样就删掉了指定sql的执行计划了。

转载请注明: 版权所有,文章允许转载,但必须以链接方式注明源地址,否则追究法律责任!

最后编辑:2013-09-26作者:Jerry

一个积极向上的小青年,热衷于分享--Focus on DB,BI,ETL

oracle 删除列 大数据_Oracle 删除指定sql的执行计划。相关推荐

  1. SQL Server、Oracle 如何清除指定SQL的执行计划

    一. SQL Server 1. 存储过程 如果是存储过程,可以使用sp_recompile指定存储过程名重新编译. 注意如果里面的参数是表名,那么所有用到该表的存储过程和trigger都会重新编译, ...

  2. oracle 索引概念、索引相关、sql查询执行计划

    文章目录 一.索引 1.1 索引概念 1.2 索引分类 1.3 位图索引(企业版oracle): 1.4 B树索引 (1) 唯一索引 (2) 组合索引 (3) 反向键索引 (4) 函数索引 1.5 和 ...

  3. dbms中怎么跨数据源拷贝数据_Oracle中使用DBMS_XPLAN处理执行计划详解

    概述 DBMS_XPLAN是Oracle提供的一个用于查看SQL计划,包括执行计划和解释计划的包:在以前查看SQL执行计划的时候,我都是直接使用set autotrace命令,不过DBMS_XPLAN ...

  4. oracle大数据量删除方案

    oracle进行大数据量删除的时候,容易报错表temp表空间空间不够导致删除失败,此时的处理方案有: 方案一: 分批删除,提交之后继续执行 方案二: 当剩下的数据量小于待删除的数据量时,可以使用转表的 ...

  5. oracle 删除主键_大数据量删除的思考 4

    译者  汤健 · 沃趣科技数据库技术专家 出品  沃趣科技 在本系列的前一期文章中,我制作了一些图,突出显示了按表扫描执行大量删除操作和按索引范围扫描执行大量删除之间的主要区别.根据所涉及的数据模式, ...

  6. 【转贴】Oracle查询重复数据与删除重复记录方法

    Oracle查询重复数据与删除重复记录方法 比如现在有一人员表 (表名:peosons) 若想将姓名.身份证号.住址这三个字段完全相同的记录查询出来 select p1.* from persons ...

  7. oracle的sql执行计划语句,最权威Oracle获取SQL语句执行计划大全

    该文档为根据相关资料整理.总结而成,主要讲解Oracle数据库中,获取SQL语句执行计划的最权威.最正确的方法.步骤,此外,还详细说明了每种方法中可选项的意义及使用方法,以方便大家和自己日常工作中查阅 ...

  8. Oracle 查看sql语句执行计划方法

    注意这篇文章只介绍查看sql语句执行计划的方法, 并不是说明如何看懂执行计划. 一般来讲, 直接在sqlplus 执行 set autotrace on; 就可以了 其前提是登陆用户必须有视图  v_ ...

  9. 删除mysql 执行计划_如何清除某条SQL的执行计划

    如果遇到绑定窥探导致执行计划慢的情况,想要清除某条SQL的执行计划,让它硬解析,找了很久都没有找到直接操作share pool的方法(除非alter system flush shared_pool) ...

最新文章

  1. 那些为了学技术而离婚、私奔的大佬们运营的公众号有哪些?
  2. Django的主要开发流程(以扩充用户模型为例)
  3. 数据库的方向 - 行vs列(转自: IBM i 中国开发团队)
  4. dc持久内存与mysql_为什么持久性内存会改变你的世界!
  5. javascript 判断string是否包含某个字符串
  6. CSS3自定义下拉框菜单
  7. c# 拼接字符串换行_零基础小白学习:python之最详细字符串篇
  8. python爬取网易付费音乐包_爬取网易云音乐“三部曲”(三):轻松下载网易音乐歌曲!...
  9. 简述 Erasure Code,EC 纠删码原理
  10. 计算机技术需要学单片机吗,手把手教你学51单片机
  11. jmp连mysql_mongo connect BI 连接至Power BI
  12. Opencv 关于Kmeans算法
  13. [电子电路基础] 如何区分LED发光二极管引脚的正负极
  14. H.265/HEVC预测编码及CTU、CU、PU、TU学习笔记
  15. 局域网怎么添加新的计算机用户,如何添加局域网
  16. yii1 ajax,ajax - 在yii 1中使用ajax根据选定的单选按钮选项更新html字段值 - 堆栈内存溢出...
  17. html 微信界面,微信界面.html
  18. echarts tooltip层级
  19. 无线呼叫服务器怎么恢复出厂,TP-Link TL-WR841N怎么恢复出厂设置?
  20. al11-添加SAP目录

热门文章

  1. SpringMVC-RestfulCRUD
  2. P2045 方格取数加强版
  3. c# Parallel.For 并行编程 执行顺序测试
  4. (--3198)2: Redirecting From A File( Piping and redirecting output
  5. SQLServer2000数据库特有的1433端口号
  6. 单片机c语言慧尾灯编码,(参考)基于单片机的智能尾灯开发文档.doc
  7. springboot整合视图层Thymeleaf、freemarker
  8. goroutine sync.Mutex互斥锁Lock的使用
  9. 图解Spark On Yarn cluster模式运行机制
  10. azkaban修改MySQL配置上传包的大小上限