Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Download AND unpack sqltxplain FROM Oracle Customer support.
- Running coe_load_sql_profile.SQL does NOT require that sqltxplain be installed IN the DATABASE.
- Go TO utl DIRECTORY.
- @ coe_load_sql_profile.SQL 83rd64s4a149m f3pga3w75j6rw 3930194399
- 83rd64s4a149m IS the sqlid WITH the bad PLAN
- f3pga3w75j6rw IS the sqlid WITH good PLAN 3930194399
- Copy PLAN 3930194399 TO 83rd64s4a149m
- oracle@stormking cdb12102 coedemo]$ sqlplus /nolog @ ins.SQL
- SQL*Plus: RELEASE 12.1.0.2.0 Production ON Tue May 12 00:03:23 2015
- Copyright (c) 1982, 2014, Oracle. ALL rights reserved.
- Connected.
- SQL> SET linesize 200
- SQL> SET pagesize 100
- SQL> SET trimspool ON
- SQL> WHENEVER oserror EXIT 1
- SQL>
- SQL> DROP TABLE p;
- TABLE dropped.
- SQL> CREATE TABLE p (
- 2 m NUMBER,
- 3 n NUMBER,
- 4 a NUMBER
- 5 );
- TABLE created.
- SQL> CREATE INDEX i ON p ( m );
- INDEX created.
- SQL> INSERT INTO p ( m, n, a )
- 2 SELECT
- 3 CASE MOD ( LEVEL, 499979 ) WHEN 0 THEN 0 ELSE 1 END,
- 4 MOD ( LEVEL, 17 ),
- 5 MOD ( LEVEL, 137 )
- 6 FROM dual
- 7 CONNECT BY LEVEL <=1000000;
- 1000000 ROWS created.
- SQL> COMMIT;
- COMMIT complete.
- SQL>
- SQL> EXEC dbms_stats.gather_table_stats(NULL,'p' );
- PL/SQL PROCEDURE successfully completed.
- SQL> @ unwantedplan.SQL
- SQL> @ conn
- SQL> conn u1/u1@//stormking:1521/pdbm
- Connected.
- SQL> SET echo ON
- SQL> SET linesize 200
- SQL> SET pagesize 100
- SQL> SET trimspool ON
- SQL> WHENEVER oserror EXIT 1
- SQL> @ xvar
- SQL> variable sqlid VARCHAR2(13)
- SQL> variable cld NUMBER
- SQL> variable phv NUMBER
- SQL> variable xplanopts VARCHAR2(40)
- SQL> EXEC :xplanopts := NULL
- PL/SQL PROCEDURE successfully completed.
- SQL> SELECT COUNT(a) FROM p WHERE m = 0;
- COUNT(A)
- ----------
- 2
- SQL> @ phv
- SQL> BEGIN
- 2 SELECT sql_id, child_number, plan_hash_value INTO :sqlid, :cld, :phv
- 3 FROM v$sql
- 4 WHERE ( sql_id, child_number ) IN (
- 5 SELECT prev_sql_id, prev_child_number
- 6 FROM v$session WHERE sid = SYS_CONTEXT( 'userenv','sid' )
- 7 );
- 8 END;
- 9 /
- PL/SQL PROCEDURE successfully completed.
- SQL> @ xpl
- SQL> SELECT * FROM TABLE( dbms_xplan.display_cursor( :sqlid, :cld, :xplanopts ));
- PLAN_TABLE_OUTPUT
- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- SQL_ID 83rd64s4a149m, child NUMBER 0
- -------------------------------------
- SELECT COUNT(a) FROM p WHERE m = 0
- PLAN hash VALUE: 179592301
- ---------------------------------------------------------------------------
- | Id | Operation | Name | ROWS | Bytes | COST (%CPU)| TIME |
- ---------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | | | 538 (100)| |
- | 1 | SORT AGGREGATE | | 1 | 7 | | |
- |* 2 | TABLE ACCESS FULL| P | 500K| 3417K| 538 (2)| 00:00:01 |
- ---------------------------------------------------------------------------
- Predicate Information (IDENTIFIED BY operation id):
- ---------------------------------------------------
- 2 - filter("M"=0)
- 19 ROWS selected.
- SQL> @ wantedplan.SQL
- SQL> @ conn
- SQL> conn u1/u1@//stormking:1521/pdbm
- Connected.
- SQL> SET echo ON
- SQL> SET linesize 200
- SQL> SET pagesize 100
- SQL> SET trimspool ON
- SQL> WHENEVER oserror EXIT 1
- SQL> @ xvar
- SQL> variable sqlid VARCHAR2(13)
- SQL> variable cld NUMBER
- SQL> variable phv NUMBER
- SQL> variable xplanopts VARCHAR2(40)
- SQL> EXEC :xplanopts := NULL
- PL/SQL PROCEDURE successfully completed.
- SQL> SELECT /*+ index( p ) */ COUNT(a) FROM p WHERE m = 0;
- COUNT(A)
- ----------
- 2
- SQL> @ phv
- SQL> BEGIN
- 2 SELECT sql_id, child_number, plan_hash_value INTO :sqlid, :cld, :phv
- 3 FROM v$sql
- 4 WHERE ( sql_id, child_number ) IN (
- 5 SELECT prev_sql_id, prev_child_number
- 6 FROM v$session WHERE sid = SYS_CONTEXT( 'userenv','sid' )
- 7 );
- 8 END;
- 9 /
- PL/SQL PROCEDURE successfully completed.
- SQL> @ xpl
- SQL> SELECT * FROM TABLE( dbms_xplan.display_cursor( :sqlid, :cld, :xplanopts ));
- PLAN_TABLE_OUTPUT
- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- SQL_ID f3pga3w75j6rw, child NUMBER 0
- -------------------------------------
- SELECT /*+ index( p ) */ COUNT(a) FROM p WHERE m = 0
- PLAN hash VALUE: 3930194399
- ---------------------------------------------------------------------------------------------
- | Id | Operation | Name | ROWS | Bytes | COST (%CPU)| TIME |
- ---------------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | | | 1863 (100)| |
- | 1 | SORT AGGREGATE | | 1 | 7 | | |
- | 2 | TABLE ACCESS BY INDEX ROWID BATCHED| P | 500K| 3417K| 1863 (1)| 00:00:01 |
- |* 3 | INDEX RANGE SCAN | I | 500K| | 882 (1)| 00:00:01 |
- ---------------------------------------------------------------------------------------------
- Predicate Information (IDENTIFIED BY operation id):
- ---------------------------------------------------
- 3 - ACCESS("M"=0)
- 20 ROWS selected.
- SQL>@ coe_load_sql_profile.SQL 83rd64s4a149m f3pga3w75j6rw 3930194399
- Parameter 1:
- ORIGINAL_SQL_ID (required)
- Parameter 2:
- MODIFIED_SQL_ID (required)
- PLAN_HASH_VALUE AVG_ET_SECS
- -------------------- --------------------
- 3930194399 .003
- Parameter 3:
- PLAN_HASH_VALUE (required)
- VALUES passed TO coe_load_sql_profile:
- ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- ORIGINAL_SQL_ID: "83rd64s4a149m"
- MODIFIED_SQL_ID: "f3pga3w75j6rw"
- PLAN_HASH_VALUE: "3930194399"
- SQL>BEGIN
- 2 IF :sql_text IS NULL THEN
- 3 RAISE_APPLICATION_ERROR(-20100, 'SQL_TEXT for original SQL_ID &&original_sql_id. was not found in memory (gv$sqltext_with_newlines) or AWR (dba_hist_sqltext).');
- 4 END IF;
- 5 END;
- 6 /
- SQL>SET TERM OFF;
- SQL>BEGIN
- 2 IF :other_xml IS NULL THEN
- 3 RAISE_APPLICATION_ERROR(-20101, 'PLAN for modified SQL_ID &&modified_sql_id. and PHV &&plan_hash_value. was not found in memory (gv$sql_plan) or AWR (dba_hist_sql_plan).');
- 4 END IF;
- 5 END;
- 6 /
- SQL>
- SQL>SET ECHO OFF;
- 0001 BEGIN_OUTLINE_DATA
- 0002 IGNORE_OPTIM_EMBEDDED_HINTS
- 0003 OPTIMIZER_FEATURES_ENABLE('12.1.0.2')
- 0004 DB_VERSION('12.1.0.2')
- 0005 ALL_ROWS
- 0006 OUTLINE_LEAF(@"SEL$1")
- 0007 INDEX_RS_ASC(@"SEL$1" "P"@"SEL$1" ("P"."M"))
- 0008 BATCH_TABLE_ACCESS_BY_ROWID(@"SEL$1" "P"@"SEL$1")
- 0009 END_OUTLINE_DATA
- dropping staging TABLE "STGTAB_SQLPROF_83RD64S4A149M"
- creating staging TABLE "STGTAB_SQLPROF_83RD64S4A149M"
- packaging NEW SQL PROFILE INTO staging TABLE "STGTAB_SQLPROF_83RD64S4A149M"
- PROFILE_NAME
- ------------------------------
- 83RD64S4A149M_3930194399
- SQL>REM
- SQL>REM SQL PROFILE
- SQL>REM ~~~~~~~~~~~
- SQL>REM
- SQL>SELECT signature, name, category, TYPE, status
- 2 FROM dba_sql_profiles WHERE name = :name;
- SIGNATURE NAME CATEGORY TYPE STATUS
- -------------------- -------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- ------- --------
- 17202475392156976596 83RD64S4A149M_3930194399 DEFAULT MANUAL ENABLED
- SQL>SELECT description
- 2 FROM dba_sql_profiles WHERE name = :name;
- DESCRIPTION
- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- ORIGINAL:83RD64S4A149M MODIFIED:F3PGA3W75J6RW PHV:3930194399 SIGNATURE:17202475392156976596 CREATED BY COE_LOAD_SQL_PROFILE.SQL
- SQL>SET ECHO OFF;
- ****************************************************************************
- * Enter U1 password TO export staging TABLE STGTAB_SQLPROF_83rd64s4a149m
- ****************************************************************************
- Export: RELEASE 12.1.0.2.0 - Production ON Tue May 12 00:04:34 2015
- Copyright (c) 1982, 2014, Oracle AND/OR its affiliates. ALL rights reserved.
- Password:
- EXP-00004: invalid username OR password
- Username: u1@//stormking:1521/pdbm
- Password:
- Connected TO: Oracle DATABASE 12c Enterprise Edition RELEASE 12.1.0.2.0 - 64bit Production
- WITH the Partitioning, Automatic Storage Management, OLAP, Advanced Analytics
- AND REAL Application Testing options
- Export done IN AL32UTF8 character SET AND AL16UTF16 NCHAR character SET
- Note: grants ON tables/views/sequences/roles will NOT be exported
- Note: indexes ON tables will NOT be exported
- Note: CONSTRAINTS ON tables will NOT be exported
- About TO export specified tables via Conventional PATH ...
- . . exporting TABLE STGTAB_SQLPROF_83RD64S4A149M 1 ROWS exported
- Export terminated successfully without warnings.
- IF you need TO implement this Custom SQL PROFILE ON a similar SYSTEM,
- import AND unpack USING these commands:
- imp U1 FILE=STGTAB_SQLPROF_83rd64s4a149m.dmp tables=STGTAB_SQLPROF_83rd64s4a149m ignore=Y
- BEGIN
- DBMS_SQLTUNE.UNPACK_STGTAB_SQLPROF (
- profile_name => '83RD64S4A149M_3930194399',
- REPLACE => TRUE,
- staging_table_name => 'STGTAB_SQLPROF_83rd64s4a149m',
- staging_schema_owner => 'U1' );
- END;
- /
- updating: coe_load_sql_profile_83rd64s4a149m.LOG (deflated 77%)
- updating: STGTAB_SQLPROF_83rd64s4a149m.dmp (deflated 86%)
- adding: coe_load_sql_profile.LOG (deflated 62%)
- deleting: coe_load_sql_profile.LOG
- coe_load_sql_profile completed.
- SQL>
- SQL> @ unwantedplan.SQL
- SQL> @ conn
- SQL> conn u1/u1@//stormking:1521/pdbm
- Connected.
- SQL> SET echo ON
- SQL> SET linesize 200
- SQL> SET pagesize 100
- SQL> SET trimspool ON
- SQL> WHENEVER oserror EXIT 1
- SQL> @ xvar
- SQL> variable sqlid VARCHAR2(13)
- SQL> variable cld NUMBER
- SQL> variable phv NUMBER
- SQL> variable xplanopts VARCHAR2(40)
- SQL> EXEC :xplanopts := NULL
- PL/SQL PROCEDURE successfully completed.
- SQL> SELECT COUNT(a) FROM p WHERE m = 0;
- COUNT(A)
- ----------
- 2
- SQL> @ phv
- SQL> BEGIN
- 2 SELECT sql_id, child_number, plan_hash_value INTO :sqlid, :cld, :phv
- 3 FROM v$sql
- 4 WHERE ( sql_id, child_number ) IN (
- 5 SELECT prev_sql_id, prev_child_number
- 6 FROM v$session WHERE sid = SYS_CONTEXT( 'userenv','sid' )
- 7 );
- 8 END;
- 9 /
- PL/SQL PROCEDURE successfully completed.
- SQL> @ xpl
- SQL> SELECT * FROM TABLE( dbms_xplan.display_cursor( :sqlid, :cld, :xplanopts ));
- PLAN_TABLE_OUTPUT
- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
- SQL_ID 83rd64s4a149m, child NUMBER 0
- -------------------------------------
- SELECT COUNT(a) FROM p WHERE m = 0
- PLAN hash VALUE: 3930194399
- ---------------------------------------------------------------------------------------------
- | Id | Operation | Name | ROWS | Bytes | COST (%CPU)| TIME |
- ---------------------------------------------------------------------------------------------
- | 0 | SELECT STATEMENT | | | | 1863 (100)| |
- | 1 | SORT AGGREGATE | | 1 | 7 | | |
- | 2 | TABLE ACCESS BY INDEX ROWID BATCHED| P | 500K| 3417K| 1863 (1)| 00:00:01 |
- |* 3 | INDEX RANGE SCAN | I | 500K| | 882 (1)| 00:00:01 |
- ---------------------------------------------------------------------------------------------
- Predicate Information (IDENTIFIED BY operation id):
- ---------------------------------------------------
- 3 - ACCESS("M"=0)
- Note
- -----
- - SQL PROFILE 83RD64S4A149M_3930194399 used FOR this statement
- 24 ROWS selected.
- Done.
- PROFILE 83RD64S4A149M_3930194399 created.
- PLAN 3930194399 IS copied TO TO 83rd64s4a149m.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement