[20181007]12cR2 Using SQL Patch.txt --//12cR2 已经把sql打补丁集成进入dbms_sqldiag,不是11g的 DBMS_SQLDIAG_INTERNAL.I_CREATE_PATCH .做一个记录. --//以前的链接:http://blog.itpub.net/267265/viewspace-751900/=>[20121231]给sql打补丁.txt 1.环境: SCOTT@test01p> @ ver1 PORT_STRING VERSION BANNER CON_ID ------------------------------ -------------- -------------------------------------------------------------------------------- ---------- IBMPC/WIN_NT64-9.1.0 12.2.0.1.0 Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production 0 SCOTT@test01p> @ desc_proc sys dbms_sqldiag create_sql_patch INPUT OWNER PACKAGE_NAME OBJECT_NAME sample : @desc_proc sys dbms_stats gather_%_stats OWNER PACKAGE_NAME OBJECT_NAME SEQUENCE ARGUMENT_NAME DATA_TYPE IN_OUT DATA_TYPE DEFAULTED ---------- -------------------- ---------------- -------- -------------------- -------------------- --------- -------------------- ---------- SYS DBMS_SQLDIAG CREATE_SQL_PATCH 1 VARCHAR2 OUT VARCHAR2 N 2 SQL_ID VARCHAR2 IN VARCHAR2 N 3 HINT_TEXT CLOB IN CLOB N 4 NAME VARCHAR2 IN VARCHAR2 Y 5 DESCRIPTION VARCHAR2 IN VARCHAR2 Y 6 CATEGORY VARCHAR2 IN VARCHAR2 Y 7 VALIDATE PL/SQL BOOLEAN IN PL/SQL BOOLEAN Y 1 VARCHAR2 OUT VARCHAR2 N 2 SQL_TEXT CLOB IN CLOB N 3 HINT_TEXT CLOB IN CLOB N 4 NAME VARCHAR2 IN VARCHAR2 Y 5 DESCRIPTION VARCHAR2 IN VARCHAR2 Y 6 CATEGORY VARCHAR2 IN VARCHAR2 Y 7 VALIDATE PL/SQL BOOLEAN IN PL/SQL BOOLEAN Y 14 rows selected. 2.测试: SCOTT@test01p> select /*+ full(dept) */ * from dept where deptno=10; DEPTNO DNAME LOC ----------------- -------------------- ------------- 10 ACCOUNTING NEW YORK SCOTT@test01p> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID g0qybdz1796cn, child number 0 ------------------------------------- select /*+ full(dept) */ * from dept where deptno=10 Plan hash value: 3383998547 --------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 3 (100)| | |* 1 | TABLE ACCESS FULL| DEPT | 1 | 20 | 3 (0)| 00:00:01 | --------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 / DEPT@SEL$1 Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("DEPTNO"=10) --//sql_id=g0qybdz1796cn,实际上走索引更佳.注意多执行几次保留在共享池. SCOTT@test01p> variable patch_name varchar2(2000); SCOTT@test01p> exec :patch_name := dbms_sqldiag.create_sql_patch(sql_id=>'g0qybdz1796cn',hint_text=>'index(dept pk_dept)'); PL/SQL procedure successfully completed. --//现在居然scott用户就可以执行,我记忆里以前不行,必须sys用户执行. SCOTT@test01p> print :patch_name PATCH_NAME ------------------------------------------ SYS_SQLPTCH_01664e9a59810003 --//相关信息记录在视图DBA_SQL_PATCHES. SCOTT@test01p> select NAME c30,SQL_TEXT from DBA_SQL_PATCHES; C30 SQL_TEXT ------------------------------ ------------------------------------------------------------ SYS_SQLPTCH_01664e9a59810003 select /*+ full(dept) */ * from dept where deptno=10 SCOTT@test01p> select /*+ full(dept) */ * from dept where deptno=10; DEPTNO DNAME LOC ----------------- -------------------- ------------- 10 ACCOUNTING NEW YORK SCOTT@test01p> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID g0qybdz1796cn, child number 0 ------------------------------------- select /*+ full(dept) */ * from dept where deptno=10 Plan hash value: 3383998547 --------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | --------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 3 (100)| | |* 1 | TABLE ACCESS FULL| DEPT | 1 | 20 | 3 (0)| 00:00:01 | --------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 / DEPT@SEL$1 Predicate Information (identified by operation id): --------------------------------------------------- 1 - filter("DEPTNO"=10) Note ----- - SQL patch "SYS_SQLPTCH_01664e9a59810003" used for this statement --//没有起作用.实际上不能使用这样的提示.执行如下: select * from dept where deptno=10; --//再看执行计划提示: SCOTT@test01p> @ dpc '' outline ... Outline Data ------------- /*+ BEGIN_OUTLINE_DATA IGNORE_OPTIM_EMBEDDED_HINTS OPTIMIZER_FEATURES_ENABLE('12.2.0.1') DB_VERSION('12.2.0.1') ALL_ROWS OUTLINE_LEAF(@"SEL$1") INDEX_RS_ASC(@"SEL$1" "DEPT"@"SEL$1" ("DEPT"."DEPTNO")) END_OUTLINE_DATA */ --//使用提示INDEX_RS_ASC(@"SEL$1" "DEPT"@"SEL$1" ("DEPT"."DEPTNO")).才行. SCOTT@test01p> exec dbms_sqldiag.drop_sql_patch(name=>'SYS_SQLPTCH_01664e9a59810003'); PL/SQL procedure successfully completed. SCOTT@test01p> exec :patch_name := dbms_sqldiag.create_sql_patch(sql_id=>'g0qybdz1796cn',hint_text=>'INDEX_RS_ASC(@"SEL$1" "DEPT"@"SEL$1" ("DEPT"."DEPTNO"))'); PL/SQL procedure successfully completed. SCOTT@test01p> print :patch_name PATCH_NAME ------------------------------------ SYS_SQLPTCH_01664ea1bc190004 SCOTT@test01p> select /*+ full(dept) */ * from dept where deptno=10; DEPTNO DNAME LOC ----------------- -------------------- ------------- 10 ACCOUNTING NEW YORK SCOTT@test01p> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID g0qybdz1796cn, child number 0 ------------------------------------- select /*+ full(dept) */ * from dept where deptno=10 Plan hash value: 2852011669 ---------------------------------------------------------------------------------------- | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | ---------------------------------------------------------------------------------------- | 0 | SELECT STATEMENT | | | | 1 (100)| | | 1 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 20 | 1 (0)| 00:00:01 | |* 2 | INDEX UNIQUE SCAN | PK_DEPT | 1 | | 0 (0)| | ---------------------------------------------------------------------------------------- Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 / DEPT@SEL$1 2 - SEL$1 / DEPT@SEL$1 Predicate Information (identified by operation id): --------------------------------------------------- 2 - access("DEPTNO"=10) Note ----- - SQL patch "SYS_SQLPTCH_01664ea1bc190004" used for this statement - Warning: basic plan statistics not available. These are only collected when: * hint 'gather_plan_statistics' is used for the statement or * parameter 'statistics_level' is set to 'ALL', at session or system level --//OK,现在起作用了. 3.我个人认为sql打补丁最佳方式是加BIND_AWARE或者result_cache提示,其它情况我很少使用. --//我记忆里11g下不能加result_cache,再加这个提示看看. SCOTT@test01p> exec dbms_sqldiag.drop_sql_patch(name=>'SYS_SQLPTCH_01664ea1bc190004'); PL/SQL procedure successfully completed. SCOTT@test01p> exec :patch_name := dbms_sqldiag.create_sql_patch(sql_id=>'g0qybdz1796cn',hint_text=>'result_cache INDEX_RS_ASC(@"SEL$1" "DEPT"@"SEL$1" ("DEPT"."DEPTNO"))'); PL/SQL procedure successfully completed. SCOTT@test01p> Select /*+ full(dept) */ * from dept where deptno=10; DEPTNO DNAME LOC ----------------- -------------------- ------------- 10 ACCOUNTING NEW YORK --//我修改select=>Select. SCOTT@test01p> @ dpc '' '' PLAN_TABLE_OUTPUT ------------------------------------- SQL_ID 4sg4rbwu9r59q, child number 0 ------------------------------------- Select /*+ full(dept) */ * from dept where deptno=10 Plan hash value: 2852011669 ------------------------------------------------------------------------------------------------------------ | Id | Operation | Name | E-Rows |E-Bytes| Cost (%CPU)| E-Time | ------------------------------------------------------------------------------------------------------------ | 0 | SELECT STATEMENT | | | | 1 (100)| | | 1 | RESULT CACHE | 364dg0urjj61xc7was3s7u5hcj | | | | | | 2 | TABLE ACCESS BY INDEX ROWID| DEPT | 1 | 20 | 1 (0)| 00:00:01 | |* 3 | INDEX UNIQUE SCAN | PK_DEPT | 1 | | 0 (0)| | ------------------------------------------------------------------------------------------------------------ Query Block Name / Object Alias (identified by operation id): ------------------------------------------------------------- 1 - SEL$1 2 - SEL$1 / DEPT@SEL$1 3 - SEL$1 / DEPT@SEL$1 Predicate Information (identified by operation id): --------------------------------------------------- 3 - access("DEPTNO"=10) Result Cache Information (identified by operation id): ------------------------------------------------------ 1 - Note ----- - SQL patch "SYS_SQLPTCH_01664eab2c7a0006" used for this statement - Warning: basic plan statistics not available. These are only collected when: * hint 'gather_plan_statistics' is used for the statement or * parameter 'statistics_level' is set to 'ALL', at session or system level --//OK,12c已经修复这个问题.
[20181007]12cR2 Using SQL Patch.txt
来源:这里教程网
时间:2026-03-03 12:03:11
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- win10电脑虚拟网络设置方法
win10电脑虚拟网络设置方法
26-03-03 - How to Rename Database/Change DB_NAME or ORACLE_SID/Instance Name-15390.1
- APP_CALCULATE.RUNNING_TOTAL用法
APP_CALCULATE.RUNNING_TOTAL用法
26-03-03 - XML Publisher 技巧
XML Publisher 技巧
26-03-03 - Oracle EBS Form个性化开发
Oracle EBS Form个性化开发
26-03-03 - EBS 启用帮助-诊断
EBS 启用帮助-诊断
26-03-03 - EBS中将请求request变为功能function(菜单项)
EBS中将请求request变为功能function(菜单项)
26-03-03 - 数据泵expdp导出遇到ORA-01555和ORA-22924问题的分析和处理
- 学习的好地方 - 阿里数据库内核组月报站点
学习的好地方 - 阿里数据库内核组月报站点
26-03-03 - 我经常用的一些vi快捷键
我经常用的一些vi快捷键
26-03-03
