概要 
Oracle Outline是用来保持SQL运行计划(execution plan)的一个工具。

我们能够通过outline工具防止SQL运行计划在

数据库环境变更(如统计信息,部分參数等)而引起变化。 
Outline的主要使用在下面情况: 
1. 
为避免在升级后某些sql出现严重性能下降并且在短时间内不能优化的情况, 
我们能够使用outline的功能将原生产库中的sql运行计划实施在新的数据库上。 
2. 
为避免SQL的运行计划在统计数据不准确的情况(如未能及时收集表或索引的统计信息)下导致变化从而引起的性能减少。 
3. 
避免大规模分布实施的应用出现数据库版本号、配置等差别引起的优化器产生不同的运行计划。 
4. 
某些Bug引起优化器生成较差的运行计划。在bug修复前我们能够使用outline来强制SQL的运行计划的正确。 
Outline的机制是将所须要的运行计划的hint保存在outline的表中。当运行SQL时,Oracle会与outline中的SQL比較,假设该SQL有保存的outline,则通过保存的hint生成运行计划。 
Outline的使用注意事项 
Outline的使用须要注意下面事项。 
1. 
Outln用户是一个很重要的系统用户。其重要性跟sys,system一样。

在不论什么情况下都不建议用户删除outln。否则会引起数据库错误。

2. 
优化器通过Outline生成运行计划前提是outline内全部hint都有效的。如:索引没有创建的前提下,索引的hint是失效的。导致该SQL的outline计划不会被使用。

3. 
參数Cursor_sharing=force时不能使用outline。 
4. 
literial sql的共享程度不高,Outline针对绑定变量的sql较好。

针对literial sql的情况,须要每条sql都生成outline。

5. 
创建outline须要有create any outline的权限。 
6. 
要注意从CBO的角度来看,数据库表和索引的统计信息是随着数据量的变化而不断改变的。

固定的运行计划在某些时段并不一定是最优的运行计划。

所以outline的使用是要依据详细情况来决定的。

Outline使用举例 
本文举例说明怎样使用outline,而且将outline的内容从8i迁移到10g的数据库上使用。 
操作步骤以scott用户为例说明。

8i,10g中在scott用户下创建測试表以说明outline的使用. 
Login as scott 
Create table t_test(col1 varchar2(2)); 
1. 
确定8i生产库的db,listener处于关闭的状态。

2. 
启动8i生产库instance. 
3. 
8i库使用system用户登陆,赋create any outline权限给sql运行用户。 
Grant create any outline to scott; 
4. 
8i库使用scott用户登陆。 
Create outline t_ol1 for category special on select * from t_test where col1=’00’; 
T_ol1àoutline name 
(注意每一个outline都须要使用唯一的名字,不能反复) 
Specialàoutline所属的类(category) 
Select * from t_test where col1=’00’;à须要保存outline的sql 
5. 
10g,8i库Unlock并改动outlin用户口令。

注意,outln用户的口令能够改动可是outln用户不能删除。

Alter user outln identified by outln account unlock; 
6. 
在8i库使用outln用户,导出outline数据。 
Exp outln/outln tables=ol/$ ol/$hints file=ol.dmp log=ol_exp.log 
将export的数据复制到10g库所在机器 
7. 
在10g库使用outln用户导入outline数据 
imp outln/outln file=ol.dmp ignore=y log=ol_imp.log 
8. 
在10g库使用sys用户更新ouline的signature 
connect sys/manager 
exec dbms_outln.update_signatures; 
启用stored outline 
alter system set use_stored_outlines=special; 
à指定outline category 
9. 
检測outline是否被使用 
connect scott/tiger 
create index I_test on t_test (col1); 
à创建索引。以改变运行计划 
explain plan for select * from t_test where col1=’00’; 
@?

/rdbms/admin/utlxplp

PLAN_TABLE_OUTPUT 
Plan hash value: 4036493941 
---------------------------------------------------------------------------- 
| Id  | Operation                                         | Name      | Rows  | Bytes      | Cost (%CPU)| Time     | 
---------------------------------------------------------------------------- 
|   0 | select STATEMENT                       |                 |     1      |     3           |  1200   (4)       | 00:00:17 | 
|*1  |TABLE ACCESS FULL                   | T_TEST |     1      |     3           |  1200   (4)      | 00:00:17 | 
---------------------------------------------------------------------------- 
Predicate Information (identified by operation id): 
--------------------------------------------------- 
   1 - filter("COL1"='00') 
Note 
----- 
   - outline "OL1" used for this statement 
à 
注意运行计划指出online已经使用 
17 rows selected. 
说明outline已经启用。 
假设没有outline的情况下应该使用索引,运行计划例如以下。 
PLAN_TABLE_OUTPUT 
-------------------------------------------------------------------------------- 
Plan hash value: 614253159 
--------------------------------------------------------------------------- 
| Id  | Operation                        | Name     | Rows  | Bytes | Cost (%CPU)| Time     | 
--------------------------------------------------------------------------- 
|   0 | select STATEMENT     |                |     1      |          3 |     3   (0)          | 00:00:01 | 
|*  1 |  INDEX RANGE SCAN| I_TEST |     1      |          3 |     3   (0)          | 00:00:01 | 
--------------------------------------------------------------------------- 
Predicate Information (identified by operation id): 
--------------------------------------------------- 
   1 - access("COL1"='00') 
Outline维护 
停止db使用outline功能: 
alter system set use_stored_outlines=false; 
disable/enable详细outline: 
alter outline ol_name disable; 
alter outline ol_name enable; 
删除outline category: 
9i, 10g: exec dbms_outln.drop_by_cat(‘category_name’); 
8i: exec outln_pkg.drop_by_cat(‘category_name’); 
outline相关视图 
dba_outlines 
检查outline是否存在 
select 
name, category, owner from dba_outlines; 
dba_outline_hints 
这个视图列出outline的hints内容

版权声明:本文博客原创文章。博客,未经同意,不得转载。

转载于:https://www.cnblogs.com/blfshiye/p/4665122.html

【转】Oracle Outline使用方法及注意事项相关推荐

  1. oracle分区注意点,ORACLE分区表梳理系列(一)- 分区表概述、分类、使用方法及注意事项...

    博文作者:Yumiko_sunny 博客链接:http://www.cnblogs.com/yumiko/ 本站随笔均为原创 前言 本文着重阐述分区表的概念.优势,以及 常用分区表的使用方法及使用过程 ...

  2. php获取表单$_files,PHP中$_FILES的使用方法及注意事项说明

    $_FILES:经由 HTTP POST 文件上传而提交至脚本的变量,类似于旧数组$HTTP_POST_FILES 数组(依然有效,但反对使用)详细信息可参阅 POST方法上传 $_FILES数组内容 ...

  3. oracle静默安装快吗,Oracle静默安装简要的注意事项

    Oracle 静默安装简要的注意事项,如果以 Oracle 身份运行以上命令.那么事先要把 $ORACLE_BASE $ORACLE_HOME 等相应的目录建立好 首页 → 数据库技术 背景: 阅读新 ...

  4. 用ASP.Net(C#)连接Oracle数据库的方法

    今天看了一下asp.net连接oracle数据库的方法,得到了如下代码.这段代码打开了MyTable表,并把操作员的名字列出.字段类型是OracleString.读取的时候用的是字段编号,我不知道怎么 ...

  5. Dubbo+zookeeper使用方法以及注意事项

    Dubbo+zookeeper使用方法以及注意事项 最近在一个项目中想做一个数据库查询的服务,目的是将数据库查询这块从程序中脱离出来,形成一个公共的服务平台,大家都可以调用,经过考虑决定选用Dubbo ...

  6. oracle分页的方法,Oracle数据库分页的集中方法(三种方法)

    在 做项目中用到了分页,下面说一下oracle分页的方法; 采用伪列 rownum 查询前10条记录 [sql] select * from t_user t where ROWNUM <10; ...

  7. C#连接Oracle数据库的方法(Oracle.DataAccess.Client也叫ODP.net)

    官方下载地址(ODP.net)(中文):http://www.oracle.com/technetwork/cn/topics/dotnet/downloads/index.html 官方下载地址(O ...

  8. phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的方法

    phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的方法 参考文章: (1)phalcon: 解决php7/phalcon3.2以上版本,不支持oracle数据库的 ...

  9. Win10远程桌面失败,这可能是由于CredSSP加密Oracle修正 解决方法

    Win10远程桌面失败,这可能是由于CredSSP加密Oracle修正 解决方法 参考文章: (1)Win10远程桌面失败,这可能是由于CredSSP加密Oracle修正 解决方法 (2)https: ...

最新文章

  1. #define、#undef、#ifdef、#ifndef、#if、#elif、#else、#endif、defined解释
  2. Java 调用存储过程 返回结果集
  3. update module
  4. JS笔记:检测客户端(引擎、浏览器、平台、操作系统)
  5. iphone手机型号获取
  6. Vector用法详解
  7. 【learning】一种奇妙的网络流建模方式
  8. python中re怎么念_Python中re(正则表达式)模块学习
  9. 【Java web】Servlet面试题
  10. rgb图像转换为二进制bin文件格式(matlab)
  11. opencv 学习之 液晶数字识别
  12. 结合OPENCV SIFT代码浅谈Lowe的一些SIFT算法细节
  13. 如何实现 React 中的状态自动保存?
  14. Python学习之路21-序列构成的数组
  15. 行情真的残酷,3年工龄老员工被毕业生“薪资倒挂”
  16. CRM客户关系管理系统源码跟单销售公司订单跟进客户公海合同管理办公erp客户管理(小程序+APP+H5)
  17. 社会,经济的1000+篇文章总结
  18. zabbix4.4.3使用postgresql数据库
  19. HDOJ 1290 献给杭电五十周年校庆的礼物
  20. 7000字用户画像技术及方法论

热门文章

  1. 超四分之一的人工可能被机器取代,AI或成英国脱欧的一大阻碍
  2. 中科大“重金”招博士,保底年收入10万,却只面向5校本科生
  3. 机器学习实战:支持向量机
  4. mysql navicat 组合索引_Navicat设置MySQL索引+MySQL索引知识
  5. rabbitmq优先级队列
  6. 053_Result结果
  7. 009_storage.conf配置详情
  8. 垃圾回收在哪一章java_Java垃圾回收机制
  9. 正则截取指定字符串 php,php截取指定字符串除了正则还有什么方法
  10. qpushbutton设置居中_Qt QGridLayout自动将项目居中(移动)到中间。