SQL Plan Management

任何数据库应用程序的性能都严重依赖于它的查询执行。当没有任何用户介入时Oracle优化器是完全能够评估最优执行计划的,SQL语句的执行计划因为各种原因,比如:重新收集优化器统计信息,改变优化器参数或方案/元数据定义而可能会出现改变。但是不能保证执行计划的改变总是会提高性能,因此会导致有些管理员会锁定SQL的执行计划(Stored Outline)或锁定统计信息。然而,这样做会导致不能使用新版优化器为了提供高SQL性能所提供的一些新特性或新的访问路径。

Oracle的每一个新版本中都包含了一些新特性用来提高查询的性能。然而某些应用(或部分应用)是静态的并且比起在特定情况下提高性能来说可预测的性能是更可取的。Oracle11G提供了SPM来完全透时的控制执行计划的演变。使用SPM优化器自动管理执行计划并且确保只有已经或被验证的执行计划才会被使用。当找到SQL语句的新执行计划时,但直到它被数据库进行验证或其性能比当前执行计划高才会被使用。

SQL Plan Management是一种预防机制,记录与评估SQL语句的执行计划。这种机制可以创建一个SQL执行计划基线,它是由一组已知性能良好的执行计划组成。不管系统发生何种改变,SQL执行计划基线被用来维护相关SQL的性能,提供了执行计划的稳定性。

SPM确保SQL的性能不会因为执行计划的改变而降低。为了保证这一点,只有SQL执行计划ACCEPTED为YES才会被优化器所使用。

SPM有三个主要组件:
1.SQL执行计划基线捕获
创建SQL执行计划基线这代表对所有相关SQL语句授受这个执行计划。SQL执行计划基线被存储在SYSAUX表空间中的SQL Management BASE中的plan history中,可以通过dba_sql_plan_baselines视图进行查询。

2.SQL执行计划基线选择
确保只有ACCEPTED为YES的执行计划才会被使用,使用SQL执行计划基线并在plan history中跟踪所有新的执行计划。plan history由ACCEPTED为NO与ACCEPTED为YES的执行计划组成。ACCEPTED为NO的执行计划可能是没有被验证或者被拒绝(验证了但性能比当前使用的执行计划要差)

3.SQL执行计划基线演进
对plan history中的所有没有被验证的执行计划进行评估让其成为接受的或拒绝的执行计划

SQL执行计划基线捕获
为了让SPM起作用必须首先使用当前基于成本的执行计划来作为SQL Management Base,这将成为每个SQL语句的SQL执行计划基线。有两种不同的方法来创建SQL Management Base:
.自动捕获执行计划
.批量加载执行计划

自动捕获执行计划
自动捕获执行计划是由参数optimizer_capture_sql_plan_baselines=true来开启的(缺省值为false)当自动捕获执行计划被启用时,SPM档案库将会自动存储任何重复执行的SQL语句的执行计划。为了识别重复执行的SQL语句,优化器将会在每个SQL语句第一次被编译时进行标识,如果这个SQL语句再次被执行或编译,那么就会将这个SQL语句标记为重复执行的SQL,将会为这个SQL语句创建SQL plan history,它将包含生成的执行计划,比如:SQL文本,存储概要,绑当定变量与编译环境等信息。当前基于成本的执行计划将会作为SQL语句的第一个SQL执行计划基线并且这个执行计划的ACCEPTED会标记为YES,只有ACCEPTED为YES的执行计划才会被使用,如果将来对于这个SQL语句产生了新的执行计划,这个执行计划将会增加到plan history中并且将会被标记为验证过的。只有当它的性能比当前所使用的执行计划更好时才会将ACCEPTED标记为YES。

批量加载执行计划
批量加载执行计划在数据库从之前的版本升级致电Oracle 11g或部署新应用程序时很有用。批量加载可以与自动加载执行计划结合使用或者代替自动加载执行计划。执行计划被批量加载时会自动接受创建的新SQL执行计划基线或者向已经存在的增加一个。SQL anagement BASE可以使用三种不同的方法来批量加载执行计划。
1.从指定的SQL Tuning Set(STS)中加载执行计划

SQL> BEGIN
  2  DBMS_SQLTUNE.CREATE_SQLSET(
  3  sqlset_name => 'my_sql_tuning_set',
  4  description => 'TEST');
  5  END;
  6  /
 
PL/SQL procedure successfully completed

SQL> DECLARE
  2    l_cursor  DBMS_SQLTUNE.sqlset_cursor;
  3  BEGIN
  4    OPEN l_cursor FOR
  5      SELECT VALUE(p)
  6      FROM   TABLE (DBMS_SQLTUNE.select_cursor_cache (
  7                      NULL, -- basic_filter
  8                      NULL, -- object_filter
  9                      NULL, -- ranking_measure1
 10                      NULL, -- ranking_measure2
 11                      NULL, -- ranking_measure3
 12                      NULL, -- result_percentage
 13                      2,    -- result_limit
                         'all') --attribute_list    
 14                    ) p;
 15  
 16    DBMS_SQLTUNE.load_sqlset (
 17      sqlset_name     => 'my_sql_tuning_set',
 18      populate_cursor => l_cursor);
 19  END;
 20  /
 
PL/SQL procedure successfully completed

或者从awr中加载

SQL> DECLARE
  2    l_cursor  DBMS_SQLTUNE.sqlset_cursor;
  3  BEGIN
  4    OPEN l_cursor FOR
  5      SELECT VALUE(p)
  6      FROM   TABLE (DBMS_SQLTUNE.select_workload_repository (
  7                      29027,  -- begin_snap
  8                      29028,  -- end_snap
  9                      NULL, -- basic_filter
 10                      NULL, -- object_filter
 11                      NULL, -- ranking_measure1
 12                      NULL, -- ranking_measure2
 13                      NULL, -- ranking_measure3
 14                      NULL, -- result_percentage
 15                      2,   -- result_limit
 16                      'all'--attribute_list
 17                      )
 18                    ) p;
 19  
 20    DBMS_SQLTUNE.load_sqlset (
 21      sqlset_name     => 'my_sql_tuning_set',
 22      populate_cursor => l_cursor);
 23  END;
 24  /
 
PL/SQL procedure successfully completed
SQL> select * from dba_sqlset where name='my_sql_tuning_set';
 
        ID NAME                           OWNER                          DESCRIPTION                                                                      CREATED     LAST_MODIFIED STATEMENT_COUNT
---------- ------------------------------ ------------------------------ -------------------------------------------------------------------------------- ----------- ------------- ---------------
        15 my_sql_tuning_set              INSUR_CHANGDE                  TEST                                                                             2016/5/26 1 2016/5/26 12:               2
 
SQL> select * from dba_sqlset_statements where sqlset_name='my_sql_tuning_set';
 
SQLSET_NAME                    SQLSET_OWNER                    SQLSET_ID SQL_ID        FORCE_MATCHING_SIGNATURE SQL_TEXT                                                                         PARSING_SCHEMA_NAME            PARSING_SCHEMA_ID PLAN_HASH_VALUE BIND_DATA                                                                        BINDS_CAPTURED MODULE                                           ACTION                           ELAPSED_TIME   CPU_TIME BUFFER_GETS DISK_READS DIRECT_WRITES ROWS_PROCESSED    FETCHES EXECUTIONS END_OF_FETCH_COUNT OPTIMIZER_COST OPTIMIZER_ENV                                                                      PRIORITY COMMAND_TYPE FIRST_LOAD_TIME     STAT_PERIOD ACTIVE_STAT_PERIOD OTHER                                                                            PLAN_TIMESTAMP    SQL_SEQ
------------------------------ ------------------------------ ---------- ------------- ------------------------ -------------------------------------------------------------------------------- ------------------------------ ----------------- --------------- -------------------------------------------------------------------------------- -------------- ------------------------------------------------ -------------------------------- ------------ ---------- ----------- ---------- ------------- -------------- ---------- ---------- ------------------ -------------- -------------------------------------------------------------------------------- ---------- ------------ ------------------- ----------- ------------------ -------------------------------------------------------------------------------- -------------- ----------
my_sql_tuning_set              INSUR_CHANGDE                          15 2823agph489xc        1.702412129134E19 select id,name,password from gl_czy where name ='系统管理'                       ZW4001                                       248      2543410975                                                                                                 R9_AppSrv.EXE                                                                           124908      32105         324         48             0             21         42         21                 21              3 E289FB89A4E49800CE001000AEF9C3E2CFFA3310564145555195A110555555154554555859155544                       3                                                                                                                                     2016/2/16 10:5        717
 
my_sql_tuning_set              INSUR_CHANGDE                          15 1hfffsrmgqhwp      1.11129101236943E19 select nvl(catalog_center,center_id) as  catalog_center from bs_hospital_collate INSUR_CHANGDE                                211      2429242715                                                                                                 JDBC Thin Client                                                                        141372     141372       11475          0             0           3825       3825       3825               3825              1 E289FB89A4E49800CE001000AEF9C3E2CFFA3310564145555195A110555555154554555859155544                       3                                                                                                                                     2016/5/23 14:2        718
 
SQL> exec dbms_sqltune.create_stgtab_sqlset(table_name => ‘TABLE_SQLSET’,schema_name 

=> ‘JY’);

PL/SQL procedure successfully completed

SQL> exec dbms_sqltune.pack_stgtab_sqlset(sqlset_name => 

‘my_sql_tuning_set’,staging_table_name => ‘TABLE_SQLSET’,staging_schema_owner =>’JY

’);

PL/SQL procedure successfully completed


导出存储STS

[IBMP740-1:oracle:/yb_oradata/RLZYbak]$expdp jy/jy directory=dump_RLZY dumpfile=stgtab_sqlset.dmp logfile=stgtab_sqlset.log tables=TABLE_SQLSET                         

                                < Export: Release 10.2.0.4.0 - 64bit Production on Thursday, 26 May, 2016 16:57:34

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "INSUR_CHANGDE"."SYS_EXPORT_TABLE_01":  insur_changde/******** directory=dump_RLZY dumpfile=stgtab_sqlset.dmp logfile=stgtab_sqlset.log tables=TABLE_SQLSET 
Estimate in progress using BLOCKS method...
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 576 KB
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
. . exported "INSUR_CHANGDE"."TABLE_SQLSET"              16.91 KB       2 rows
. . exported "INSUR_CHANGDE"."TABLE_SQLSET_CPLANS"       24.10 KB       5 rows
. . exported "INSUR_CHANGDE"."TABLE_SQLSET_CBINDS"       9.507 KB       0 rows
Master table "INSUR_CHANGDE"."SYS_EXPORT_TABLE_01" successfully loaded/unloaded
******************************************************************************
Dump file set for INSUR_CHANGDE.SYS_EXPORT_TABLE_01 is:
  /bak/dpdump/stgtab_sqlset.dmp
Job "INSUR_CHANGDE"."SYS_EXPORT_TABLE_01" successfully completed at 16:59:25

导入STS

[oracle@jyrac1 ~]$ impdp jy/jy directory=dump_dir dumpfile=stgtab_sqlset.dmp remap_schema=insur_changde:jy remap_tablespace=hygeia:users

Import: Release 11.2.0.4.0 - Production on Thu May 26 17:53:08 2016

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
Master table "JY"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "JY"."SYS_IMPORT_FULL_01":  jy/******** directory=dump_dir dumpfile=stgtab_sqlset.dmp remap_schema=insur_changde:jy remap_tablespace=hygeia:users 
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "JY"."TABLE_SQLSET"                         16.91 KB       2 rows
. . imported "JY"."TABLE_SQLSET_CPLANS"                  24.10 KB       5 rows
. . imported "JY"."TABLE_SQLSET_CBINDS"                  9.507 KB       0 rows
Processing object type TABLE_EXPORT/TABLE/INDEX/INDEX
Job "JY"."SYS_IMPORT_FULL_01" successfully completed at Thu May 26 17:59:33 2016 elapsed 0 00:06:05

unpack STS

SQL> begin
  2    DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET(sqlset_name          => 'my_sql_tuning_set',
  3                                      sqlset_owner         => 'JY',
  4                                      replace              => true,
  5                                      staging_table_name   => 'TABLE_SQLSET',
  6                                      staging_schema_owner => 'JY');
  7  END;
  8  /
PL/SQL procedure successfully completed

从STS加载SQL执行计划基线

SQL> declare
  2  ret number;
  3  begin
  4  ret := dbms_spm.load_plans_from_sqlset(sqlset_name => 'my_sql_tuning_set',sqlset_owner => 'INSUR_CHANGDE');
  5  end;
  6  /
  
 
PL/SQL procedure successfully completed

SQL> select sql_handle, plan_name,origin, enabled, accepted,sql_text from dba_sql_plan_baselines where parsing_schema_name in('ZW4001','INSUR_CHANGDE');
 
SQL_HANDLE                     PLAN_NAME                      ORIGIN         ENABLED ACCEPTED SQL_TEXT
------------------------------ ------------------------------ -------------- ------- -------- 

--------------------------------------------------------------------------------
SQL_c4a3ce0d598be4e4           SQL_PLAN_c98yf1pcsrt74ebcd9fdf MANUAL-LOAD    YES     YES      select id,name,password from gl_czy where name ='系统管理'
 
SQL_b9bc48036c46e780           SQL_PLAN_bmg280dq4dtw0e85be7cc MANUAL-LOAD    YES     YES      select nvl(catalog_center,center_id) as  catalog_center from 

bs_hospital_collate
 

2.使用Cursor Cache中的执行计划
可以从cursor cache中直接加载SQL语句的执行计划到SQL Management Base中。可以通过module名,方案或SQL_ID来进过滤,可以用来标记想要捕获的SQL语句或一组SQL语句。

SQL> set autotrace traceonly
SQL> select * from t1 where c1>4076;

924 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3617692013

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |   957 |  3828 |     5   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T1   |   957 |  3828 |     5   (0)| 00:00:01 |
--------------------------------------------------------------------------



SQL> select sql_text,sql_id,plan_hash_value from v$sqlarea where sql_text like '%c1>4076%';
 
SQL_TEXT                                                                         SQL_ID        PLAN_HASH_VALUE
-------------------------------------------------------------------------------- ------------- ---------------
select * from t1 where c1>4076                                                   0006gg4zsmmcg      3617692013


SQL> var n number
SQL> begin
  2  :n:=dbms_spm.load_plans_from_cursor_cache(sql_id=>'0006gg4zsmmcg', plan_hash_value=>'3617692013', fixed =>'NO', enabled=>'YES');
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> select sql_handle, plan_name,origin, enabled, accepted,sql_text  from dba_sql_plan_baselines  where sql_text like 'select %c1>4076';
 
SQL_HANDLE                     PLAN_NAME                      ORIGIN         ENABLED ACCEPTED SQL_TEXT
------------------------------ ------------------------------ -------------- ------- -------- 

--------------------------------------------------------------------------------
SQL_67b129b37635284b           SQL_PLAN_6gc99qdv3aa2bdbd90e8e MANUAL-LOAD    YES     YES      select * from t1 where c1>4076


3.从staging table中unpack SQL执行计划基线
在原系统中创建staing表

SQL> set autotrace traceonly 
SQL> select * from t1 where c1>4076;

924 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 1369807930

---------------------------------------------------------------------------
| Id  | Operation        | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT |        |   924 |  3696 |     4   (0)| 00:00:01 |
|*  1 |  INDEX RANGE SCAN| IDX_T1 |   924 |  3696 |     4   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("C1">4076)

Note
-----
   - SQL plan baseline "SQL_PLAN_6gc99qdv3aa2bbeaed07c" used for this statement


SQL> exec dbms_spm.create_stgtab_baseline(table_name => 'BASELINE_TABLE',table_owner => 'JY');
 
PL/SQL procedure successfully completed

将SQL执行计划基线从SQL Management Base中加载到staing table中

SQL> declare
  2  x number;
  3  begin
  4   x:=dbms_spm.pack_stgtab_baseline(table_name => 'BASELINE_TABLE',table_owner => 'JY',creator =>'JY');
  5  end;
  6  /
  
PL/SQL procedure successfully completed

SQL> declare
  2  cursor c is select sql_handle, plan_name,origin, enabled, accepted,sql_text from dba_sql_plan_baselines where parsing_schema_name in('JY');
  3  x number;
  4  begin
  5   for i in c loop
  6    x:=dbms_spm.drop_sql_plan_baseline(sql_handle => ''||i.sql_handle,plan_name => ''||i.plan_name);
  7   end loop;
  8  end;
  9  /
 
PL/SQL procedure successfully completed

SQL> select * from t1 where c1>4076;

924 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 1369807930

---------------------------------------------------------------------------
| Id  | Operation        | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT |        |   924 |  3696 |     4   (0)| 00:00:01 |
|*  1 |  INDEX RANGE SCAN| IDX_T1 |   924 |  3696 |     4   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("C1">4076)


导出staing table并在目标数据库中导入,这里省略了相关操作。在目标数据库将SQL执行计划基线从staging table中加载到SQL Management Base中

SQL> declare
  2  x number;
  3  begin
  4   x:=dbms_spm.unpack_stgtab_baseline(table_name => 'BASELINE_TABLE',table_owner => 'JY');
  5  end;
  6  /
 
PL/SQL procedure successfully completed


SQL> select * from t1 where c1>4076;

924 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 1369807930

---------------------------------------------------------------------------
| Id  | Operation        | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT |        |   924 |  3696 |     4   (0)| 00:00:01 |
|*  1 |  INDEX RANGE SCAN| IDX_T1 |   924 |  3696 |     4   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("C1">4076)

Note
-----
   - SQL plan baseline "SQL_PLAN_6gc99qdv3aa2bbeaed07c" used for this statement

SQL执行计划基线选择
每次SQL被编译时,优化器首先使用传统的基于成本的方法来创建一个最优执行计划。如果参数optimizer_use_plan_baselines设置为true(缺省值),那么在基于成本的执行计划被执行之前,优化器将尝试在SQL语句的SQL执行计划基线中找到一个匹配的执行计划,这是作为内存操作来执行的,如果找到了匹配的执行计划将使用该执行计划。否则,将生成一个新的执行计划并增加到plan history中,在执行计划被授受之前必须被验证。优化器将从该SQL所关联的所有执行计划中选择一个成本最低的来执行。然而,如果系统的改变造成所有已经接受的执行计划不能重现,那么优化器将会使用新的执行计划。

SQL执行计划基线也可能影响优化器对执行计划的选择。SQL执行计划基线可以被标记为固定(fixed),Fixed的SQL执行计划基线指示优化器会优先选择。如果优化器正在评估SQL执行计划基线的成本并且有一个执行计划是fixed,并且fixed的执行计划可以重现,那么优化器只会评估fixed执行计划的成本。如果fixed的执行计划不可以重现,那么优化器将会评估其它的SQL执行计划基线并从其中选择一个成本最低的执行计划。评估一个执行计划的成本远不及硬解析那样昂贵。优化器不会考虑所有可能的访问方法,只会考虑特定的访问方法。

SQL执行计划的演进
当优化器为SQL语句找到一个新执行计划时,这个新的执行计划会作为未被接受的执行计划被增加到plan history中,在它成为接受(ACCEPTED=YES)的执行计划之前需要被验证。可以通过使用EM或执行dbms_spm.evolve_sql_plan_baseline来演进。使用这些方法有三种选择:
1.只有新执行计划比现有的SQL执行计划基线性能更好才将ACCEPTED设置为YES
2.不进行性能验证就将ACCEPTED设置为YES
3.运行性能比较并生成一个报告但不演进新的执行计划

如果选择选项1,它将触发新的执行计划被评估来比较是否它的性能要比被选择的执行计划好。如果是,那么新的执行计划会被增加到SQL执行计划基线并且ACCEPTED设置为YES。否则将新执行计划的ACCEPTED设置为NO并增加到plan history中,但它的last_verified属性将更新为当前时间戳,并且会返回一个格式化的文本报告,它包含了新执行计划与原执行计划的性能统计数据。

如果选择选项2,新执行计划将会增加到SQL执行计划基线中,而不对性能进行验证并将ACCEPTED设置为YES,同样也会生成报告。

如果选择选项3,将会验证新执行计划的性能是否比已选择的执行计划好,但是就算性能更好也会不自动将新执行计划的ACCEPTED设置为YES,在评估之后只会生成报告。

SQL Management Base的使用与管理
有两个参数用来控制SPM
1.optimizer_capture_sql_plan_baselines:对重复执行的SQL语句是否自动捕获新的SQL执行计划基线。缺省值是false。

2.optimizer_use_sql_plan_baselines:控制优化器是否使用SQL执行计划基线。当启用时,优化器在编译SQL语句时会查找SQL执行计划基线中的执行计划。如果找到,优化器将会从SQL执行计划基线中选择一个成本最低的执行计划。缺省值是true。

SQL Management Base空间消耗的管理
statment log,plan histories与SQL执行计划基线都被存储在SQL Management Base中。SQL Management Base是数据库数据字典的一部分存储在SYSAUX表空间中。缺省情况下,SQL Management Base的空间限制不会超过SYSAUX表空间的10%。但是也可以使用dbms_spm.configure来进行修改让其空间限制处于SYSAUX表空间的1%到50%之间。每周后台进程都会检测SQL Management Base所占用的空间大小,并且当使用空间超过设置的限制,进程就会向alert.log记录一条警告信息。也有一个每周调度清除作业来管理SQL Management Base所占用的空间。在维护窗口内这个任务会自动运行并且任何超过53周没有被使用过的执行计划将会被清除,因此确保只有SQL语句一旦运行就能保证一年之内相关执行计划是可以使用的。可以使用dbms_spm.configure来将没使用的执行计划保留周期修改为5到523周这个范围之内。

因为SQL Management Base使用SYSAUX表侬间来存储执行计划,如果SYSAUX表空间不能使用,那么SPM也将不能使用。

通过DBA视图监控SPM
dbs_sql_plan_baselines视图显示了关于当前为特定SQL语句所创建的SQL执行计划基线。

SQL> select sql_handle, plan_name,origin, enabled, accepted,sql_text,fixed,autopurge from dba_sql_plan_baselines where parsing_schema_name in('JY') and 

sql_handle='SQL_67b129b37635284b';
 
SQL_HANDLE                     PLAN_NAME                      ORIGIN         ENABLED ACCEPTED SQL_TEXT                                                                  

       FIXED AUTOPURGE
------------------------------ ------------------------------ -------------- ------- -------- 

-------------------------------------------------------------------------------- ----- ---------
SQL_67b129b37635284b           SQL_PLAN_6gc99qdv3aa2bbeaed07c AUTO-CAPTURE   YES     YES      select * from t1 where c1>4076                                            

       NO    YES
SQL_67b129b37635284b           SQL_PLAN_6gc99qdv3aa2bdbd90e8e MANUAL-LOAD    NO      YES      select * from t1 where c1>4076                                            

       NO    YES

为了查看任何SQL执行计划基线的详细执行计划可以执行dbms_xplan.display_sql_plan_baseline

SQL> select * from table(dbms_xplan.display_sql_plan_baseline(sql_handle => 'SQL_67b129b37635284b',plan_name => 'SQL_PLAN_6gc99qdv3aa2bdbd90e8e'));
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
SQL handle: SQL_67b129b37635284b
SQL text: select * from t1 where c1>4076
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Plan name: SQL_PLAN_6gc99qdv3aa2bdbd90e8e         Plan id: 3688435342
Enabled: NO      Fixed: NO      Accepted: YES     Origin: MANUAL-LOAD
--------------------------------------------------------------------------------
Plan hash value: 3617692013
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |   924 |  3696 |     5   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T1   |   924 |  3696 |     5   (0)| 00:00:01 |
--------------------------------------------------------------------------
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - filter("C1">4076)
 
24 rows selected
 
SQL> select * from table(dbms_xplan.display_sql_plan_baseline(sql_handle => 'SQL_67b129b37635284b',plan_name => 'SQL_PLAN_6gc99qdv3aa2bbeaed07c'));
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
SQL handle: SQL_67b129b37635284b
SQL text: select * from t1 where c1>4076
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------
Plan name: SQL_PLAN_6gc99qdv3aa2bbeaed07c         Plan id: 3199127676
Enabled: YES     Fixed: NO      Accepted: YES     Origin: AUTO-CAPTURE
--------------------------------------------------------------------------------
Plan hash value: 1369807930
---------------------------------------------------------------------------
| Id  | Operation        | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT |        |   924 |  3696 |     4   (0)| 00:00:01 |
|*  1 |  INDEX RANGE SCAN| IDX_T1 |   924 |  3696 |     4   (0)| 00:00:01 |
---------------------------------------------------------------------------
 
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("C1">4076)
 
24 rows selected

还可以通过使用v$sql视图来查看SQL语句是否使用了SQL执行计划基线。如果SQL语句正使用SQL执行计划基线,那么dba_sql_plan_baselines中的plan_name就会与v$sql中的sql_plan_baseline有相同的值。

select sql_handle, plan_name,origin, enabled, accepted,a.sql_text,fixed,autopurge from dba_sql_plan_baselines a,v$sql b 
where a.parsing_schema_name in('JY') and  a.plan_name=b.sql_plan_baseline and a.signature=b.exact_matching_signature
and a.sql_text like '%select * from t1 where c1>4076%';

SQL执行计划在以下情况可以用来提高或维护SQL性能:
1.数据库升级
数据库升级会安装新版的优化器,这通常会改变一小部分SQL的执行计划,大部分发生改变的执行计划性能没有变化或者有所提高。然而,特定的执行计划发生改变可能造成性能的衰减。使用SQL执行计划基线可以有效的最小化由数据库升级而引起的性能衰减。

2.系统/数据发生变化
当系统/数据发生变化时可能会影响某些SQL的执行计划,潜在造成性能衰减。使用SQL执行计划能够最小化性能衰减并且稳定SQL性能。

3.应用程序升级
开发新的应用程序意味着引入新的SQL语句。在标准测试环境中对于新SQL语句应用程序可能会使用合适的执行计划。如果你的系统配置不同于测试环境,SQL执行计划基线可以被用来产生更好的性能。

如果在cursor缓存中有性能良好的执行计划,那么可以将其加载到SPM中,因此你可以使用SQL执行计划基数来维护SQL的性能。

SQL> set autotrace traceonly
SQL> select * from t1 where c1>4076;

924 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3617692013

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |   957 |  3828 |     5   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T1   |   957 |  3828 |     5   (0)| 00:00:01 |
--------------------------------------------------------------------------



SQL> select sql_text,sql_id,plan_hash_value from v$sqlarea where sql_text like '%c1>4076%';
 
SQL_TEXT                                                                         SQL_ID        PLAN_HASH_VALUE
-------------------------------------------------------------------------------- ------------- ---------------
select * from t1 where c1>4076                                                   0006gg4zsmmcg      3617692013


SQL> var n number
SQL> begin
  2  :n:=dbms_spm.load_plans_from_cursor_cache(sql_id=>'0006gg4zsmmcg', plan_hash_value=>'3617692013', fixed =>'NO', enabled=>'YES');
  3  end;
  4  /

PL/SQL procedure successfully completed.

SQL> select sql_handle, plan_name,origin, enabled, accepted,sql_text  from dba_sql_plan_baselines  where sql_text like 'select %c1>4076';
 
SQL_HANDLE                     PLAN_NAME                      ORIGIN         ENABLED ACCEPTED SQL_TEXT
------------------------------ ------------------------------ -------------- ------- -------- 

--------------------------------------------------------------------------------
SQL_67b129b37635284b           SQL_PLAN_6gc99qdv3aa2bdbd90e8e MANUAL-LOAD    YES     YES      select * from t1 where c1>4076



SQL> select * from t1 where c1>4076;

924 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3617692013

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |   957 |  3828 |     5   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T1   |   957 |  3828 |     5   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("C1">4076)

Note
-----
   - SQL plan baseline "SQL_PLAN_6gc99qdv3aa2bdbd90e8e" used for this statement


Statistics
----------------------------------------------------------
         26  recursive calls
         17  db block gets
         89  consistent gets
          0  physical reads
       3060  redo size
      13042  bytes sent via SQL*Net to client
       1091  bytes received via SQL*Net from client
         63  SQL*Net roundtrips to/from client
          0  sorts (memory)
          0  sorts (disk)
        924  rows processed

可以看到SQL plan baseline “SQL_PLAN_6gc99qdv3aa2bdbd90e8e” used for this statement信息,说明对于该SQL语句以后的执行都将会使用所创建的SQL执行计划基线。

在启用SPM后,对于这些有了SQL执行计划基线的SQL_ID,数据库将不会再收集新的执行计划(即使在SPM被禁用的情况下也不会再收集新的执行计划)。

SPM缺省值就是启用,自动捕获SQL执行计划基线是禁用的

SQL> show parameter sql_plan_baselines

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
optimizer_capture_sql_plan_baselines boolean     FALSE
optimizer_use_sql_plan_baselines     boolean     TRUE

启用自动捕获SQL执行计划基线

SQL> alter system set optimizer_capture_sql_plan_baselines=true scope=both sid='*';

System altered.


SQL> create index idx_t1 on t1(c1);

Index created.

SQL> exec dbms_stats.gather_table_stats(ownname=>null,tabname=>'t1',estimate_percent=>100,method_opt=>'for all columns size repeat',cascade=>true);

PL/SQL procedure successfully completed.


SQL> select * from t1 where c1>4076;

924 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3617692013

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |   957 |  3828 |     5   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T1   |   957 |  3828 |     5   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("C1">4076)

Note
-----
   - SQL plan baseline "SQL_PLAN_6gc99qdv3aa2bdbd90e8e" used for this statement



SQL> select sql_handle, plan_name,origin, enabled, accepted,sql_text  from dba_sql_plan_baselines  where sql_text like 'select %c1>4076';
 
SQL_HANDLE                     PLAN_NAME                      ORIGIN         ENABLED ACCEPTED SQL_TEXT
------------------------------ ------------------------------ -------------- ------- -------- 

--------------------------------------------------------------------------------
SQL_67b129b37635284b           SQL_PLAN_6gc99qdv3aa2bdbd90e8e MANUAL-LOAD    YES     YES      select * from t1 where c1>4076
 

可以看到优化器还是使用原来手动创建的SQL执行计划基线,并没有生成新的执行计划,还是执行的全表扫描,并没有使用我们创建的索引。

禁用SPM,启用自动捕获SQL执行计划基线

SQL> alter system set optimizer_use_sql_plan_baselines=false scope=both sid='*';

System altered.

SQL> select * from t1 where c1>4076;

924 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 1369807930

---------------------------------------------------------------------------
| Id  | Operation        | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT |        |   957 |  3828 |     4   (0)| 00:00:01 |
|*  1 |  INDEX RANGE SCAN| IDX_T1 |   957 |  3828 |     4   (0)| 00:00:01 |
---------------------------------------------------------------------------

可以看到执行计划使用了对索引idx_t1的范围扫描,而不是之前的全表扫描了。

SQL> select sql_handle, plan_name,origin, enabled, accepted,sql_text  from dba_sql_plan_baselines  where sql_text like 'select %c1>4076';
 
SQL_HANDLE                     PLAN_NAME                      ORIGIN         ENABLED ACCEPTED SQL_TEXT
------------------------------ ------------------------------ -------------- ------- -------- 

--------------------------------------------------------------------------------
SQL_67b129b37635284b           SQL_PLAN_6gc99qdv3aa2bbeaed07c AUTO-CAPTURE   YES     NO       select * from t1 where c1>4076
SQL_67b129b37635284b           SQL_PLAN_6gc99qdv3aa2bdbd90e8e MANUAL-LOAD    YES     YES      select * from t1 where c1>4076

可以看到ORIGN为AUTO-CAPTURE的SQL执行计划基线就是自动捕获的,ENABLED为YES,但是ACCEPTED为NO,这说明虽然创建了新的SQL执行计划基线但是优化器不能使用。下面启用SPM,看优化器是否使用新创建的SQL执行计划基线。

SQL> alter system set optimizer_use_sql_plan_baselines=true scope=both sid='*';

System altered.

SQL> show parameter sql_plan_baselines

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
optimizer_capture_sql_plan_baselines boolean     TRUE
optimizer_use_sql_plan_baselines     boolean     TRUE

SQL> select * from t1 where c1>4076;

924 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 3617692013

--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |   957 |  3828 |     5   (0)| 00:00:01 |
|*  1 |  TABLE ACCESS FULL| T1   |   957 |  3828 |     5   (0)| 00:00:01 |
--------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - filter("C1">4076)

Note
-----
   - SQL plan baseline "SQL_PLAN_6gc99qdv3aa2bdbd90e8e" used for this statement

从SQL plan baseline “SQL_PLAN_6gc99qdv3aa2bdbd90e8e” used for this statement信息可以看到优化器还是使用我们手动创建的SQL执行计划基线,对表t1执行全表扫描。想要使用执行索引扫描的SQL执行计划基线就要将其对应的ACCEPTED设置为YES并将使用全表扫描的SQL执行计划基线的ACCEPTED设置为NO。但是11gr1与11gr2在修改SQL执行计划基线的ACCEPTED属性的方法是不同的。另外,一旦在11gr2中将SQL执行计划基线的ACCEPTED设置为YES,就不能再将其设置为NO。为了不使用某个SQL执行计划基线,只能将该SQL执行计划基线的ENABLED设置为NO。

在11gr1中修改SQL执行计划基线的ACCEPTED属性值的方法如下:

SQL> DECLARE
  2 x number;
  3  BEGIN
  4  x := dbms_spm.alter_sql_plan_baseline('SQL_67b129b37635284b','SQL_PLAN_6gc99qdv3aa2bbeaed07c',attribute_name=> 'ACCEPTED',attribute_value=> 'YES');
  5  END;
  6  / 
  PL/SQL procedure successfully completed.

如果在11gr2中使用这种方法,将会得到错误信息:

SQL> DECLARE
  2 x number;
  3  BEGIN
  4  x := dbms_spm.alter_sql_plan_baseline('SQL_67b129b37635284b','SQL_PLAN_6gc99qdv3aa2bbeaed07c',attribute_name=> 'ACCEPTED',attribute_value=> 'YES');
  5  END;
  6  / 

ERROR at line 1:
ORA-38136: invalid attribute name ACCEPTED specified
ORA-06512: at "SYS.DBMS_SPM", line 2532
ORA-06512: at line 4

那么如何在11gr2中修改SQL执行计划基线的ACCEPTED值,可以使用dbms_spm.evolve_sql_plan_baseline与dbms_spm.alter_sql_plan_baseline。

SQL> SET SERVEROUTPUT ON
SQL> SET LONG 10000
SQL> DECLARE
  2      x clob;
  3  BEGIN
  4      x := dbms_spm.evolve_sql_plan_baseline('SQL_67b129b37635284b', 'SQL_PLAN_6gc99qdv3aa2bbeaed07c',verify=>'NO' ,commit=>'YES');
  5      DBMS_OUTPUT.PUT_LINE(x);
  6  END;
  7  /
-------------------------------------------------------------------------------
                        Evolve SQL Plan Baseline Report
-------------------------------------------------------------------------------

Inputs:
-------
  SQL_HANDLE = SQL_67b129b37635284b
  PLAN_NAME  = SQL_PLAN_6gc99qdv3aa2bbeaed07c
  TIME_LIMIT = DBMS_SPM.AUTO_LIMIT
  VERIFY     = NO
  COMMIT     = YES

Plan: SQL_PLAN_6gc99qdv3aa2bbeaed07c
------------------------------------
  Plan was changed to an accepted plan.

-------------------------------------------------------------------------------
                                 Report Summary
-------------------------------------------------------------------------------
Number of plans verified: 0
Number of plans accepted: 1


PL/SQL procedure successfully completed.

这里的verify参数在修改ACCEPTED为YES之前是否需要执行相应的执行计划并与当前可以使用的执行计划比较性能。如果ACCEPTED为NO的执行计划的性能有所提高,那么将执行计划基线的ACCEPTED设置为YES。当这个参数设置为”YES”时,如果执行计划的性能有所提高就将ACCEPTED修改为YES。当这个参数设置为”NO”时,直接将ACCEPTED修改为YES。

参数commit指定是否将ACCEPTED值从NO修改为YES。当设置为YES时,执行计划基线会将ACCEPTED设置为YES并生成一个报告。当设置为NO时,一个报告会生成但不会改变ACCEPTED值。

SQL> select sql_handle, plan_name,origin, enabled, accepted,sql_text  from dba_sql_plan_baselines  where sql_text like 'select %c1>4076';
 
SQL_HANDLE                     PLAN_NAME                      ORIGIN         ENABLED ACCEPTED SQL_TEXT
------------------------------ ------------------------------ -------------- ------- -------- 

--------------------------------------------------------------------------------
SQL_67b129b37635284b           SQL_PLAN_6gc99qdv3aa2bbeaed07c AUTO-CAPTURE   YES     YES      select * from t1 where c1>4076
SQL_67b129b37635284b           SQL_PLAN_6gc99qdv3aa2bdbd90e8e MANUAL-LOAD    YES     YES      select * from t1 where c1>4076
 

SQL> DECLARE
  2      x number;
  3  BEGIN
  4      x := dbms_spm.alter_sql_plan_baseline(sql_handle =>'SQL_67b129b37635284b',plan_name =>'SQL_PLAN_6gc99qdv3aa2bdbd90e8e',attribute_name 

=>'ENABLED',attribute_value =>'NO');
  5  END;
  6  /

PL/SQL procedure successfully completed.

SQL> select sql_handle, plan_name,origin, enabled, accepted,sql_text  from dba_sql_plan_baselines  where sql_text like 'select %c1>4076';
 
SQL_HANDLE                     PLAN_NAME                      ORIGIN         ENABLED ACCEPTED SQL_TEXT
------------------------------ ------------------------------ -------------- ------- -------- 

--------------------------------------------------------------------------------
SQL_67b129b37635284b           SQL_PLAN_6gc99qdv3aa2bbeaed07c AUTO-CAPTURE   YES     YES      select * from t1 where c1>4076
SQL_67b129b37635284b           SQL_PLAN_6gc99qdv3aa2bdbd90e8e MANUAL-LOAD    NO      YES      select * from t1 where c1>4076

现在手动创建的使用全表扫描的SQL执行计划基线的ENABLED为NO,新生成的使用索引范围扫描的SQL执行计划基线的ENABLED与ACCEPTED值为YES,说明优化器可以使用。

SQL> select * from t1 where c1>4076;

924 rows selected.


Execution Plan
----------------------------------------------------------
Plan hash value: 1369807930

---------------------------------------------------------------------------
| Id  | Operation        | Name   | Rows  | Bytes | Cost (%CPU)| Time     |
---------------------------------------------------------------------------
|   0 | SELECT STATEMENT |        |   957 |  3828 |     4   (0)| 00:00:01 |
|*  1 |  INDEX RANGE SCAN| IDX_T1 |   957 |  3828 |     4   (0)| 00:00:01 |
---------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   1 - access("C1">4076)

Note
-----
   - SQL plan baseline "SQL_PLAN_6gc99qdv3aa2bbeaed07c" used for this statement

可以看到优化器确实使用了使用索引范围扫描的SQL执行计划基线。

dbms_sqltune.create_stgtab_sqlset需要注意的问题

今天在使用dbms_sqltune.create_stgtab_sqlset来创建staging table时由于表名使用的是小写,发现创建之后,并不能查询到该表,但通过视图进行查看发现又确实存在这个表,这个问题在oracle 10.2..0.5与11.2.0.4中都存在,其它的版本没有测试过。

SQL> exec dbms_sqltune.create_stgtab_sqlset(table_name => 'stgtab_sqlset',schema_name => 

'JY');
 
PL/SQL procedure successfully completed

SQL> exec dbms_sqltune.pack_stgtab_sqlset(sqlset_name => 

'my_sql_tuning_set',staging_table_name => 'stgtab_sqlset',staging_schema_owner =>'JY');
 
PL/SQL procedure successfully completed


SQL> select * from jy.stgtab_sqlset;
 
select * from stgtab_sqlset
 
ORA-00942: table or view does not exist

SQL> desc jy.stgtab_sqlset
Object jy.stgtab_sqlset does not exist.

查询dba_objects视图确能找到该表stgtab_sqlset

SQL> select * from dba_objects where owner='JY' and OBJECT_NAME in('stgtab_sqlset');
 
OWNER                          OBJECT_NAME                                                                      SUBOBJECT_NAME                  OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         CREATED     LAST_DDL_TIME TIMESTAMP           STATUS  TEMPORARY GENERATED SECONDARY  NAMESPACE EDITION_NAME
------------------------------ -------------------------------------------------------------------------------- ------------------------------ ---------- -------------- ------------------- ----------- ------------- ------------------- ------- --------- --------- --------- ---------- ------------------------------
JY                             stgtab_sqlset                                                                                                        92747          92747 TABLE               2016/5/26 1 2016/5/26 16: 2016-05-26:16:04:49 VALID   N         N         N                  1 

如是表名使用大写

SQL> exec dbms_sqltune.create_stgtab_sqlset(table_name => ‘TABLE_SQLSET’,schema_name 

=> ‘JY’);

PL/SQL procedure successfully completed

SQL> exec dbms_sqltune.pack_stgtab_sqlset(sqlset_name => 

‘my_sql_tuning_set’,staging_table_name => ‘TABLE_SQLSET’,staging_schema_owner =>’JY

’);

PL/SQL procedure successfully completed

SQL> select * from table_sqlset;
 
NAME                           OWNER                          DESCRIPTION                                                                      SQL_ID        FORCE_MATCHING_SIGNATURE SQL_TEXT                                                                         PARSING_SCHEMA_NAME            BIND_DATA                                                                        BIND_LIST MODULE                                           ACTION                           ELAPSED_TIME   CPU_TIME BUFFER_GETS DISK_READS DIRECT_WRITES ROWS_PROCESSED    FETCHES EXECUTIONS END_OF_FETCH_COUNT OPTIMIZER_COST OPTIMIZER_ENV                                                                      PRIORITY COMMAND_TYPE FIRST_LOAD_TIME     STAT_PERIOD ACTIVE_STAT_PERIOD OTHER                                                                            PLAN_HASH_VALUE PLAN     SPARE1     SPARE2 SPARE3 SPARE4
------------------------------ ------------------------------ -------------------------------------------------------------------------------- ------------- ------------------------ -------------------------------------------------------------------------------- ------------------------------ -------------------------------------------------------------------------------- --------- ------------------------------------------------ -------------------------------- ------------ ---------- ----------- ---------- ------------- -------------- ---------- ---------- ------------------ -------------- -------------------------------------------------------------------------------- ---------- ------------ ------------------- ----------- ------------------ -------------------------------------------------------------------------------- --------------- ---- ---------- ---------- ------ --------------------------------------------------------------------------------
my_sql_tuning_set              JY                             TEST                                                                             2823agph489xc        1.702412129134E19 select id,name,password from gl_czy where name ='系统管理'                       ZW4001                                                                                                            R9_AppSrv.EXE                                                                           124908      32105         324         48             0             21         42         21                 21              3 E289FB89A4E49800CE001000AEF9C3E2CFFA3310564145555195A110555555154554555859155544                       3                                                                                                                                          2543410975  
 
my_sql_tuning_set              JY                             TEST                                                                             1hfffsrmgqhwp      1.11129101236943E19 select nvl(catalog_center,center_id) as  catalog_center from bs_hospital_collate INSUR_CHANGDE                                                                                                     JDBC Thin Client                                                                        141372     141372       11475          0             0           3825       3825       3825               3825              1 E289FB89A4E49800CE001000AEF9C3E2CFFA3310564145555195A110555555154554555859155544                       3                                                                                                                                          2429242715  


查询视图dba_objects发现这两个表的相关属性除了表名与创建时间,对象ID之外没有差异

SQL> select * from dba_objects where owner='JY' and OBJECT_NAME in('stgtab_sqlset','STGTAB_SQLSET');
 
OWNER                          OBJECT_NAME                                                                      SUBOBJECT_NAME                  OBJECT_ID DATA_OBJECT_ID OBJECT_TYPE         CREATED     LAST_DDL_TIME TIMESTAMP           STATUS  TEMPORARY GENERATED SECONDARY  NAMESPACE EDITION_NAME
------------------------------ -------------------------------------------------------------------------------- ------------------------------ ---------- -------------- ------------------- ----------- ------------- ------------------- ------- --------- --------- --------- ---------- ------------------------------
JY                             STGTAB_SQLSET                                                                                                        92781          92781 TABLE               2016/5/26 1 2016/5/26 16: 2016-05-26:16:22:55 VALID   N         N         N                  1 
JY                             stgtab_sqlset                                                                                                        92747          92747 TABLE               2016/5/26 1 2016/5/26 16: 2016-05-26:16:04:49 VALID   N         N         N                  1 

SQL> desc jy.stgtab_sqlset
Name                        Type           Nullable Default Comments 
--------------------------- -------------- -------- ------- -------- 
ID                          NUMBER         Y                         
NAME                        VARCHAR2(30)   Y                         
OWNER                       VARCHAR2(30)   Y                         
DESCRIPTION                 VARCHAR2(256)  Y                         
SQL_ID                      VARCHAR2(13)   Y                         
SQL_SEQ                     NUMBER         Y                         
FORCE_MATCHING_SIGNATURE    NUMBER         Y                         
SQL_TEXT                    CLOB           Y                         
PARSING_SCHEMA_NAME         VARCHAR2(30)   Y                         
BIND_DATA                   RAW(2000)      Y                         
BINDS_CAPTURED              CHAR(1)        Y                         
BIND_POSITION               NUMBER         Y                         
BIND_VALUE                  ANYDATA        Y                         
MODULE                      VARCHAR2(64)   Y                         
ACTION                      VARCHAR2(64)   Y                         
ELAPSED_TIME                NUMBER         Y                         
CPU_TIME                    NUMBER         Y                         
BUFFER_GETS                 NUMBER         Y                         
DISK_READS                  NUMBER         Y                         
DIRECT_WRITES               NUMBER         Y                         
ROWS_PROCESSED              NUMBER         Y                         
FETCHES                     NUMBER         Y                         
EXECUTIONS                  NUMBER         Y                         
END_OF_FETCH_COUNT          NUMBER         Y                         
OPTIMIZER_COST              NUMBER         Y                         
OPTIMIZER_ENV               RAW(2000)      Y                         
PRIORITY                    NUMBER         Y                         
COMMAND_TYPE                NUMBER         Y                         
FIRST_LOAD_TIME             VARCHAR2(19)   Y                         
STAT_PERIOD                 NUMBER         Y                         
ACTIVE_STAT_PERIOD          NUMBER         Y                         
OTHER                       CLOB           Y                         
PLAN_HASH_VALUE             NUMBER         Y                         
PLAN_STATEMENT_ID           VARCHAR2(30)   Y                         
PLAN_PLAN_ID                NUMBER         Y                         
PLAN_TIMESTAMP              DATE           Y                         
PLAN_REMARKS                VARCHAR2(4000) Y                         
PLAN_OPERATION              VARCHAR2(30)   Y                         
PLAN_OPTIONS                VARCHAR2(255)  Y                         
PLAN_OBJECT_NODE            VARCHAR2(128)  Y                         
PLAN_OBJECT_OWNER           VARCHAR2(30)   Y                         
PLAN_OBJECT_NAME            VARCHAR2(30)   Y                         
PLAN_OBJECT_ALIAS           VARCHAR2(65)   Y                         
PLAN_OBJECT_INSTANCE        NUMBER         Y                         
PLAN_OBJECT_TYPE            VARCHAR2(30)   Y                         
PLAN_OPTIMIZER              VARCHAR2(255)  Y                         
PLAN_SEARCH_COLUMNS         NUMBER         Y                         
PLAN_ID                     NUMBER         Y                         
PLAN_PARENT_ID              NUMBER         Y                         
PLAN_DEPTH                  NUMBER         Y                         
PLAN_POSITION               NUMBER         Y                         
PLAN_COST                   NUMBER         Y                         
PLAN_CARDINALITY            NUMBER         Y                         
PLAN_BYTES                  NUMBER         Y                         
PLAN_OTHER_TAG              VARCHAR2(255)  Y                         
PLAN_PARTITION_START        VARCHAR2(255)  Y                         
PLAN_PARTITION_STOP         VARCHAR2(255)  Y                         
PLAN_PARTITION_ID           NUMBER         Y                         
PLAN_DISTRIBUTION           VARCHAR2(30)   Y                         
PLAN_CPU_COST               NUMBER         Y                         
PLAN_IO_COST                NUMBER         Y                         
PLAN_TEMP_SPACE             NUMBER         Y                         
PLAN_ACCESS_PREDICATES      VARCHAR2(4000) Y                         
PLAN_FILTER_PREDICATES      VARCHAR2(4000) Y                         
PLAN_PROJECTION             VARCHAR2(4000) Y                         
PLAN_TIME                   NUMBER         Y                         
PLAN_QBLOCK_NAME            VARCHAR2(30)   Y                         
PLAN_OTHER_XML              CLOB           Y                         
PLAN_EXECUTIONS             NUMBER         Y                         
PLAN_STARTS                 NUMBER         Y                         
PLAN_OUTPUT_ROWS            NUMBER         Y                         
PLAN_CR_BUFFER_GETS         NUMBER         Y                         
PLAN_CU_BUFFER_GETS         NUMBER         Y                         
PLAN_DISK_READS             NUMBER         Y                         
PLAN_DISK_WRITES            NUMBER         Y                         
PLAN_ELAPSED_TIME           NUMBER         Y                         
PLAN_LAST_STARTS            NUMBER         Y                         
PLAN_LAST_OUTPUT_ROWS       NUMBER         Y                         
PLAN_LAST_CR_BUFFER_GETS    NUMBER         Y                         
PLAN_LAST_CU_BUFFER_GETS    NUMBER         Y                         
PLAN_LAST_DISK_READS        NUMBER         Y                         
PLAN_LAST_DISK_WRITES       NUMBER         Y                         
PLAN_LAST_ELAPSED_TIME      NUMBER         Y                         
PLAN_POLICY                 VARCHAR2(10)   Y                         
PLAN_ESTIMATED_OPTIMAL_SIZE NUMBER         Y                         
PLAN_ESTIMATED_ONEPASS_SIZE NUMBER         Y                         
PLAN_LAST_MEMORY_USED       NUMBER         Y                         
PLAN_LAST_EXECUTION         VARCHAR2(10)   Y                         
PLAN_LAST_DEGREE            NUMBER         Y                         
PLAN_TOTAL_EXECUTIONS       NUMBER         Y                         
PLAN_OPTIMAL_EXECUTIONS     NUMBER         Y                         
PLAN_ONEPASS_EXECUTIONS     NUMBER         Y                         
PLAN_MULTIPASSES_EXECUTIONS NUMBER         Y                         
PLAN_ACTIVE_TIME            NUMBER         Y                         
PLAN_MAX_TEMPSEG_SIZE       NUMBER         Y                         
PLAN_LAST_TEMPSEG_SIZE      NUMBER         Y                         
SPARE1                      NUMBER         Y                         
SPARE2                      NUMBER         Y                         
SPARE3                      BLOB           Y                         
SPARE4                      CLOB           Y                         
SPARE5                      NUMBER         Y                         
SPARE6                      NUMBER         Y                         
SPARE7                      CLOB           Y                         
SPARE8                      CLOB           Y

从plsql对dbms_sqltune.create_stgtab_sqlset的参数table_name的描述中提到了大小写敏感,但是从实际情况来看只能用大写才能方便执行迁移。

db file async I/O submit等待事件的故障诊断

1

2

3

4

朋友公司一个erp系统业务办理不了,但从前台等待事件来看 DB CPU占了%DB time的91.81%,这个awr报告采样时间是两个小时,总的DB time是810分种服务器显示有24个逻辑CPU,每个CPU的耗时是33.75分钟,CPU的使用率也不是很高,那么我们来看一下后台等待事件。

5
后台等待事件排在第一的是 db file async I/O submit,这是一个异步IO相关的等待事件,而LNS wait on SENDREQ,LGWR-LNS wait on channel是与DG相关的日志传输相关的等待事件。这里的操作系统是Linux,而根据Doc ID 1274737.1文档描述,当disk_asynch_io=true时,而filesystemio_options=none,那么正常的文件系统在Linux系统支持异步I/O的情况下Oracle也不能使用异常I/O。

我们先来检查一下Linux系统中是否执行过异步I/O操作

[oracle@ErpOracle01 ~]$ cat /proc/slabinfo | grep kio
kioctx               376    640    384   10    1 : tunables   54   27    8 : slabdata     64     64      2
kiocb                  0      0    256   15    1 : tunables  120   60    8 : slabdata      0      0      0

可以看到kiocb的前两列为0说明没有执行异步I/O操作,用于存储Oracle数据文件的就是正常的文件系统

[root@ErpOracle01 ~]# fdisk -l

Disk /dev/sda: 598.9 GB, 598879502336 bytes
255 heads, 63 sectors/track, 72809 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x000a66fb

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *           1         131     1048576   83  Linux
Partition 1 does not end on cylinder boundary.
/dev/sda2             131        8486    67108864   82  Linux swap / Solaris
/dev/sda3            8486       72810   516684800   83  Linux

在这种情况下要让Oracle使用异步I/O将参数filesystemio_options设置为’asynch’。

SQL> show parameter disk_asynch_io

NAME                                 TYPE                               VALUE
------------------------------------ ---------------------------------  ------------------------------
disk_asynch_io                       boolean                            TRUE

SQL> show parameter filesystemio_options

NAME                                 TYPE                               VALUE
------------------------------------ ---------------------------------  ------------------------------
filesystemio_options                 string                             none
SQL> alter system set  filesystemio_options='asynch' scope=spfile;

System altered.

LNS wait on SENDREQ是DG的RFS I/O时间和网络时间的总计,而它可能是由网络带宽或备库的I/O性能引起的。而这经确认是备库的I/O性能引起的,再加上在这期间后台维护人员在主库做大批量的数据更新。在主库中出现了Log file sync和log file parallel write等待事件。LGWR-LNS wait on channel等待事件是日志写进程或网络服务器进程在KSR通道上等待接受消息所花的时间.LNS wait on SENDREQ, Log file sync, log file parallel write, LGWR-LNS wait on channel通过调整备库I/O性能和对主库增加online and standby redo logs来改善。然后在中午休息时间重启了数据库,经过三天的运行,业务没有出现办理不了的情况了。

如何修改oracle自动统计信息收集所使用的参数

这里主要介绍如何来修改Oracle 10g与11g统计信息收集所使用的缺省参数以及Oracle对这些参数提供的一个参考值。当使用一个维护窗口来自动收集统计信息时这些参数是非常有用的,这些缺省参数定义了如何来收集统计信息。在Oracle10g中使用dbms_stats.set_param与dbms_stats.get_param来完成缺省参数的修改,但在Oracle 11g中dbms_stats.set_param与dbms_stats.get_param已经被丢弃,进而使用dbms_stats.set_global_prefs与dbms_stats.get_prefs来进行缺省参数的修改。

在Oracle 10g中收集统计信息的缺省参数可以执行dbms_stats.set_param过程来进行修改。如果想要修改多个参数,那么对于每个参数都需要执行一次dbms_stats.set_param过程,语法如下:
DBMS_STATS.SET_PARAM ( pname IN VARCHAR2, pval IN VARCHAR2);
pname是参数名,pval是参数值。

可以使用dbms_stats.set_param进行修改的缺省参数
cascade:控制在相同时间索引是否被分析,缺省值为:true,可选值:true|false,由dbms_stats.set_param所设置的cascade的缺省值不能用于统计信息的导出或导入过程,只能用于统计信息的收集过程

SQL> select dbms_stats.get_param('cascade') from dual;

DBMS_STATS.GET_PARAM('CASCADE')
--------------------------------------------------------------------------------
DBMS_STATS.AUTO_CASCADE


SQL> exec dbms_stats.set_param('cascade','true');   

PL/SQL procedure successfully completed.

SQL> select dbms_stats.get_param('cascade') from dual;

DBMS_STATS.GET_PARAM('CASCADE')
--------------------------------------------------------------------------------
TRUE

degree:并行度,缺省值是NULL,如果设置为auto_degree,那么将会自动判断并行度。该参数可选的参数值为null/integer(所有对象所使用的并行度为integer

SQL> select dbms_stats.get_param('degree') from dual;

DBMS_STATS.GET_PARAM('DEGREE')
--------------------------------------------------------------------------------
NULL

SQL> exec dbms_stats.set_param('degree','4');

PL/SQL procedure successfully completed.

SQL> select dbms_stats.get_param('degree') from dual;

DBMS_STATS.GET_PARAM('DEGREE')
--------------------------------------------------------------------------------
4

estimate_percent:行数采样的百分比,缺省值为dbms_stats.auto_sample_size,可选的参数值:一个有效范围[0.000001,100]/null使用100%来进行计算/dbms_stats.auto_sample_size。使用dbms_stats.auto_sample_size时根据数据库的版本,采样百分比会有所不同,10g中的采样百分比要比11g所使用的小。

SQL> select dbms_stats.get_param('estimate_percent') from dual;

DBMS_STATS.GET_PARAM('ESTIMATE_PERCENT')
--------------------------------------------------------------------------------
DBMS_STATS.AUTO_SAMPLE_SIZE

SQL> exec dbms_stats.set_param('estimate_percent','null');

PL/SQL procedure successfully completed.

SQL> select dbms_stats.get_param('estimate_percent') from dual;

DBMS_STATS.GET_PARAM('ESTIMATE_PERCENT')
--------------------------------------------------------------------------------
NULL

method_opt:用于收集列统计信息,缺省值为:for all columns size auto,可选参数值:
for all [indexed| hidden] columns [size_clause]
for columns [size_clause] column|attribute [size_clause][,column|attribute

[size_clause]…]

size_clause:=SIZE{integer |repeat |auto |skewonly}
integer:指定histogram的桶数,范围[1,254]
repeat:只对已经存在直方图的列收集直方图
auto:Oracle根据列中数据的分布与列的工作负载来决定是否收集直方图
skewonly:Oracle将根据列中数据的分布来决定是否收集直方图

SQL> select dbms_stats.get_param('method_opt') from dual;        

DBMS_STATS.GET_PARAM('METHOD_OPT')
--------------------------------------------------------------------------------
FOR ALL COLUMNS SIZE AUTO

SQL> exec dbms_stats.set_param('method_opt','for all columns size 1');

PL/SQL procedure successfully completed.

SQL> select dbms_stats.get_param('method_opt') from dual;

DBMS_STATS.GET_PARAM('METHOD_OPT')
--------------------------------------------------------------------------------
FOR ALL COLUMNS SIZE 1

no_invalidate:判断是否将依赖的游标设置为无效,缺省参数值是dbms_stats.auto_invalidate,可选参数:
dbms_stats.auto_invalidate Oracle决定是否将依赖于统计信息的游标设置为无效
true 依赖于统计信息的游标将不会失效
false 依赖于统计信息的游标将会失效

SQL> select dbms_stats.get_param('no_invalidate') from dual;

DBMS_STATS.GET_PARAM('NO_INVALIDATE')
--------------------------------------------------------------------------------
DBMS_STATS.AUTO_INVALIDATE

SQL> exec dbms_stats.set_param('no_invalidate','false');

PL/SQL procedure successfully completed.

SQL> select dbms_stats.get_param('no_invalidate') from dual;

DBMS_STATS.GET_PARAM('NO_INVALIDATE')
--------------------------------------------------------------------------------
FALSE

granularity: 统计信息收集的粒度,缺省参数’auto’,可选参数:
‘auto’ 基于分区类型来决定粒度
‘all’ 收集所有统计信息(子分区,分区与全局)
‘global’ 收集全局统计信息
‘global and partition’ 收集全局与分区级别的统计信息。即使是一个复合分区对象,那么子分区
级统计信息不会被收集。
‘partition’ 收集分区级别统计信息
‘subpartition’ 收集子分区级别统计信息

‘default’已经过时了。这个选项只能收集全局与分区级别的统计信息。

SQL> exec dbms_stats.set_param(‘granularity’,’all’);

PL/SQL procedure successfully completed.

SQL> select dbms_stats.get_param(‘granularity’) from dual;

DBMS_STATS.GET_PARAM(‘GRANULARITY’)
——————————————————————————–
ALL

autostats_target:这个参数只能用于自动统计信息收集,这个参数控制着那些对象会被收集统计信息
缺省值是’auto’,可选参数值:
‘auto’ oracle将会决定那些对象将被收集统计信息
‘all’ 对系统中的所有对象收集统计信息
‘oracle’ 对所有oracle所拥有的对象收集统计信息,这个选项将会限制自动统计信息收集作业所选择的方案列表,将对Oracle组件系统方案列表收集统计信息,例如SYS,SYMAN,WMSYS与EXFSYS方案

SQL> select dbms_stats.get_param('autostats_target') from dual;                     

 

DBMS_STATS.GET_PARAM('AUTOSTATS_TARGET')
--------------------------------------------------------------------------------
AUTO

SQL> exec dbms_stats.set_param('autostats_target','all');

PL/SQL procedure successfully completed.

SQL> select dbms_stats.get_param('autostats_target') from dual;

DBMS_STATS.GET_PARAM('AUTOSTATS_TARGET')
--------------------------------------------------------------------------------
ALL

dbms_stats.set_param的使用
为了执行这个过程,用户必须有sysdba或analyze any dictionary与analyze any系统权限。

varchar2
类型的参数与值都需要用引号括起来,就算他们代表数字也是一样。注意NULL与’NULL’是不同的:当设置为NULL,没有引号,设置为Oracle的建议值,当设置为’NULL’时,参数等于NULL

下面介绍如何来修改Oracle 11g统计信息收集操作的缺省参数并对这些参数提供一个参考值,及如何对其进行修改。这些缺省参数将会用来于在维护窗口中自动统计信息收集来收集统计信息。

在Oracle 11g中收集统计信息主要有以下四个过程来修改缺省参数:
set_global_prefs
set_schema_prefs
set_database_prefs
set_table_prefs

根据你需要修改的级别来选择特定的过程来修改这些缺省参数。例如,如果想要对单个表修改缺省参数据,那么应该使用set_table_prefs过程,set_database_prefs用来维护数据库级别的设置。对于每一个要修改的参数都需要执行一次修改过程。

set_global_prefs
能够改变dbms_stats.gather_*_stats过程的缺省参数,在没有表级特定设置的情况下来对数据库中任何对象收集统计信息。对于全局设置所有参数都使用缺省值,除非表级特定设置或者在dbms_stats.gather_*_stats命令中显式设置参数。通过这个过程进行的改变将会影响改变之后所创建的任何对象。新对象将对所有参数使用global_pref值。
语法:
dbms_stats.set_global_prefs(pname in varchar2,pvalue in varchar2);
下面的语句将对所有对象在全局级设置no_invalidate为false:

SQL> select dbms_stats.get_prefs('no_invalidate') from dual;       

DBMS_STATS.GET_PREFS('NO_INVALIDATE')
--------------------------------------------------------------------------------
DBMS_STATS.AUTO_INVALIDATE

SQL> exec dbms_stats.set_global_prefs(pname=>'no_invalidate',pvalue=>'false');

PL/SQL procedure successfully completed.

SQL> select dbms_stats.get_prefs('no_invalidate') from dual;

DBMS_STATS.GET_PREFS('NO_INVALIDATE')
--------------------------------------------------------------------------------
FALSE

set_table_prefs
可以用来修改dbms_stats.gather_*_stats过程收集统计信息的缺省参数,但仅限于表级别。
语法:
dbms_stats.set_table_prefs(ownname in varchar2,tabname varchar2,pname in varchar2,pvalue

in varchar2);

例如,下面的语句将对scott用户的emp表进行设置,因此索引统计信息不会在收集表统计信息时而被收集:



SQL> select table_name,num_rows,blocks,last_analyzed from dba_tables where 

owner='SCOTT';

TABLE_NAME                       NUM_ROWS     BLOCKS LAST_ANALYZE
------------------------------ ---------- ---------- ------------
DEPT                                    4          5 02-DEC-15
EMP                                 30014         80 03-MAY-16
SALGRADE                                5          5 02-DEC-15
BONUS                                   0          0 02-DEC-15
T2                                      0          0 03-MAY-16

SQL> select 

table_name,index_name,blevel,leaf_blocks,distinct_keys,num_rows,last_analyzed from 

dba_indexes where owner='SCOTT' and table_name='EMP';

TABLE_NAME                     INDEX_NAME                         BLEVEL LEAF_BLOCKS 

DISTINCT_KEYS   NUM_ROWS LAST_ANALYZE
------------------------------ ------------------------------ ---------- ----------- 

------------- ---------- ------------
EMP                            PK_EMP                                  1          57     

    30014      30014 03-MAY-16
EMP                            EMP_EMPNO_DEPTNO                        1          72     

    30014      30014 03-MAY-16


SQL> exec dbms_stats.gather_table_stats

(ownname=>'scott',tabname=>'emp',estimate_percent=>100,method_opt=>'for all columns size 

repeat');

PL/SQL procedure successfully completed.

SQL> select table_name,num_rows,blocks,last_analyzed from dba_tables where 

owner='SCOTT';

TABLE_NAME                       NUM_ROWS     BLOCKS LAST_ANALYZE
------------------------------ ---------- ---------- ------------
DEPT                                    4          5 02-DEC-15
EMP                                 30014         80 19-MAY-16
SALGRADE                                5          5 02-DEC-15
BONUS                                   0          0 02-DEC-15
T2                                      0          0 03-MAY-16

SQL> select 

table_name,index_name,blevel,leaf_blocks,distinct_keys,num_rows,last_analyzed from 

dba_indexes where owner='SCOTT' and table_name='EMP';

TABLE_NAME                     INDEX_NAME                         BLEVEL LEAF_BLOCKS 

DISTINCT_KEYS   NUM_ROWS LAST_ANALYZE
------------------------------ ------------------------------ ---------- ----------- 

------------- ---------- ------------
EMP                            PK_EMP                                  1          57     

    30014      30014 03-MAY-16
EMP                            EMP_EMPNO_DEPTNO                        1          72     

    30014      30014 03-MAY-16

但如果在dbms_stats.gather_table_stats过程指定cascade为true还是会在收集表统计信息的同时收集索引统计信息

SQL> exec dbms_stats.gather_table_stats

(ownname=>'scott',tabname=>'emp',estimate_percent=>100,method_opt=>'for all columns size 

repeat',cascade=>true);        

PL/SQL procedure successfully completed.

SQL>  select table_name,num_rows,blocks,last_analyzed from dba_tables where 

owner='SCOTT';

TABLE_NAME                       NUM_ROWS     BLOCKS LAST_ANALYZE
------------------------------ ---------- ---------- ------------
DEPT                                    4          5 02-DEC-15
EMP                                 30014         80 19-MAY-16
SALGRADE                                5          5 02-DEC-15
BONUS                                   0          0 02-DEC-15
T2                                      0          0 03-MAY-16

SQL> select 

table_name,index_name,blevel,leaf_blocks,distinct_keys,num_rows,last_analyzed from 

dba_indexes where owner='SCOTT' and table_name='EMP';

TABLE_NAME                     INDEX_NAME                         BLEVEL LEAF_BLOCKS 

DISTINCT_KEYS   NUM_ROWS LAST_ANALYZE
------------------------------ ------------------------------ ---------- ----------- 

------------- ---------- ------------
EMP                            PK_EMP                                  1          57     

    30014      30014 19-MAY-16
EMP                            EMP_EMPNO_DEPTNO                        1          72     

    30014      30014 19-MAY-16

set_schema_prefs
用来修改dbms_stats.gather_*_stats过程的缺省参数值,只对指定方案中的所有已经存在的对象生效。这个过程将会对指定方案中的每个表调用一次set_table_prefs过程。因为set_schema_prefs过程会对方案中的每个表调用一次set_schema_prefs过程,所以不会对该过程执行以后所创建的任何对象产生影响,新创建的对象将对所有参数使用global_pref值。
语法:
dbms_stats.set_schema_prefs(ownname in varchar2,pname in varchar2,pvalue in varchar2);
例如,以下命令设置当表中的记录数发生改变的百分比超过一定阈值就认为表的统计信息老旧了,并且应该对scott方案中的所有对象重新收集统计信息:

exec dbms_stats.set_schema_prefs(ownname=>'scott',pname=>'stale_percent',pvalue=>'5');

set_database_prefs
用来修改dbms_stats.gather_*_stats过程的缺省参数值,对数据库中所有用户定义的方案生效。通过设置add_sys参数为true可以包含sys与system方案。这个过程会对数据库中的每个表调用一次set_table_prefs过程。所以在过程执行后所创建的新对象,所有参数都将使用global_pref值。
语法:
dbms_stats.set_databasae_prefs(pname in varchar2,pvalue in varchar2,add_sys in boolean

default false);

例如,下面的命令对所有方案中表中数据分布存在倾斜的列收集直方图:
exec dbms_stats.set_database_prefs(pname=>’METHOD_OPT’,pvalue=>’FOR ALL COLUMNS SIZE

SKEWONLY’,add_sys=>TRUE)

相对于10g,11g对于统计信息收集新增了以下参数:
publish:这个参数决定在统计信息收集操作完成后是否发布新收集的统计信息。从11gr1开始,用户可以收集统计信息但不立即发布使用统计信息。在发布使用新收集的统计信息之前DBA可以测试新收集的统计信息。缺省值:true,可选值为true|false

incremental:这个参数决定在每次对分区收集统计信息时是否收集分区的全局统计信息。缺省值为:false,可选值true|false

stale_percent:这个参数判断表中记录发生改变的百份比达到指定阈值后,表的统计信息将会被识为过时应该重新收集统计信息,缺省值:10%,可选值:正数

将参数还原成缺省值
为了将参数设置成为缺省值,可以将参数值设置为null:
exec dbms_stats.set_global_prefs(‘no_invalidate’,null);

查看参数值的方法
为了查看参数的当前值可以使用dbms_stats.get_prefs过程:
dbms_stats.get_prefs,这个函数将返回指定参数的缺省值,其语法如下:
dbms_stats.get_prefs(pname in varchar2,ownname in varchar2 default null,tabname in

varchar2 default null)

当指定owner(ownname)与table_name(tabname)时将返回对于该表的特定设置,其它情况下返回的是全局设置。

例如:

SQL>  select dbms_stats.get_prefs('CASCADE','SCOTT','EMP') from dual;

 DBMS_STATS.GET_PREFS('CASCADE','SCOTT','EMP')
 --------------------------------------------------------------------------------
 FALSE

 

SQL> select dbms_stats.get_prefs('STALE_PERCENT') from dual;

 DBMS_STATS.GET_PREFS('STALE_PERCENT')
 --------------------------------------------------------------------------------
 10

在收集统计信息之前可以根据需要与测试结果来对这些参数进行设置,这样在使用Oracle统计信息收集job来收集统计信息时就可以满足你的需要。

logminer来恢复在表DDL之前被删除的数据

做这个测试是因为前同事(开发人员)在客户现场做维护误删除了一张表的记录,但在删除表之后修改了表的结构(修改了字段的精度),发现误删除记录后,想通对表执行闪回查询来恢复被删除的记录发现不能闪回了,因为表结构发现了修改(ORA-01466: unable to read data – table definition has changed)。而且这个数据库没有备份,只有归档。简单的方法就是通过logminer来挖掘归档日志来进行恢复。

一.创建测试表t1,并插入两条记录

SQL> create table t1(t_id number,t_name varchar2(50));

Table created.

SQL>  alter table t1 add t_salary number(8);

Table altered.

SQL> desc t1
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 T_ID                                               NUMBER
 T_NAME                                             VARCHAR2(50)
 T_SALARY                                           NUMBER(8)

SQL> insert into t1 values(1,'jy',10000);

1 row created.

SQL> insert into t1 values(2,'wj',8000);

1 row created.

SQL> commit;

Commit complete.

SQL> select * from t1;

      T_ID T_NAME                                               T_SALARY
---------- -------------------------------------------------- ----------
         1 jy                                                      10000
         2 wj



二.删除表中记录
SQL> alter session set nls_date_format = ‘yyyy-mm-dd hh24:mi:ss’;

Session altered.

SQL> select sysdate from dual;

SYSDATE
——————–
2016-05-13 11:07:02

删除表t1中t_id=2的记录,通过logminer来恢复的记录就是它

SQL> delete from t1 where t_id=2;

1 row deleted.

SQL> commit;

Commit complete.

在表结构没有发生改变之前,尝试使用闪回查询执行成功

SQL> select *  from t1     as of timestamp to_timestamp('2016-05-13 11:07:02','yyyy-mm-dd hh24:mi:ss');

      T_ID T_NAME                                               T_SALARY
---------- -------------------------------------------------- ----------
         1 jy                                                      10000
         2 wj                                                       8000

修改表结构,这里只是简单的修改了字段类型的长度

SQL> alter table t1 modify t_salary number(10);

Table altered.

在表结构发生改变之后,尝试使用闪回查询执行报错

SQL> select *  from t1     as of timestamp to_timestamp('2016-05-13 11:07:02','yyyy-mm-dd hh24:mi:ss');
select *  from t1     as of timestamp to_timestamp('2016-05-13 11:07:02','yyyy-mm-dd hh24:mi:ss')
               *
ERROR at line 1:
ORA-01466: unable to read data - table definition has changed

三.使用logminer来挖掘归档重做日志
查看当前的归档日志文件

SQL> set long 900
SQL> set linesize 900
SQL> set pagesize 900
SQL> col name for a100
SQL> select name,sequence#,first_change# from v$archived_log ;

NAME                                                                                                  SEQUENCE# FIRST_CHANGE#
---------------------------------------------------------------------------------------------------- ---------- -------------
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_3_bkl8b4to_.arc                      3        559310
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_4_bkl92rxm_.arc                      4        590316
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_5_bkl94mv3_.arc                      5        622788
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_6_bkl9612c_.arc                      6        645078
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_7_bkl97n1p_.arc                      7        656708
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_8_bkl99bb9_.arc                      8        670463
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_9_bkl9c4v2_.arc                      9        688685
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_10_bkl9dvf0_.arc                    10        705191
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_11_bkl9gjpd_.arc                    11        715113
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_12_bkl9hpqq_.arc                    12        731487
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_13_bkl9m1gk_.arc                    13        737140
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_14_bkl9mlg9_.arc                    14        749330
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_15_bkl9n5ky_.arc                    15        757183
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_16_bkl9o2p1_.arc                    16        766296
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_17_bkl9oyz0_.arc                    17        773422
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_18_bkl9qcpf_.arc                    18        779449
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_19_bkl9rhv4_.arc                    19        790719
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_20_bkl9ssv4_.arc                    20        804844
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_21_bkl9w2xt_.arc                    21        814648
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_22_bkl9xjx8_.arc                    22        826389
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_23_bkl9ym63_.arc                    23        834321
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_24_bklb0gh1_.arc                    24        846100
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_25_bklb17f6_.arc                    25        863715
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_26_bklb23gw_.arc                    26        874870
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_27_bklb3pmz_.arc                    27        885043
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_28_bklb5fl3_.arc                    28        898767
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_29_bklb6xr6_.arc                    29        912954
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_30_bklb89wn_.arc                    30        923000
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_31_bklb97v9_.arc                    31        929385
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_32_bklbb8yk_.arc                    32        936055
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_33_bklbccbm_.arc                    33        946964
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_34_bklbd33q_.arc                    34        952518
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_35_bklbf7v8_.arc                    35        955561
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_36_bklbg9mf_.arc                    36        966403
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_37_bklcon42_.arc                    37        977840
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_38_bkldl4pl_.arc                    38        996480
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_39_bklfrzhj_.arc                    39       1018201
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_40_bklor7cf_.arc                    40       1019655
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2016_04_13/o1_mf_1_41_cjvtwjm2_.arc                    41       1036392
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2016_05_13/o1_mf_1_42_cm9fovjk_.arc                    42       1055116

40 rows selected.

强制日志切换将当前使用的联机重做日志文件时行归档

SQL> alter system switch logfile;

System altered.

SQL> select name,sequence#,first_change# from v$archived_log ;

NAME                                                                                                  SEQUENCE# FIRST_CHANGE#
---------------------------------------------------------------------------------------------------- ---------- -------------
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_3_bkl8b4to_.arc                      3        559310
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_4_bkl92rxm_.arc                      4        590316
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_5_bkl94mv3_.arc                      5        622788
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_6_bkl9612c_.arc                      6        645078
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_7_bkl97n1p_.arc                      7        656708
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_8_bkl99bb9_.arc                      8        670463
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_9_bkl9c4v2_.arc                      9        688685
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_10_bkl9dvf0_.arc                    10        705191
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_11_bkl9gjpd_.arc                    11        715113
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_12_bkl9hpqq_.arc                    12        731487
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_13_bkl9m1gk_.arc                    13        737140
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_14_bkl9mlg9_.arc                    14        749330
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_15_bkl9n5ky_.arc                    15        757183
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_16_bkl9o2p1_.arc                    16        766296
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_17_bkl9oyz0_.arc                    17        773422
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_18_bkl9qcpf_.arc                    18        779449
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_19_bkl9rhv4_.arc                    19        790719
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_20_bkl9ssv4_.arc                    20        804844
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_21_bkl9w2xt_.arc                    21        814648
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_22_bkl9xjx8_.arc                    22        826389
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_23_bkl9ym63_.arc                    23        834321
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_24_bklb0gh1_.arc                    24        846100
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_25_bklb17f6_.arc                    25        863715
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_26_bklb23gw_.arc                    26        874870
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_27_bklb3pmz_.arc                    27        885043
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_28_bklb5fl3_.arc                    28        898767
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_29_bklb6xr6_.arc                    29        912954
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_30_bklb89wn_.arc                    30        923000
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_31_bklb97v9_.arc                    31        929385
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_32_bklbb8yk_.arc                    32        936055
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_33_bklbccbm_.arc                    33        946964
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_34_bklbd33q_.arc                    34        952518
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_35_bklbf7v8_.arc                    35        955561
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_36_bklbg9mf_.arc                    36        966403
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_37_bklcon42_.arc                    37        977840
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_38_bkldl4pl_.arc                    38        996480
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_39_bklfrzhj_.arc                    39       1018201
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2015_03_30/o1_mf_1_40_bklor7cf_.arc                    40       1019655
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2016_04_13/o1_mf_1_41_cjvtwjm2_.arc                    41       1036392
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2016_05_13/o1_mf_1_42_cm9fovjk_.arc                    42       1055116
/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2016_05_13/o1_mf_1_43_cmbkro1j_.arc                    43       1083648

41 rows selected.

向logminer增加需要分析的归档重做日志文件

SQL> execute dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2016_05_13/o1_mf_1_42_cm9fovjk_.arc',options=>dbms_logmnr.NEW);

PL/SQL procedure successfully completed.

继续向logminer增加需要分析的归档重做日志文件

SQL> execute dbms_logmnr.add_logfile(logfilename=>'/u01/app/oracle/flash_recovery_area/JYTEST/archivelog/2016_05_13/o1_mf_1_43_cmbkro1j_.arc',options=>dbms_logmnr.addfile);

PL/SQL procedure successfully completed.

执行分析

SQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);

PL/SQL procedure successfully completed.

将分析的内容存储在临时表logmnr_contents中

SQL> create table logmnr_contents as select * from v$logmnr_contents ;

Table created.

终止分析操作

SQL> execute dbms_logmnr.end_logmnr;

PL/SQL procedure successfully completed.

查询T1所产生的日志记录

SQL> select username,scn,timestamp,sql_redo,sql_undo from logmnr_contents where seg_name='T1';

USERNAME                              SCN TIMESTAMP   SQL_REDO                                                                                                              SQL_UNDO
------------------------------ ---------- ---------   -------------------------------------------------------------------------------------------------------------------   ------------------------------------------------------------------------------------------------------------------------
UNKNOWN                           1102088 13-MAY-16  create table t1(t_id number,t_name varchar2(50));

JY                                1102114 13-MAY-16  alter table t1 add t_salary number(8);

UNKNOWN                           1102129 13-MAY-16  insert into "JY"."T1"("T_ID","T_NAME","T_SALARY") values ('1','jy','10000');                                           delete from "JY"."T1" where "T_ID" = '1' and "T_NAME" = 'jy' and "T_SALARY" = '10000' and ROWID = 'AAANc6AAEAAAAGEAAA';

UNKNOWN                           1102822 13-MAY-16  insert into "JY"."T1"("T_ID","T_NAME","T_SALARY") values ('2','wj','8000');                                            delete from "JY"."T1" where "T_ID" = '2' and "T_NAME" = 'wj' and "T_SALARY" = '8000' and ROWID = 'AAANc6AAEAAAAGFAAA';

UNKNOWN                           1103738 13-MAY-16  delete from "JY"."T1" where "T_ID" = '2' and "T_NAME" = 'wj' and "T_SALARY" = '8000' and ROWID = 'AAANc6AAEAAAAGFAAA'; insert into "JY"."T1"("T_ID","T_NAME","T_SALARY") values ('2','wj','8000');

JY                                1103789 13-MAY-16  alter table t1 modify t_salary number(10);

从查询结果来看删除操作对应的sql_redo为:delete from “JY”.”T1″ where “T_ID” = ‘2’ and “T_NAME” = ‘wj’ and “T_SALARY” = ‘8000’ and ROWID = ‘AAANc6AAEAAAAGFAAA’,对应的sql_undo为:insert into “JY”.”T1″(“T_ID”,”T_NAME”,”T_SALARY”) values (‘2′,’wj’,’8000′);为了恢复删除的t_id=2的记录,只需要执行sql_undo为insert into “JY”.”T1″(“T_ID”,”T_NAME”,”T_SALARY”) values (‘2′,’wj’,’8000′)的语句就能恢复。

How restore CBO statistics

从Oracle10g开始,当对一个表收集统计信息时,旧的统计信息会被保留了,因此当出现新收集的统计信息引起性能问题时,可以还原旧统计信息。缺省情况下统计信息会被保留31天,但可以执行execute DBMS_STATS.ALTER_STATS_HISTORY_RETENTION (days)来进行修改,days为你所指定的天数。

SQL> select DBMS_STATS.GET_STATS_HISTORY_RETENTION from dual;

GET_STATS_HISTORY_RETENTION
---------------------------
                         31
SQL> execute DBMS_STATS.ALTER_STATS_HISTORY_RETENTION(60);
 
PL/SQL procedure successfully completed
 
SQL> select DBMS_STATS.GET_STATS_HISTORY_RETENTION from dual;
 
GET_STATS_HISTORY_RETENTION
---------------------------
                         60

在修改统计信息保留天数时要确保sysaux表空间有足够的表空间大小来存储统计信息,防止统计信息写满sysaux表空间。

可以执行以下语句来查询统计信息的保留天数:

SQL> select DBMS_STATS.GET_STATS_HISTORY_RETENTION from dual;

GET_STATS_HISTORY_RETENTION
---------------------------
                         31

执行以下语句可以查询被保留时间最久的统计信息,早于这个时间点的统计信息已经被删除。任何要求还原这个时间点及之前的统计信息都会报错”ORA-20006: Unable to restore statistics , statistics history not available”

SQL> select DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY from dual;

GET_STATS_HISTORY_AVAILABILITY
--------------------------------------------------------------------------------
10-APR-16 10.50.36.929152000 PM +08:00

SQL> execute dbms_stats.restore_table_stats ('SCOTT','EMP','10-APR-16 10.50.36.929152000 PM +08:00');

begin dbms_stats.restore_table_stats ('SCOTT','EMP','10-APR-16 10.50.36.929152000 PM +08:00'); end;

ORA-20006: Unable to restore statistics , statistics history not available
ORA-06512: at "SYS.DBMS_STATS", line 17063
ORA-06512: at "SYS.DBMS_STATS", line 17080
ORA-06512: at line 2

要想找到表的统计信息收集历史信息可以执行以下查询

SQL> select TABLE_NAME, STATS_UPDATE_TIME from dba_tab_stats_history where table_name='PM_BILL';

TABLE_NAME                     STATS_UPDATE_TIME
------------------------------ --------------------------------------------------------------------------------
PM_BILL                        12-APR-16 10.06.00.454894 PM +08:00
PM_BILL                        29-APR-16 10.11.24.030930 PM +08:00
PM_BILL                        01-MAY-16 04.44.42.324357 AM +08:00
PM_BILL                        02-MAY-16 07.03.38.762862 AM +08:00
PM_BILL                        03-MAY-16 09.33.53.942353 AM +08:00

还原统计信息可以根据需要选择以下几种方式:
execute DBMS_STATS.RESTORE_TABLE_STATS (‘owner’,’table’,date)
execute DBMS_STATS.RESTORE_DATABASE_STATS(date)
execute DBMS_STATS.RESTORE_DICTIONARY_STATS(date)
execute DBMS_STATS.RESTORE_FIXED_OBJECTS_STATS(date)
execute DBMS_STATS.RESTORE_SCHEMA_STATS(‘owner’,date)
execute DBMS_STATS.RESTORE_SYSTEM_STATS(date)

下面介绍一个还原指定表统计信息的操作:
1.查询表pm_bill的统计信息,显示有232277行记录。

SQL> select table_name,num_rows,blocks,empty_blocks,sample_size from user_tables where table_name='PM_BILL';

TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS SAMPLE_SIZE
------------------------------ ---------- ---------- ------------ -----------
PM_BILL                            232277       5164            0       69683

2.查询表pm_bill收集的统计信息的次数

SQL> select TABLE_NAME, STATS_UPDATE_TIME from dba_tab_stats_history where table_name='PM_BILL';

TABLE_NAME                     STATS_UPDATE_TIME
------------------------------ --------------------------------------------------------------------------------
PM_BILL                        12-APR-16 10.06.00.454894 PM +08:00
PM_BILL                        29-APR-16 10.11.24.030930 PM +08:00
PM_BILL                        01-MAY-16 04.44.42.324357 AM +08:00
PM_BILL                        02-MAY-16 07.03.38.762862 AM +08:00
PM_BILL                        03-MAY-16 09.33.53.942353 AM +08:00

3.查询表pm_bill中真实的记录数为235032与统计信息中记录的232277有差异

SQL> select count(*) from pm_bill;

  COUNT(*)
----------
    235032

4.查询统计信息保留的最早时间

SQL> select DBMS_STATS.GET_STATS_HISTORY_AVAILABILITY from dual;

GET_STATS_HISTORY_AVAILABILITY
--------------------------------------------------------------------------------
10-APR-16 10.50.36.929152000 PM +08:00

5.对表pm_bill收集统计信息,采样比例使用100%

SQL> exec dbms_stats.gather_table_stats(ownname => 'insur_changde',tabname => 'pm_bill',estimate_percent => 100,method_opt => 'for all columns size repeat');

PL/SQL procedure successfully completed

6.查询表pm_bill的统计信息,可以看到重新收集统计信息后表的记录数与真实记数一样为235032

SQL> select table_name,num_rows,blocks,empty_blocks,sample_size from user_tables where table_name='PM_BILL';

TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS SAMPLE_SIZE
------------------------------ ---------- ---------- ------------ -----------
PM_BILL                            235032       5290            0      235032

SQL> select TABLE_NAME, STATS_UPDATE_TIME from dba_tab_stats_history where table_name='PM_BILL';

TABLE_NAME                     STATS_UPDATE_TIME
------------------------------ --------------------------------------------------------------------------------
PM_BILL                        12-APR-16 10.06.00.454894 PM +08:00
PM_BILL                        29-APR-16 10.11.24.030930 PM +08:00
PM_BILL                        01-MAY-16 04.44.42.324357 AM +08:00
PM_BILL                        02-MAY-16 07.03.38.762862 AM +08:00
PM_BILL                        03-MAY-16 09.33.53.942353 AM +08:00
PM_BILL                        12-MAY-16 03.06.43.688976 PM +08:00

7.将表pm_bill的统计信息还原到03-MAY-16 09.33.53.942353 AM +08:00这个时间点

SQL> exec dbms_stats.restore_table_stats ('insur_changde','pm_bill','03-MAY-16 09.33.53.942353 AM +08:00');

PL/SQL procedure successfully completed

SQL> select TABLE_NAME, STATS_UPDATE_TIME from dba_tab_stats_history where table_name='PM_BILL';

TABLE_NAME                     STATS_UPDATE_TIME
------------------------------ --------------------------------------------------------------------------------
PM_BILL                        12-APR-16 10.06.00.454894 PM +08:00
PM_BILL                        29-APR-16 10.11.24.030930 PM +08:00
PM_BILL                        01-MAY-16 04.44.42.324357 AM +08:00
PM_BILL                        02-MAY-16 07.03.38.762862 AM +08:00
PM_BILL                        03-MAY-16 09.33.53.942353 AM +08:00
PM_BILL                        12-MAY-16 03.06.43.688976 PM +08:00
PM_BILL                        12-MAY-16 03.12.55.388126 PM +08:00

7 rows selected

从上面的查询结果可以看到,表pm_bill的统计信息收集的历史信息多了一条时间为12-MAY-16 03.12.55.388126 PM +08:00
的记录,这是我们还原统计信息所产生的。

查询表pm_bill的统计信息,可以看到统计信息中记录的表的记录数恢复成了232277行

SQL> select table_name,num_rows,blocks,empty_blocks,sample_size from user_tables where table_name='PM_BILL';

TABLE_NAME                       NUM_ROWS     BLOCKS EMPTY_BLOCKS SAMPLE_SIZE
------------------------------ ---------- ---------- ------------ -----------
PM_BILL                            232277       5164            0       69683

这个功能当新收集统计信息后,如果引起了性能问题可以做为一个临时手段还解决性能问题。

opatch auto将11.2.0.4 rac升级到11.2.0.4.160419

之前执行patch都是选择手动执行,由于有升级需求,所以测试一下patch auto方式
一.生产环境
1.数据库环境
操作系统版本 : RedHat 5.4
数据库版本 : Oracle 11.2.0.4 RAC
Grid : 11.2.0.4
Oracle database: 11.2.0.4

2.准备内容
GI PSU : p22646198_112040_LINUX.zip
OPatch : p6880880_112000_Linux.zip

二、更新OPatch版本,必须要更新
在升级PSU之前必须将OPatch工具的版本升级到11.2.0.3.6或更高版本。目前最新的版本为11.2.0.3.12 OPatch下载地址:https://updates.oracle.com/download/6880880.html分别在两个节点更新OPatch版本:

1. 更新OPatch版本,需要更新到11.2.0.3.12,OPatch直接压缩替换就可以了上传p6880880_112000_Linux-x86-64.zip到每个节点的/soft目录

[root@jyrac1 soft]# ls -lrt
total 51556
-rw-r--r-- 1 root root 52733900 May 11 11:11 p6880880_112000_Linux.zip

[root@jyrac2 soft]# ls -lrt
total 51556
-rw-r--r-- 1 root root 52733900 May 11 12:08 p6880880_112000_Linux.zip

备份grid与oracle软件的原Opatch目录

[root@jyrac1 soft]# cd /u01/app/product/11.2.0/crs
[root@jyrac1 crs]# mv OPatch OPatch_bak


[root@jyrac2 soft]# cd /u01/app/product/11.2.0/crs
[root@jyrac2 crs]# mv OPatch OPatch_bak

[root@jyrac1 db]# cd /u01/app/oracle/product/11.2.0/db
[root@jyrac1 db]# mv OPatch OPatch_bak

[root@jyrac2 crs]# cd /u01/app/oracle/product/11.2.0/db
[root@jyrac2 db]# mv OPatch OPatch_bak

grid目录OPatch替换
以root用户执行以下命令:
[root@jyrac1 soft]# unzip p6880880_112000_Linux-x86-64.zip
Archive: p6880880_112000_Linux-x86-64.zip
creating: OPatch/
inflating: OPatch/opatchdiag
inflating: OPatch/opatch.pl
creating: OPatch/jlib/
inflating: OPatch/jlib/oracle.opatchcore.classpath.jar
inflating: OPatch/jlib/opatch.jar
inflating: OPatch/jlib/oracle.opatch.classpath.jar
inflating: OPatch/jlib/oracle.opatch.classpath.unix.jar
inflating: OPatch/jlib/oracle.opatch.classpath.windows.jar
inflating: OPatch/jlib/opatchsdk.jar
inflating: OPatch/jlib/oracle.opatchcore.classpath.unix.jar
inflating: OPatch/jlib/oracle.opatchcore.classpath.windows.jar
creating: OPatch/crs/
inflating: OPatch/crs/patch11203.pl
inflating: OPatch/crs/installPatch.excl
inflating: OPatch/crs/patch11202.pl
inflating: OPatch/crs/auto_patch.pl
creating: OPatch/crs/log/
inflating: OPatch/crs/patch112.pl
inflating: OPatch/crs/patchDB.pl
inflating: OPatch/crs/opatchauto
inflating: OPatch/crs/CRSProductDriver.jar
inflating: OPatch/crs/driver.jar
creating: OPatch/ocm/
creating: OPatch/ocm/doc/
extracting: OPatch/ocm/ocm.zip
inflating: OPatch/ocm/ocm_platforms.txt
creating: OPatch/ocm/lib/
inflating: OPatch/ocm/lib/emocmclnt.jar
inflating: OPatch/ocm/lib/xmlparserv2.jar
inflating: OPatch/ocm/lib/http_client.jar
inflating: OPatch/ocm/lib/emocmclnt-14.jar
inflating: OPatch/ocm/lib/regexp.jar
inflating: OPatch/ocm/lib/jnet.jar
inflating: OPatch/ocm/lib/jsse.jar
inflating: OPatch/ocm/lib/osdt_core3.jar
inflating: OPatch/ocm/lib/osdt_jce.jar
inflating: OPatch/ocm/lib/emocmcommon.jar
inflating: OPatch/ocm/lib/log4j-core.jar
inflating: OPatch/ocm/lib/jcert.jar
creating: OPatch/ocm/bin/
inflating: OPatch/ocm/bin/emocmrsp
inflating: OPatch/opatch
creating: OPatch/opatchauto-dir/
creating: OPatch/opatchauto-dir/opatchautocore/
inflating: OPatch/opatchauto-dir/opatchautocore/oplan
inflating: OPatch/opatchauto-dir/opatchautocore/opatchautobinary
creating: OPatch/opatchauto-dir/opatchautocore/jlib/
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/ValidationRules.jar
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/patchsdk.jar
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/ProductDriver.jar
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/osysmodel-utils.jar
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/OsysModel.jar
creating: OPatch/opatchauto-dir/opatchautocore/jlib/apache-commons/
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/apache-commons/commons-compress-1.4.jar
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/apache-commons/commons-cli-1.0.jar
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/oplan_core.jar
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/oracle.oplan.classpath.jar
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/bundle.jar
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/oplan_sample.jar
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/Validation.jar
creating: OPatch/opatchauto-dir/opatchautocore/jlib/jaxb/
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/jaxb/activation.jar
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/jaxb/jsr173_1.0_api.jar
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/jaxb/jaxb-api.jar
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/jaxb/jaxb-impl.jar
inflating: OPatch/opatchauto-dir/opatchautocore/jlib/automation.jar
inflating: OPatch/opatchauto-dir/opatchautocore/oplan.bat
inflating: OPatch/opatchauto-dir/opatchautocore/README.txt
inflating: OPatch/opatchauto-dir/opatchautocore/README.html
creating: OPatch/opatchauto-dir/opatchautodb/
creating: OPatch/opatchauto-dir/opatchautodb/jlib/
inflating: OPatch/opatchauto-dir/opatchautodb/jlib/oracle.oplan.db.classpath.jar
inflating: OPatch/opatchauto-dir/opatchautodb/jlib/oplan_db.jar
inflating: OPatch/emdpatch.pl
creating: OPatch/scripts/
inflating: OPatch/scripts/opatch_wls.bat
inflating: OPatch/scripts/opatch_jvm_discovery.bat
inflating: OPatch/scripts/opatch_wls
inflating: OPatch/scripts/opatch_jvm_discovery
inflating: OPatch/operr
inflating: OPatch/operr_readme.txt
inflating: OPatch/operr.bat
creating: OPatch/opatchprereqs/
inflating: OPatch/opatchprereqs/prerequisite.properties
creating: OPatch/opatchprereqs/oui/
inflating: OPatch/opatchprereqs/oui/knowledgesrc.xml
creating: OPatch/opatchprereqs/opatch/
inflating: OPatch/opatchprereqs/opatch/runtime_prereq.xml
inflating: OPatch/opatchprereqs/opatch/rulemap.xml
inflating: OPatch/opatchprereqs/opatch/opatch_prereq.xml
inflating: OPatch/opatch.bat
creating: OPatch/oplan/
creating: OPatch/oplan/jlib/
creating: OPatch/oplan/jlib/apache-commons/
inflating: OPatch/oplan/jlib/apache-commons/commons-cli-1.0.jar
creating: OPatch/oplan/jlib/jaxb/
inflating: OPatch/oplan/jlib/jaxb/jsr173_1.0_api.jar
inflating: OPatch/oplan/jlib/jaxb/jaxb-impl.jar
inflating: OPatch/oplan/jlib/jaxb/activation.jar
inflating: OPatch/oplan/jlib/jaxb/jaxb-api.jar
inflating: OPatch/oplan/jlib/Validation.jar
inflating: OPatch/oplan/jlib/oracle.oplan.classpath.jar
inflating: OPatch/oplan/jlib/OuiDriver.jar
inflating: OPatch/oplan/jlib/EMrepoDrivers.jar
inflating: OPatch/oplan/jlib/JMXDrivers.jar
inflating: OPatch/oplan/jlib/bundle.jar
inflating: OPatch/oplan/jlib/CRSProductDriver.jar
inflating: OPatch/oplan/jlib/oplan.jar
inflating: OPatch/oplan/jlib/ValidationRules.jar
inflating: OPatch/oplan/jlib/osysmodel-utils.jar
inflating: OPatch/oplan/jlib/automation.jar
inflating: OPatch/oplan/README.html
inflating: OPatch/oplan/README.txt
inflating: OPatch/oplan/oplan.bat
inflating: OPatch/oplan/oplan
inflating: OPatch/opatchdiag.bat
inflating: OPatch/README.txt
extracting: OPatch/version.txt
creating: OPatch/docs/
inflating: OPatch/docs/cversion.txt
inflating: OPatch/docs/Prereq_Users_Guide.txt
inflating: OPatch/docs/FAQ
inflating: OPatch/docs/Users_Guide.txt

[root@jyrac2 soft]# unzip p6880880_112000_Linux-x86-64.zip
Archive:  p6880880_112000_Linux-x86-64.zip
   creating: OPatch/
  inflating: OPatch/opatchdiag       
  inflating: OPatch/opatch.pl        
   creating: OPatch/jlib/
  inflating: OPatch/jlib/oracle.opatchcore.classpath.jar  
  inflating: OPatch/jlib/opatch.jar  
  inflating: OPatch/jlib/oracle.opatch.classpath.jar  
  inflating: OPatch/jlib/oracle.opatch.classpath.unix.jar  
  inflating: OPatch/jlib/oracle.opatch.classpath.windows.jar  
  inflating: OPatch/jlib/opatchsdk.jar  
  inflating: OPatch/jlib/oracle.opatchcore.classpath.unix.jar  
  inflating: OPatch/jlib/oracle.opatchcore.classpath.windows.jar  
   creating: OPatch/crs/
  inflating: OPatch/crs/patch11203.pl  
  inflating: OPatch/crs/installPatch.excl  
  inflating: OPatch/crs/patch11202.pl  
  inflating: OPatch/crs/auto_patch.pl  
   creating: OPatch/crs/log/
  inflating: OPatch/crs/patch112.pl  
  inflating: OPatch/crs/patchDB.pl   
  inflating: OPatch/crs/opatchauto   
  inflating: OPatch/crs/CRSProductDriver.jar  
  inflating: OPatch/crs/driver.jar   
   creating: OPatch/ocm/
   creating: OPatch/ocm/doc/
 extracting: OPatch/ocm/ocm.zip      
  inflating: OPatch/ocm/ocm_platforms.txt  
   creating: OPatch/ocm/lib/
  inflating: OPatch/ocm/lib/emocmclnt.jar  
  inflating: OPatch/ocm/lib/xmlparserv2.jar  
  inflating: OPatch/ocm/lib/http_client.jar  
  inflating: OPatch/ocm/lib/emocmclnt-14.jar  
  inflating: OPatch/ocm/lib/regexp.jar  
  inflating: OPatch/ocm/lib/jnet.jar  
  inflating: OPatch/ocm/lib/jsse.jar  
  inflating: OPatch/ocm/lib/osdt_core3.jar  
  inflating: OPatch/ocm/lib/osdt_jce.jar  
  inflating: OPatch/ocm/lib/emocmcommon.jar  
  inflating: OPatch/ocm/lib/log4j-core.jar  
  inflating: OPatch/ocm/lib/jcert.jar  
   creating: OPatch/ocm/bin/
  inflating: OPatch/ocm/bin/emocmrsp  
  inflating: OPatch/opatch           
   creating: OPatch/opatchauto-dir/
   creating: OPatch/opatchauto-dir/opatchautocore/
  inflating: OPatch/opatchauto-dir/opatchautocore/oplan  
  inflating: OPatch/opatchauto-dir/opatchautocore/opatchautobinary  
   creating: OPatch/opatchauto-dir/opatchautocore/jlib/
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/ValidationRules.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/patchsdk.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/ProductDriver.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/osysmodel-utils.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/OsysModel.jar  
   creating: OPatch/opatchauto-dir/opatchautocore/jlib/apache-commons/
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/apache-commons/commons-compress-1.4.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/apache-commons/commons-cli-1.0.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/oplan_core.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/oracle.oplan.classpath.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/bundle.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/oplan_sample.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/Validation.jar  
   creating: OPatch/opatchauto-dir/opatchautocore/jlib/jaxb/
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/jaxb/activation.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/jaxb/jsr173_1.0_api.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/jaxb/jaxb-api.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/jaxb/jaxb-impl.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/jlib/automation.jar  
  inflating: OPatch/opatchauto-dir/opatchautocore/oplan.bat  
  inflating: OPatch/opatchauto-dir/opatchautocore/README.txt  
  inflating: OPatch/opatchauto-dir/opatchautocore/README.html  
   creating: OPatch/opatchauto-dir/opatchautodb/
   creating: OPatch/opatchauto-dir/opatchautodb/jlib/
  inflating: OPatch/opatchauto-dir/opatchautodb/jlib/oracle.oplan.db.classpath.jar  
  inflating: OPatch/opatchauto-dir/opatchautodb/jlib/oplan_db.jar  
  inflating: OPatch/emdpatch.pl      
   creating: OPatch/scripts/
  inflating: OPatch/scripts/opatch_wls.bat  
  inflating: OPatch/scripts/opatch_jvm_discovery.bat  
  inflating: OPatch/scripts/opatch_wls  
  inflating: OPatch/scripts/opatch_jvm_discovery  
  inflating: OPatch/operr            
  inflating: OPatch/operr_readme.txt  
  inflating: OPatch/operr.bat        
   creating: OPatch/opatchprereqs/
  inflating: OPatch/opatchprereqs/prerequisite.properties  
   creating: OPatch/opatchprereqs/oui/
  inflating: OPatch/opatchprereqs/oui/knowledgesrc.xml  
   creating: OPatch/opatchprereqs/opatch/
  inflating: OPatch/opatchprereqs/opatch/runtime_prereq.xml  
  inflating: OPatch/opatchprereqs/opatch/rulemap.xml  
  inflating: OPatch/opatchprereqs/opatch/opatch_prereq.xml  
  inflating: OPatch/opatch.bat       
   creating: OPatch/oplan/
   creating: OPatch/oplan/jlib/
   creating: OPatch/oplan/jlib/apache-commons/
  inflating: OPatch/oplan/jlib/apache-commons/commons-cli-1.0.jar  
   creating: OPatch/oplan/jlib/jaxb/
  inflating: OPatch/oplan/jlib/jaxb/jsr173_1.0_api.jar  
  inflating: OPatch/oplan/jlib/jaxb/jaxb-impl.jar  
  inflating: OPatch/oplan/jlib/jaxb/activation.jar  
  inflating: OPatch/oplan/jlib/jaxb/jaxb-api.jar  
  inflating: OPatch/oplan/jlib/Validation.jar  
  inflating: OPatch/oplan/jlib/oracle.oplan.classpath.jar  
  inflating: OPatch/oplan/jlib/OuiDriver.jar  
  inflating: OPatch/oplan/jlib/EMrepoDrivers.jar  
  inflating: OPatch/oplan/jlib/JMXDrivers.jar  
  inflating: OPatch/oplan/jlib/bundle.jar  
  inflating: OPatch/oplan/jlib/CRSProductDriver.jar  
  inflating: OPatch/oplan/jlib/oplan.jar  
  inflating: OPatch/oplan/jlib/ValidationRules.jar  
  inflating: OPatch/oplan/jlib/osysmodel-utils.jar  
  inflating: OPatch/oplan/jlib/automation.jar  
  inflating: OPatch/oplan/README.html  
  inflating: OPatch/oplan/README.txt  
  inflating: OPatch/oplan/oplan.bat  
  inflating: OPatch/oplan/oplan      
  inflating: OPatch/opatchdiag.bat   
  inflating: OPatch/README.txt       
 extracting: OPatch/version.txt      
   creating: OPatch/docs/
  inflating: OPatch/docs/cversion.txt  
  inflating: OPatch/docs/Prereq_Users_Guide.txt  
  inflating: OPatch/docs/FAQ         
  inflating: OPatch/docs/Users_Guide.txt

以root用户执行以下命令:

[root@jyrac1 soft]# cp -R OPatch /u01/app/product/11.2.0/crs/
[root@jyrac1 ~]$ cd /u01/app/product/11.2.0/crs/
[root@jyrac1 ~]$chown -R grid:oinstall OPatch

[root@jyrac2 soft]# cp -R OPatch /u01/app/product/11.2.0/crs/
[root@jyrac2 ~]$ cd /u01/app/product/11.2.0/crs/
[root@jyrac2 ~]$chown -R grid:oinstall OPatch

[root@jyrac1 soft]# cp -R OPatch /u01/app/oracle/product/11.2.0/db/
[root@jyrac1 soft]# cd /u01/app/oracle/product/11.2.0/db
[root@jyrac1 db]# chown -R oracle:oinstall OPatch

[root@jyrac2 soft]# cp -R OPatch /u01/app/oracle/product/11.2.0/db/
[root@jyrac2 soft]# cd /u01/app/oracle/product/11.2.0/db
[root@jyrac2 db]# chown -R oracle:oinstall OPatch

以grid与oracle用户来进行测试

[root@jyrac1 crs]# su - grid
[grid@jyrac1 ~]$ cd /u01/app/product/11.2.0/crs/OPatch
[grid@jyrac1 OPatch]$ ./opatch version
OPatch Version: 11.2.0.3.12

OPatch succeeded.


[root@jyrac2 crs]# su - grid
[grid@jyrac2 ~]$ cd /u01/app/product/11.2.0/crs/OPatch/
[grid@jyrac2 OPatch]$ ./opatch version
OPatch Version: 11.2.0.3.12

OPatch succeeded.

[root@jyrac1 db]# su - oracle
[oracle@jyrac1 ~]$ cd /u01/app/oracle/product/11.2.0/db/OPatch
[oracle@jyrac1 OPatch]$ ./opatch version
OPatch Version: 11.2.0.3.12

OPatch succeeded.

[root@jyrac2 db]# su - oracle
[oracle@jyrac2 ~]$ cd /u01/app/oracle/product/11.2.0/db/OPatch
[oracle@jyrac2 OPatch]$ ./opatch version
OPatch Version: 11.2.0.3.12

OPatch succeeded.

三.将补丁上传到所有节点并解压

[root@jyrac1 soft]# unzip p22646198_112040_LINUX.zip
[root@jyrac1 u02]# chown -R grid:oinstall 22646198
[root@jyrac1 u02]# chmod -R 755 22646198

[root@jyrac2 soft]# unzip p22646198_112040_LINUX.zip
[root@jyrac2 u02]# chown -R grid:oinstall 22646198
[root@jyrac2 u02]# chmod -R 755 22646198

四.检查需要打的补丁与现有补丁是否冲突

[grid@jyrac1 OPatch]$ cd /u02/22646198/
[grid@jyrac1 22646198]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle Interim Patch Installer version 11.2.0.3.12
Copyright (c) 2016, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /u01/app/product/11.2.0/crs
Central Inventory : /u01/app/oraInventory
   from           : /u01/app/product/11.2.0/crs/oraInst.loc
OPatch version    : 11.2.0.3.12
OUI version       : 11.2.0.4.0
Log file location : /u01/app/product/11.2.0/crs/cfgtoollogs/opatch/opatch2016-05-11_21-54-31PM_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.

[grid@jyrac2 OPatch]$ cd /u02/22646198/
[grid@jyrac2 22646198]$ $ORACLE_HOME/OPatch/opatch prereq CheckConflictAgainstOHWithDetail -ph ./
Oracle Interim Patch Installer version 11.2.0.3.12
Copyright (c) 2016, Oracle Corporation.  All rights reserved.

PREREQ session

Oracle Home       : /u01/app/product/11.2.0/crs
Central Inventory : /u01/app/oraInventory
   from           : /u01/app/product/11.2.0/crs/oraInst.loc
OPatch version    : 11.2.0.3.12
OUI version       : 11.2.0.4.0
Log file location : /u01/app/product/11.2.0/crs/cfgtoollogs/opatch/opatch2016-05-11_21-54-31PM_1.log

Invoking prereq "checkconflictagainstohwithdetail"

Prereq "checkConflictAgainstOHWithDetail" passed.

OPatch succeeded.

五.OPatch apply(所有节点均需执行)(无需关闭任何组件及资源)

[root@jyrac1 u02]# export ORACLE_HOME=/u01/app/product/11.2.0/crs
[root@jyrac1 u02]#  $ORACLE_HOME/OPatch/opatch auto /u02/22646198/ -oh $ORACLE_HOME/ -ocmrf $ORACLE_HOME/OPatch/ocm/bin/emocmrsp
Executing /u01/app/product/11.2.0/crs/perl/bin/perl /u01/app/product/11.2.0/crs/OPatch/crs/patch11203.pl -patchdir /u02 -patchn 22646198 -oh /u01/app/product/11.2.0/crs/ -ocmrf /u01/app/product/11.2.0/crs/OPatch/ocm/bin/emocmrsp -paramfile /u01/app/product/11.2.0/crs/crs/install/crsconfig_params

This is the main log file: /u01/app/product/11.2.0/crs/cfgtoollogs/opatchauto2016-05-11_21-59-41.log

This file will show your detected configuration and all the steps that opatchauto attempted to do on your system:
/u01/app/product/11.2.0/crs/cfgtoollogs/opatchauto2016-05-11_21-59-41.report.log

2016-05-11 21:59:41: Starting Clusterware Patch Setup
Using configuration parameter file: /u01/app/product/11.2.0/crs/crs/install/crsconfig_params

Stopping CRS...
Stopped CRS successfully

patch /u02/22646198/22502456  apply successful for home  /u01/app/product/11.2.0/crs 
patch /u02/22646198/22502549  apply successful for home  /u01/app/product/11.2.0/crs 
patch /u02/22646198/22502505  apply successful for home  /u01/app/product/11.2.0/crs 

Starting CRS...
Installing Trace File Analyzer
CRS-4123: Oracle High Availability Services has been started.

opatch auto succeeded.

[root@jyrac2 app]# export ORACLE_HOME=/u01/app/product/11.2.0/crs
[root@jyrac2 app]# $ORACLE_HOME/OPatch/opatch auto /u02/22646198/ -oh $ORACLE_HOME/ -ocmrf $ORACLE_HOME/OPatch/ocm/bin/emocmrsp
Executing /u01/app/product/11.2.0/crs/perl/bin/perl /u01/app/product/11.2.0/crs/OPatch/crs/patch11203.pl -patchdir /u02 -patchn 22646198 -oh /u01/app/product/11.2.0/crs/ -ocmrf /u01/app/product/11.2.0/crs/OPatch/ocm/bin/emocmrsp -paramfile /u01/app/product/11.2.0/crs/crs/install/crsconfig_params

This is the main log file: /u01/app/product/11.2.0/crs/cfgtoollogs/opatchauto2016-05-11_22-32-49.log

This file will show your detected configuration and all the steps that opatchauto attempted to do on your system:
/u01/app/product/11.2.0/crs/cfgtoollogs/opatchauto2016-05-11_22-32-49.report.log

2016-05-11 22:32:49: Starting Clusterware Patch Setup
Using configuration parameter file: /u01/app/product/11.2.0/crs/crs/install/crsconfig_params

Stopping CRS...
Stopped CRS successfully

patch /u02/22646198/22502456  apply successful for home  /u01/app/product/11.2.0/crs 
patch /u02/22646198/22502549  apply successful for home  /u01/app/product/11.2.0/crs 
patch /u02/22646198/22502505  apply successful for home  /u01/app/product/11.2.0/crs 

Starting CRS...
Installing Trace File Analyzer
CRS-4123: Oracle High Availability Services has been started.

opatch auto succeeded.

[grid@jyrac1 app]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CRSDG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.DATADG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.LISTENER.lsnr
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.asm
               ONLINE  ONLINE       jyrac1                   Started             
               ONLINE  ONLINE       jyrac2                   Started             
ora.gsd
               ONLINE  OFFLINE      jyrac1                                       
               ONLINE  OFFLINE      jyrac2                                       
ora.net1.network
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.ons
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.registry.acfs
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       jyrac1                                       
ora.cvu
      1        ONLINE  ONLINE       jyrac1                                       
ora.jyrac.db
      1        ONLINE  ONLINE       jyrac1                   Open                
      2        ONLINE  OFFLINE                               Instance Shutdown
ora.jyrac1.vip
      1        ONLINE  ONLINE       jyrac1                                       
ora.jyrac2.vip
      1        ONLINE  ONLINE       jyrac2                                       
ora.oc4j
      1        ONLINE  ONLINE       jyrac1                                       
ora.scan1.vip
      1        ONLINE  ONLINE       jyrac1                              

显示opatch成功,但是实例jyrac2不能启动,于是手动启动.

[oracle@jyrac2 trace]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Wed May 11 22:45:53 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '+DATADG/jyrac/spfilejyrac.ora'
ORA-17503: ksfdopn:2 Failed to open file +DATADG/jyrac/spfilejyrac.ora
ORA-01034: ORACLE not available
ORA-27123: unable to attach to shared memory segment
Linux Error: 13: Permission denied
Additional information: 26
Additional information: 786438

错误信息显示没有权限来访问磁盘组中的参数文件,可能是$ORACLE_HOME/bin/oracle权限出问题了。

[grid@jyrac2 crs]$ ls -l $ORACLE_HOME/bin/oracle 
-rwxr-x--x 1 grid oinstall 174947566 Dec  2 16:01 /u01/app/product/11.2.0/crs/bin/oracle
[grid@jyrac2 crs]$ chmod 6751 $ORACLE_HOME/bin/oracle
[grid@jyrac2 crs]$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 grid oinstall 174947566 Dec  2 16:01 /u01/app/product/11.2.0/crs/bin/oracle

[oracle@jyrac2 dbs]$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-xr-x 1 oracle asmadmin 198797109 Dec  2 19:16 /u01/app/oracle/product/11.2.0/db/bin/oracle
[oracle@jyrac2 dbs]$ chmod 6751 $ORACLE_HOME/bin/oracle
[oracle@jyrac2 dbs]$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-x--x 1 oracle asmadmin 198797109 Dec  2 19:16 /u01/app/oracle/product/11.2.0/db/bin/oracle

SQL> startup
ORACLE instance started.

Total System Global Area  669581312 bytes
Fixed Size                  1366724 bytes
Variable Size             243270972 bytes
Database Buffers          419430400 bytes
Redo Buffers                5513216 bytes
Database mounted.
Database opened.
[root@jyrac1 u02]# export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db
[root@jyrac1 u02]# $ORACLE_HOME/OPatch/opatch auto /u02/22646198/ -oh $ORACLE_HOME/ -ocmrf $ORACLE_HOME/OPatch/ocm/bin/emocmrsp
Executing /u01/app/product/11.2.0/crs/perl/bin/perl /u01/app/oracle/product/11.2.0/db/OPatch/crs/patch11203.pl -patchdir /u02 -patchn 22646198 -oh /u01/app/oracle/product/11.2.0/db/ -ocmrf /u01/app/oracle/product/11.2.0/db/OPatch/ocm/bin/emocmrsp -paramfile /u01/app/product/11.2.0/crs/crs/install/crsconfig_params

This is the main log file: /u01/app/oracle/product/11.2.0/db/cfgtoollogs/opatchauto2016-05-11_22-56-19.log

This file will show your detected configuration and all the steps that opatchauto attempted to do on your system:
/u01/app/oracle/product/11.2.0/db/cfgtoollogs/opatchauto2016-05-11_22-56-19.report.log

2016-05-11 22:56:19: Starting Clusterware Patch Setup
Using configuration parameter file: /u01/app/product/11.2.0/crs/crs/install/crsconfig_params

Stopping RAC /u01/app/oracle/product/11.2.0/db ...
Stopped RAC /u01/app/oracle/product/11.2.0/db successfully

patch /u02/22646198/22502456  apply successful for home  /u01/app/oracle/product/11.2.0/db 
patch /u02/22646198/22502549/custom/server/22502549  apply successful for home  /u01/app/oracle/product/11.2.0/db 

Starting RAC /u01/app/oracle/product/11.2.0/db ...
Failed to start resources from  database home /u01/app/oracle/product/11.2.0/db
ERROR: Refer log file for more details.


opatch auto failed.

错误显示patch成功,但在启动RAC数据库时失败,于是手动启动实例jyrac1

[oracle@jyrac1 OPatch]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Wed May 11 23:05:01 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORA-01078: failure in processing system parameters
ORA-01565: error in identifying file '+DATADG/jyrac/spfilejyrac.ora'
ORA-17503: ksfdopn:10 Failed to open file +DATADG/jyrac/spfilejyrac.ora
ORA-12547: TNS:lost contact
SQL> exit
Disconnected

错误信息显示没有权限来访问磁盘组中的参数文件,可能是$ORACLE_HOME/bin/oracle权限出问题了

[grid@jyrac1 crs]$ ls -l $ORACLE_HOME/bin/oracle 
-rwxr-x--x 1 grid oinstall 174947566 Dec  2 16:01 /u01/app/product/11.2.0/crs/bin/oracle
[grid@jyrac1 crs]$ chmod 6751 $ORACLE_HOME/bin/oracle
[grid@jyrac1 crs]$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 grid oinstall 174947566 Dec  2 16:01 /u01/app/product/11.2.0/crs/bin/oracle

[oracle@jyrac1 OPatch]$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-s--x 1 oracle asmadmin 198963317 May 11 23:02 /u01/app/oracle/product/11.2.0/db/bin/oracle
[oracle@jyrac1 OPatch]$ chmod 6751 $ORACLE_HOME/bin/oracle
[oracle@jyrac1 OPatch]$ ls -l $ORACLE_HOME/bin/oracle
-rwsr-x--x 1 oracle asmadmin 198963317 May 11 23:02 /u01/app/oracle/product/11.2.0/db/bin/oracle
[oracle@jyrac1 OPatch]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Wed May 11 23:10:40 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to an idle instance.

SQL> startup
ORACLE instance started.

Total System Global Area  669581312 bytes
Fixed Size                  1366724 bytes
Variable Size             243270972 bytes
Database Buffers          419430400 bytes
Redo Buffers                5513216 bytes
Database mounted.
Database opened.
[root@jyrac2 app]# export ORACLE_HOME=/u01/app/oracle/product/11.2.0/db
[root@jyrac2 app]# $ORACLE_HOME/OPatch/opatch auto /u02/22646198/ -oh $ORACLE_HOME/ -ocmrf $ORACLE_HOME/OPatch/ocm/bin/emocmrsp
Executing /u01/app/product/11.2.0/crs/perl/bin/perl /u01/app/oracle/product/11.2.0/db/OPatch/crs/patch11203.pl -patchdir /u02 -patchn 22646198 -oh /u01/app/oracle/product/11.2.0/db/ -ocmrf /u01/app/oracle/product/11.2.0/db/OPatch/ocm/bin/emocmrsp -paramfile /u01/app/product/11.2.0/crs/crs/install/crsconfig_params

This is the main log file: /u01/app/oracle/product/11.2.0/db/cfgtoollogs/opatchauto2016-05-11_23-11-32.log

This file will show your detected configuration and all the steps that opatchauto attempted to do on your system:
/u01/app/oracle/product/11.2.0/db/cfgtoollogs/opatchauto2016-05-11_23-11-32.report.log

2016-05-11 23:11:32: Starting Clusterware Patch Setup
Using configuration parameter file: /u01/app/product/11.2.0/crs/crs/install/crsconfig_params

Stopping RAC /u01/app/oracle/product/11.2.0/db ...
Stopped RAC /u01/app/oracle/product/11.2.0/db successfully

patch /u02/22646198/22502456  apply successful for home  /u01/app/oracle/product/11.2.0/db 
patch /u02/22646198/22502549/custom/server/22502549  apply successful for home  /u01/app/oracle/product/11.2.0/db 

Starting RAC /u01/app/oracle/product/11.2.0/db ...
Started RAC /u01/app/oracle/product/11.2.0/db successfully

opatch auto succeeded.
[grid@jyrac1 app]$ crsctl stat res -t
--------------------------------------------------------------------------------
NAME           TARGET  STATE        SERVER                   STATE_DETAILS       
--------------------------------------------------------------------------------
Local Resources
--------------------------------------------------------------------------------
ora.CRSDG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.DATADG.dg
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.LISTENER.lsnr
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.asm
               ONLINE  ONLINE       jyrac1                   Started             
               ONLINE  ONLINE       jyrac2                   Started             
ora.gsd
               ONLINE  OFFLINE      jyrac1                                       
               ONLINE  OFFLINE      jyrac2                                       
ora.net1.network
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.ons
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
ora.registry.acfs
               ONLINE  ONLINE       jyrac1                                       
               ONLINE  ONLINE       jyrac2                                       
--------------------------------------------------------------------------------
Cluster Resources
--------------------------------------------------------------------------------
ora.LISTENER_SCAN1.lsnr
      1        ONLINE  ONLINE       jyrac1                                       
ora.cvu
      1        ONLINE  ONLINE       jyrac1                                       
ora.jyrac.db
      1        ONLINE  ONLINE       jyrac1                   Open                
      2        ONLINE  ONLINE       jyrac2                   Open                
ora.jyrac1.vip
      1        ONLINE  ONLINE       jyrac1                                       
ora.jyrac2.vip
      1        ONLINE  ONLINE       jyrac2                                       
ora.oc4j
      1        ONLINE  ONLINE       jyrac1                                       
ora.scan1.vip
      1        ONLINE  ONLINE       jyrac1     

成功后,我们还是更新脚本(仅仅在第一节点)

登陆数据库执行脚本

oracle@jyrac1 u02]$cd $ORACLE_HOME/rdbms/admin
oracle@jyrac1 admin]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Thu May 12 08:28:05 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Data Mining and Real Application Testing options
SQL> @catbundle.sql psu apply

六.验证

[grid@jyrac1 app]$ $ORACLE_HOME/OPatch/opatch lspatches
22502505;ACFS Patch Set Update : 11.2.0.4.160419 (22502505)
22502549;OCW Patch Set Update : 11.2.0.4.160419 (22502549)
22502456;Database Patch Set Update : 11.2.0.4.160419 (22502456)

OPatch succeeded.

[grid@jyrac2 crs]$ $ORACLE_HOME/OPatch/opatch lspatches
22502505;ACFS Patch Set Update : 11.2.0.4.160419 (22502505)
22502549;OCW Patch Set Update : 11.2.0.4.160419 (22502549)
22502456;Database Patch Set Update : 11.2.0.4.160419 (22502456)

OPatch succeeded.

[oracle@jyrac1 admin]$ $ORACLE_HOME/OPatch/opatch lspatches
22502549;OCW Patch Set Update : 11.2.0.4.160419 (22502549)
22502456;Database Patch Set Update : 11.2.0.4.160419 (22502456)

OPatch succeeded.

[oracle@jyrac2 dbs]$ $ORACLE_HOME/OPatch/opatch lspatches
22502549;OCW Patch Set Update : 11.2.0.4.160419 (22502549)
22502456;Database Patch Set Update : 11.2.0.4.160419 (22502456)

OPatch succeeded.

或者

[grid@jyrac1 app]$ $ORACLE_HOME/OPatch/opatch lsinventory
Oracle Interim Patch Installer version 11.2.0.3.12
Copyright (c) 2016, Oracle Corporation.  All rights reserved.


Oracle Home       : /u01/app/product/11.2.0/crs
Central Inventory : /u01/app/oraInventory
   from           : /u01/app/product/11.2.0/crs/oraInst.loc
OPatch version    : 11.2.0.3.12
OUI version       : 11.2.0.4.0
Log file location : /u01/app/product/11.2.0/crs/cfgtoollogs/opatch/opatch2016-05-12_08-32-14AM_1.log

Lsinventory Output file location : /u01/app/product/11.2.0/crs/cfgtoollogs/opatch/lsinv/lsinventory2016-05-12_08-32-14AM.txt

--------------------------------------------------------------------------------
Local Machine Information::
Hostname: jyrac1
ARU platform id: 46
ARU platform description:: Linux x86

Installed Top-level Products (1): 

Oracle Grid Infrastructure 11g                                       11.2.0.4.0
There are 1 products installed in this Oracle Home.


Interim patches (3) :

Patch  22502505     : applied on Wed May 11 22:07:58 CST 2016
Unique Patch ID:  19945546
Patch description:  "ACFS Patch Set Update : 11.2.0.4.160419 (22502505)"
   Created on 4 Mar 2016, 00:05:12 hrs PST8PDT
   Bugs fixed:
     21369858, 16318126, 19690653, 17503605, 17203009, 17359415, 20140148
     17611362, 17164243, 19053182, 17696547, 17488768, 18168684, 21519796
     18143006, 21208140, 17428148, 17070158, 20438706, 17510275, 17172303
     18610307, 17376318, 17721778, 22198405, 17699423, 18915417, 18155334
     18321597, 19919907, 18185024, 17636008, 17363999, 20681968, 17475946

Patch  22502549     : applied on Wed May 11 22:07:25 CST 2016
Unique Patch ID:  19945546
Patch description:  "OCW Patch Set Update : 11.2.0.4.160419 (22502549)"
   Created on 18 Mar 2016, 05:57:45 hrs PST8PDT
   Bugs fixed:
     19270660, 18328800, 18508710, 18691572, 20038451, 21251192, 21232394
     20365005, 17750548, 17387214, 17617807, 14497275, 20219458, 17733927
     18180541, 18962892, 17292250, 17378618, 16759171, 20110156, 17843489
     17065496, 13991403, 17273020, 17155238, 20012766, 21245437, 18261183
     18053580, 20218012, 17013634, 17886392, 20995001, 17039197, 17947785
     16317771, 10052729, 22353346, 20340620, 16237657, 20317221, 15917869
     18199185, 18399991, 20186278, 17374271, 18024089, 16849642, 20746251
     20246071, 14270845, 20552947, 18882642, 18414137, 17001914, 17927970
     14378120, 16346413, 15986647, 18068871, 21222147, 18143836, 16206997
     21982225, 19168690, 20235511, 18343490, 21875360, 16613232, 19276791
     17722664, 20440643, 12928658, 18952577, 18520351, 16249829, 18226143
     16076412, 18265482, 18229842, 17172091, 20676340, 17818075, 20091753
     18231837, 14373486, 20136892, 17483479, 20551654, 18120545, 18729166
     13843841, 21225209, 17405302, 18709496, 18330979, 18744838, 17087371
     20531190, 14525998, 18187697, 20598625, 14385860, 18348155, 19479503
     12928592, 17516024, 18370031, 17764053, 19272663, 17551223, 14671408
     18272135, 14207615, 21255373, 17500165, 18875012, 14769643, 18464784
     19558324, 18848125, 19241857, 14851828, 17955615, 20315294, 14693336
     16284825, 17352230, 20014326, 17238586, 17089344, 17405605, 21327402
     17531342, 19398098, 17159489, 17640316, 13823394, 16543190, 22024217
     17983675, 20795241, 17598201, 17481314, 16281493, 18346135, 15986311
     19601468, 17208793, 18700935, 18999857, 14076173, 18428146, 18352845
     17435488, 20408163, 17592037, 18352846, 19616601, 17391726, 17387779
     14777968, 15851860, 16206882, 20141091, 21113068, 20175174, 17305100
     15832129, 19885321, 16901346, 17985714, 18536826, 17780903, 18752378
     18946768, 16876500, 16875342, 17769597, 19955755, 16429265, 18336452
     17273003, 17209968, 16988311, 20094984, 19319357, 17059927, 17046460
     18053631, 16867761, 18774591, 21442094, 20235486, 19359787, 15869775
     19642566, 17447588, 16798862, 15920201

Patch  22502456     : applied on Wed May 11 22:05:13 CST 2016
Unique Patch ID:  19878058
Patch description:  "Database Patch Set Update : 11.2.0.4.160419 (22502456)"
   Created on 9 Mar 2016, 19:56:01 hrs 
Sub-patch  21948347; "Database Patch Set Update : 11.2.0.4.160119 (21948347)"
Sub-patch  21352635; "Database Patch Set Update : 11.2.0.4.8 (21352635)"
Sub-patch  20760982; "Database Patch Set Update : 11.2.0.4.7 (20760982)"
Sub-patch  20299013; "Database Patch Set Update : 11.2.0.4.6 (20299013)"
Sub-patch  19769489; "Database Patch Set Update : 11.2.0.4.5 (19769489)"
Sub-patch  19121551; "Database Patch Set Update : 11.2.0.4.4 (19121551)"
Sub-patch  18522509; "Database Patch Set Update : 11.2.0.4.3 (18522509)"
Sub-patch  18031668; "Database Patch Set Update : 11.2.0.4.2 (18031668)"
Sub-patch  17478514; "Database Patch Set Update : 11.2.0.4.1 (17478514)"
   Bugs fixed:
     17288409, 21051852, 17811429, 18607546, 17205719, 20506699, 17816865
     17922254, 17754782, 16934803, 13364795, 17311728, 17441661, 17284817
     16992075, 17446237, 14015842, 19972569, 21756677, 21538558, 20925795
     17449815, 17375354, 19463897, 13866822, 17982555, 17235750, 17478514
     18317531, 14338435, 18235390, 20803583, 13944971, 20142975, 17811789
     16929165, 18704244, 20506706, 17546973, 20334344, 14054676, 17088068
     17346091, 18264060, 17343514, 21538567, 19680952, 18471685, 19211724
     13951456, 21847223, 16315398, 18744139, 16850630, 19049453, 18673304
     17883081, 19915271, 18641419, 18262334, 17006183, 16065166, 18277454
     16833527, 10136473, 18051556, 17865671, 17852463, 18554871, 17853498
     18334586, 17551709, 17588480, 19827973, 17344412, 17842825, 18828868
     17025461, 11883252, 13609098, 17239687, 17602269, 19197175, 22195457
     18316692, 17313525, 12611721, 19544839, 18964939, 17600719, 18191164
     19393542, 17571306, 18482502, 20777150, 19466309, 17040527, 17165204
     18098207, 16785708, 17465741, 17174582, 16180763, 16777840, 12982566
     19463893, 22195465, 16875449, 12816846, 17237521, 19358317, 17811438
     17811447, 21983325, 17945983, 18762750, 16912439, 17184721, 18061914
     17282229, 18331850, 18202441, 17082359, 18723434, 21972320, 19554106
     14034426, 18339044, 19458377, 17752995, 20448824, 17891943, 17258090
     17767676, 16668584, 18384391, 17040764, 17381384, 15913355, 18356166
     14084247, 20596234, 20506715, 21756661, 13853126, 18203837, 14245531
     21756699, 16043574, 22195441, 17848897, 17877323, 21453153, 17468141
     20861693, 17786518, 17912217, 17037130, 18155762, 16956380, 17478145
     17394950, 18641461, 18189036, 18619917, 17027426, 21352646, 16268425
     22195492, 19584068, 18436307, 17265217, 17634921, 13498382, 21526048
     19258504, 20004087, 17443671, 22195485, 18000422, 20004021, 22321756
     17571039, 21067387, 16344544, 18009564, 14354737, 21286665, 18135678
     18614015, 20441797, 18362222, 17835048, 16472716, 17936109, 17050888
     17325413, 14010183, 18747196, 17761775, 16721594, 17082983, 20067212
     21179898, 17302277, 18084625, 15990359, 18203835, 17297939, 17811456
     16731148, 21168487, 13829543, 17215560, 14133975, 17694209, 17385178
     18091059, 8322815, 17586955, 17201159, 17655634, 18331812, 19730508
     18868646, 17648596, 16220077, 16069901, 17348614, 17393915, 17274537
     17957017, 18096714, 17308789, 18436647, 14285317, 19289642, 14764829
     18328509, 17622427, 22195477, 16943711, 22502493, 14368995, 17346671
     18996843, 17783588, 21343838, 16618694, 17672719, 18856999, 18783224
     17851160, 17546761, 17798953, 18273830, 22092979, 16596890, 19972566
     16384983, 17726838, 17360606, 22321741, 13645875, 18199537, 16542886
     21787056, 17889549, 14565184, 17071721, 17610798, 20299015, 21343897
     22893153, 20657441, 17397545, 18230522, 16360112, 19769489, 12905058
     18641451, 12747740, 18430495, 17016369, 17042658, 14602788, 17551063
     19972568, 21517440, 18508861, 19788842, 14657740, 17332800, 13837378
     19972564, 17186905, 18315328, 19699191, 17437634, 22353199, 18093615
     19006849, 19013183, 17296856, 18674024, 17232014, 16855292, 17762296
     14692762, 21051840, 17705023, 19121551, 21330264, 19854503, 21868720
     19309466, 18681862, 18554763, 20558005, 17390160, 18456514, 16306373
     13955826, 18139690, 17501491, 17752121, 21668627, 17299889, 17889583
     18673325, 19721304, 18293054, 17242746, 17951233, 17649265, 18094246
     19615136, 17011832, 16870214, 17477958, 18522509, 20631274, 16091637
     17323222, 16595641, 16524926, 18228645, 18282562, 17596908, 17156148
     18031668, 16494615, 22683225, 17545847, 17655240, 17614134, 13558557
     17341326, 17891946, 17716305, 16392068, 19271443, 21351877, 18092127
     18440047, 17614227, 14106803, 16903536, 18973907, 18673342, 19032867
     17389192, 17612828, 16194160, 17006570, 17721717, 17390431, 17570240
     16863422, 18325460, 19727057, 16422541, 19972570, 17267114, 18244962
     21538485, 18765602, 18203838, 16198143, 17246576, 14829250, 17835627
     18247991, 14458214, 21051862, 16692232, 17786278, 17227277, 16042673
     16314254, 16228604, 16837842, 17393683, 17787259, 20331945, 20074391
     15861775, 16399083, 18018515, 22683212, 18260550, 21051858, 17036973
     16613964, 17080436, 16579084, 18384537, 18280813, 20296213, 16901385
     15979965, 18441944, 16450169, 9756271, 17892268, 11733603, 16285691
     17587063, 21343775, 16538760, 18180390, 18193833, 21387964, 21051833
     17238511, 17824637, 16571443, 18306996, 14852021, 18674047, 17853456
     12364061, 22195448



Rac system comprising of multiple nodes
  Local node = jyrac1
  Remote node = jyrac2

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

OPatch succeeded.

[grid@jyrac2 crs]$ $ORACLE_HOME/OPatch/opatch lsinventory
Oracle Interim Patch Installer version 11.2.0.3.12
Copyright (c) 2016, Oracle Corporation.  All rights reserved.


Oracle Home       : /u01/app/product/11.2.0/crs
Central Inventory : /u01/app/oraInventory
   from           : /u01/app/product/11.2.0/crs/oraInst.loc
OPatch version    : 11.2.0.3.12
OUI version       : 11.2.0.4.0
Log file location : /u01/app/product/11.2.0/crs/cfgtoollogs/opatch/opatch2016-05-12_08-32-27AM_1.log

Lsinventory Output file location : /u01/app/product/11.2.0/crs/cfgtoollogs/opatch/lsinv/lsinventory2016-05-12_08-32-27AM.txt

--------------------------------------------------------------------------------
Local Machine Information::
Hostname: jyrac2
ARU platform id: 46
ARU platform description:: Linux x86

Installed Top-level Products (1): 

Oracle Grid Infrastructure 11g                                       11.2.0.4.0
There are 1 products installed in this Oracle Home.


Interim patches (3) :

Patch  22502505     : applied on Wed May 11 22:07:58 CST 2016
Unique Patch ID:  19945546
Patch description:  "ACFS Patch Set Update : 11.2.0.4.160419 (22502505)"
   Created on 4 Mar 2016, 00:05:12 hrs PST8PDT
   Bugs fixed:
     21369858, 16318126, 19690653, 17503605, 17203009, 17359415, 20140148
     17611362, 17164243, 19053182, 17696547, 17488768, 18168684, 21519796
     18143006, 21208140, 17428148, 17070158, 20438706, 17510275, 17172303
     18610307, 17376318, 17721778, 22198405, 17699423, 18915417, 18155334
     18321597, 19919907, 18185024, 17636008, 17363999, 20681968, 17475946

Patch  22502549     : applied on Wed May 11 22:07:25 CST 2016
Unique Patch ID:  19945546
Patch description:  "OCW Patch Set Update : 11.2.0.4.160419 (22502549)"
   Created on 18 Mar 2016, 05:57:45 hrs PST8PDT
   Bugs fixed:
     19270660, 18328800, 18508710, 18691572, 20038451, 21251192, 21232394
     20365005, 17750548, 17387214, 17617807, 14497275, 20219458, 17733927
     18180541, 18962892, 17292250, 17378618, 16759171, 20110156, 17843489
     17065496, 13991403, 17273020, 17155238, 20012766, 21245437, 18261183
     18053580, 20218012, 17013634, 17886392, 20995001, 17039197, 17947785
     16317771, 10052729, 22353346, 20340620, 16237657, 20317221, 15917869
     18199185, 18399991, 20186278, 17374271, 18024089, 16849642, 20746251
     20246071, 14270845, 20552947, 18882642, 18414137, 17001914, 17927970
     14378120, 16346413, 15986647, 18068871, 21222147, 18143836, 16206997
     21982225, 19168690, 20235511, 18343490, 21875360, 16613232, 19276791
     17722664, 20440643, 12928658, 18952577, 18520351, 16249829, 18226143
     16076412, 18265482, 18229842, 17172091, 20676340, 17818075, 20091753
     18231837, 14373486, 20136892, 17483479, 20551654, 18120545, 18729166
     13843841, 21225209, 17405302, 18709496, 18330979, 18744838, 17087371
     20531190, 14525998, 18187697, 20598625, 14385860, 18348155, 19479503
     12928592, 17516024, 18370031, 17764053, 19272663, 17551223, 14671408
     18272135, 14207615, 21255373, 17500165, 18875012, 14769643, 18464784
     19558324, 18848125, 19241857, 14851828, 17955615, 20315294, 14693336
     16284825, 17352230, 20014326, 17238586, 17089344, 17405605, 21327402
     17531342, 19398098, 17159489, 17640316, 13823394, 16543190, 22024217
     17983675, 20795241, 17598201, 17481314, 16281493, 18346135, 15986311
     19601468, 17208793, 18700935, 18999857, 14076173, 18428146, 18352845
     17435488, 20408163, 17592037, 18352846, 19616601, 17391726, 17387779
     14777968, 15851860, 16206882, 20141091, 21113068, 20175174, 17305100
     15832129, 19885321, 16901346, 17985714, 18536826, 17780903, 18752378
     18946768, 16876500, 16875342, 17769597, 19955755, 16429265, 18336452
     17273003, 17209968, 16988311, 20094984, 19319357, 17059927, 17046460
     18053631, 16867761, 18774591, 21442094, 20235486, 19359787, 15869775
     19642566, 17447588, 16798862, 15920201

Patch  22502456     : applied on Wed May 11 22:05:13 CST 2016
Unique Patch ID:  19878058
Patch description:  "Database Patch Set Update : 11.2.0.4.160419 (22502456)"
   Created on 9 Mar 2016, 19:56:01 hrs 
Sub-patch  21948347; "Database Patch Set Update : 11.2.0.4.160119 (21948347)"
Sub-patch  21352635; "Database Patch Set Update : 11.2.0.4.8 (21352635)"
Sub-patch  20760982; "Database Patch Set Update : 11.2.0.4.7 (20760982)"
Sub-patch  20299013; "Database Patch Set Update : 11.2.0.4.6 (20299013)"
Sub-patch  19769489; "Database Patch Set Update : 11.2.0.4.5 (19769489)"
Sub-patch  19121551; "Database Patch Set Update : 11.2.0.4.4 (19121551)"
Sub-patch  18522509; "Database Patch Set Update : 11.2.0.4.3 (18522509)"
Sub-patch  18031668; "Database Patch Set Update : 11.2.0.4.2 (18031668)"
Sub-patch  17478514; "Database Patch Set Update : 11.2.0.4.1 (17478514)"
   Bugs fixed:
     17288409, 21051852, 17811429, 18607546, 17205719, 20506699, 17816865
     17922254, 17754782, 16934803, 13364795, 17311728, 17441661, 17284817
     16992075, 17446237, 14015842, 19972569, 21756677, 21538558, 20925795
     17449815, 17375354, 19463897, 13866822, 17982555, 17235750, 17478514
     18317531, 14338435, 18235390, 20803583, 13944971, 20142975, 17811789
     16929165, 18704244, 20506706, 17546973, 20334344, 14054676, 17088068
     17346091, 18264060, 17343514, 21538567, 19680952, 18471685, 19211724
     13951456, 21847223, 16315398, 18744139, 16850630, 19049453, 18673304
     17883081, 19915271, 18641419, 18262334, 17006183, 16065166, 18277454
     16833527, 10136473, 18051556, 17865671, 17852463, 18554871, 17853498
     18334586, 17551709, 17588480, 19827973, 17344412, 17842825, 18828868
     17025461, 11883252, 13609098, 17239687, 17602269, 19197175, 22195457
     18316692, 17313525, 12611721, 19544839, 18964939, 17600719, 18191164
     19393542, 17571306, 18482502, 20777150, 19466309, 17040527, 17165204
     18098207, 16785708, 17465741, 17174582, 16180763, 16777840, 12982566
     19463893, 22195465, 16875449, 12816846, 17237521, 19358317, 17811438
     17811447, 21983325, 17945983, 18762750, 16912439, 17184721, 18061914
     17282229, 18331850, 18202441, 17082359, 18723434, 21972320, 19554106
     14034426, 18339044, 19458377, 17752995, 20448824, 17891943, 17258090
     17767676, 16668584, 18384391, 17040764, 17381384, 15913355, 18356166
     14084247, 20596234, 20506715, 21756661, 13853126, 18203837, 14245531
     21756699, 16043574, 22195441, 17848897, 17877323, 21453153, 17468141
     20861693, 17786518, 17912217, 17037130, 18155762, 16956380, 17478145
     17394950, 18641461, 18189036, 18619917, 17027426, 21352646, 16268425
     22195492, 19584068, 18436307, 17265217, 17634921, 13498382, 21526048
     19258504, 20004087, 17443671, 22195485, 18000422, 20004021, 22321756
     17571039, 21067387, 16344544, 18009564, 14354737, 21286665, 18135678
     18614015, 20441797, 18362222, 17835048, 16472716, 17936109, 17050888
     17325413, 14010183, 18747196, 17761775, 16721594, 17082983, 20067212
     21179898, 17302277, 18084625, 15990359, 18203835, 17297939, 17811456
     16731148, 21168487, 13829543, 17215560, 14133975, 17694209, 17385178
     18091059, 8322815, 17586955, 17201159, 17655634, 18331812, 19730508
     18868646, 17648596, 16220077, 16069901, 17348614, 17393915, 17274537
     17957017, 18096714, 17308789, 18436647, 14285317, 19289642, 14764829
     18328509, 17622427, 22195477, 16943711, 22502493, 14368995, 17346671
     18996843, 17783588, 21343838, 16618694, 17672719, 18856999, 18783224
     17851160, 17546761, 17798953, 18273830, 22092979, 16596890, 19972566
     16384983, 17726838, 17360606, 22321741, 13645875, 18199537, 16542886
     21787056, 17889549, 14565184, 17071721, 17610798, 20299015, 21343897
     22893153, 20657441, 17397545, 18230522, 16360112, 19769489, 12905058
     18641451, 12747740, 18430495, 17016369, 17042658, 14602788, 17551063
     19972568, 21517440, 18508861, 19788842, 14657740, 17332800, 13837378
     19972564, 17186905, 18315328, 19699191, 17437634, 22353199, 18093615
     19006849, 19013183, 17296856, 18674024, 17232014, 16855292, 17762296
     14692762, 21051840, 17705023, 19121551, 21330264, 19854503, 21868720
     19309466, 18681862, 18554763, 20558005, 17390160, 18456514, 16306373
     13955826, 18139690, 17501491, 17752121, 21668627, 17299889, 17889583
     18673325, 19721304, 18293054, 17242746, 17951233, 17649265, 18094246
     19615136, 17011832, 16870214, 17477958, 18522509, 20631274, 16091637
     17323222, 16595641, 16524926, 18228645, 18282562, 17596908, 17156148
     18031668, 16494615, 22683225, 17545847, 17655240, 17614134, 13558557
     17341326, 17891946, 17716305, 16392068, 19271443, 21351877, 18092127
     18440047, 17614227, 14106803, 16903536, 18973907, 18673342, 19032867
     17389192, 17612828, 16194160, 17006570, 17721717, 17390431, 17570240
     16863422, 18325460, 19727057, 16422541, 19972570, 17267114, 18244962
     21538485, 18765602, 18203838, 16198143, 17246576, 14829250, 17835627
     18247991, 14458214, 21051862, 16692232, 17786278, 17227277, 16042673
     16314254, 16228604, 16837842, 17393683, 17787259, 20331945, 20074391
     15861775, 16399083, 18018515, 22683212, 18260550, 21051858, 17036973
     16613964, 17080436, 16579084, 18384537, 18280813, 20296213, 16901385
     15979965, 18441944, 16450169, 9756271, 17892268, 11733603, 16285691
     17587063, 21343775, 16538760, 18180390, 18193833, 21387964, 21051833
     17238511, 17824637, 16571443, 18306996, 14852021, 18674047, 17853456
     12364061, 22195448



Rac system comprising of multiple nodes
  Local node = jyrac1
  Remote node = jyrac2

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

OPatch succeeded.



[oracle@jyrac1 admin]$ $ORACLE_HOME/OPatch/opatch lsinventory
Oracle Interim Patch Installer version 11.2.0.3.12
Copyright (c) 2016, Oracle Corporation.  All rights reserved.


Oracle Home       : /u01/app/oracle/product/11.2.0/db
Central Inventory : /u01/app/oraInventory
   from           : /u01/app/oracle/product/11.2.0/db/oraInst.loc
OPatch version    : 11.2.0.3.12
OUI version       : 11.2.0.4.0
Log file location : /u01/app/oracle/product/11.2.0/db/cfgtoollogs/opatch/opatch2016-05-12_08-32-35AM_1.log

Lsinventory Output file location : /u01/app/oracle/product/11.2.0/db/cfgtoollogs/opatch/lsinv/lsinventory2016-05-12_08-32-35AM.txt

--------------------------------------------------------------------------------
Local Machine Information::
Hostname: jyrac1
ARU platform id: 46
ARU platform description:: Linux x86

Installed Top-level Products (1): 

Oracle Database 11g                                                  11.2.0.4.0
There are 1 products installed in this Oracle Home.


Interim patches (2) :

Patch  22502549     : applied on Wed May 11 23:03:19 CST 2016
Unique Patch ID:  19945546
Patch description:  "OCW Patch Set Update : 11.2.0.4.160419 (22502549)"
   Created on 18 Mar 2016, 05:57:37 hrs PST8PDT
   Bugs fixed:
     9999999

Patch  22502456     : applied on Wed May 11 23:01:20 CST 2016
Unique Patch ID:  19878058
Patch description:  "Database Patch Set Update : 11.2.0.4.160419 (22502456)"
   Created on 9 Mar 2016, 19:56:01 hrs 
Sub-patch  21948347; "Database Patch Set Update : 11.2.0.4.160119 (21948347)"
Sub-patch  21352635; "Database Patch Set Update : 11.2.0.4.8 (21352635)"
Sub-patch  20760982; "Database Patch Set Update : 11.2.0.4.7 (20760982)"
Sub-patch  20299013; "Database Patch Set Update : 11.2.0.4.6 (20299013)"
Sub-patch  19769489; "Database Patch Set Update : 11.2.0.4.5 (19769489)"
Sub-patch  19121551; "Database Patch Set Update : 11.2.0.4.4 (19121551)"
Sub-patch  18522509; "Database Patch Set Update : 11.2.0.4.3 (18522509)"
Sub-patch  18031668; "Database Patch Set Update : 11.2.0.4.2 (18031668)"
Sub-patch  17478514; "Database Patch Set Update : 11.2.0.4.1 (17478514)"
   Bugs fixed:
     17288409, 21051852, 17811429, 18607546, 17205719, 20506699, 17816865
     17922254, 17754782, 16934803, 13364795, 17311728, 17441661, 17284817
     16992075, 17446237, 14015842, 19972569, 21756677, 21538558, 20925795
     17449815, 17375354, 19463897, 13866822, 17982555, 17235750, 17478514
     18317531, 14338435, 18235390, 20803583, 13944971, 20142975, 17811789
     16929165, 18704244, 20506706, 17546973, 20334344, 14054676, 17088068
     17346091, 18264060, 17343514, 21538567, 19680952, 18471685, 19211724
     13951456, 21847223, 16315398, 18744139, 16850630, 19049453, 18673304
     17883081, 19915271, 18641419, 18262334, 17006183, 16065166, 18277454
     16833527, 10136473, 18051556, 17865671, 17852463, 18554871, 17853498
     18334586, 17551709, 17588480, 19827973, 17344412, 17842825, 18828868
     17025461, 11883252, 13609098, 17239687, 17602269, 19197175, 22195457
     18316692, 17313525, 12611721, 19544839, 18964939, 17600719, 18191164
     19393542, 17571306, 18482502, 20777150, 19466309, 17040527, 17165204
     18098207, 16785708, 17465741, 17174582, 16180763, 16777840, 12982566
     19463893, 22195465, 16875449, 12816846, 17237521, 19358317, 17811438
     17811447, 21983325, 17945983, 18762750, 16912439, 17184721, 18061914
     17282229, 18331850, 18202441, 17082359, 18723434, 21972320, 19554106
     14034426, 18339044, 19458377, 17752995, 20448824, 17891943, 17258090
     17767676, 16668584, 18384391, 17040764, 17381384, 15913355, 18356166
     14084247, 20596234, 20506715, 21756661, 13853126, 18203837, 14245531
     21756699, 16043574, 22195441, 17848897, 17877323, 21453153, 17468141
     20861693, 17786518, 17912217, 17037130, 18155762, 16956380, 17478145
     17394950, 18641461, 18189036, 18619917, 17027426, 21352646, 16268425
     22195492, 19584068, 18436307, 17265217, 17634921, 13498382, 21526048
     19258504, 20004087, 17443671, 22195485, 18000422, 20004021, 22321756
     17571039, 21067387, 16344544, 18009564, 14354737, 21286665, 18135678
     18614015, 20441797, 18362222, 17835048, 16472716, 17936109, 17050888
     17325413, 14010183, 18747196, 17761775, 16721594, 17082983, 20067212
     21179898, 17302277, 18084625, 15990359, 18203835, 17297939, 17811456
     16731148, 21168487, 13829543, 17215560, 14133975, 17694209, 17385178
     18091059, 8322815, 17586955, 17201159, 17655634, 18331812, 19730508
     18868646, 17648596, 16220077, 16069901, 17348614, 17393915, 17274537
     17957017, 18096714, 17308789, 18436647, 14285317, 19289642, 14764829
     18328509, 17622427, 22195477, 16943711, 22502493, 14368995, 17346671
     18996843, 17783588, 21343838, 16618694, 17672719, 18856999, 18783224
     17851160, 17546761, 17798953, 18273830, 22092979, 16596890, 19972566
     16384983, 17726838, 17360606, 22321741, 13645875, 18199537, 16542886
     21787056, 17889549, 14565184, 17071721, 17610798, 20299015, 21343897
     22893153, 20657441, 17397545, 18230522, 16360112, 19769489, 12905058
     18641451, 12747740, 18430495, 17016369, 17042658, 14602788, 17551063
     19972568, 21517440, 18508861, 19788842, 14657740, 17332800, 13837378
     19972564, 17186905, 18315328, 19699191, 17437634, 22353199, 18093615
     19006849, 19013183, 17296856, 18674024, 17232014, 16855292, 17762296
     14692762, 21051840, 17705023, 19121551, 21330264, 19854503, 21868720
     19309466, 18681862, 18554763, 20558005, 17390160, 18456514, 16306373
     13955826, 18139690, 17501491, 17752121, 21668627, 17299889, 17889583
     18673325, 19721304, 18293054, 17242746, 17951233, 17649265, 18094246
     19615136, 17011832, 16870214, 17477958, 18522509, 20631274, 16091637
     17323222, 16595641, 16524926, 18228645, 18282562, 17596908, 17156148
     18031668, 16494615, 22683225, 17545847, 17655240, 17614134, 13558557
     17341326, 17891946, 17716305, 16392068, 19271443, 21351877, 18092127
     18440047, 17614227, 14106803, 16903536, 18973907, 18673342, 19032867
     17389192, 17612828, 16194160, 17006570, 17721717, 17390431, 17570240
     16863422, 18325460, 19727057, 16422541, 19972570, 17267114, 18244962
     21538485, 18765602, 18203838, 16198143, 17246576, 14829250, 17835627
     18247991, 14458214, 21051862, 16692232, 17786278, 17227277, 16042673
     16314254, 16228604, 16837842, 17393683, 17787259, 20331945, 20074391
     15861775, 16399083, 18018515, 22683212, 18260550, 21051858, 17036973
     16613964, 17080436, 16579084, 18384537, 18280813, 20296213, 16901385
     15979965, 18441944, 16450169, 9756271, 17892268, 11733603, 16285691
     17587063, 21343775, 16538760, 18180390, 18193833, 21387964, 21051833
     17238511, 17824637, 16571443, 18306996, 14852021, 18674047, 17853456
     12364061, 22195448



Rac system comprising of multiple nodes
  Local node = jyrac1
  Remote node = jyrac2

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

OPatch succeeded.


[oracle@jyrac2 dbs]$ $ORACLE_HOME/OPatch/opatch lsinventory
Oracle Interim Patch Installer version 11.2.0.3.12
Copyright (c) 2016, Oracle Corporation.  All rights reserved.


Oracle Home       : /u01/app/oracle/product/11.2.0/db
Central Inventory : /u01/app/oraInventory
   from           : /u01/app/oracle/product/11.2.0/db/oraInst.loc
OPatch version    : 11.2.0.3.12
OUI version       : 11.2.0.4.0
Log file location : /u01/app/oracle/product/11.2.0/db/cfgtoollogs/opatch/opatch2016-05-12_08-32-33AM_1.log

Lsinventory Output file location : /u01/app/oracle/product/11.2.0/db/cfgtoollogs/opatch/lsinv/lsinventory2016-05-12_08-32-33AM.txt

--------------------------------------------------------------------------------
Local Machine Information::
Hostname: jyrac2
ARU platform id: 46
ARU platform description:: Linux x86

Installed Top-level Products (1): 

Oracle Database 11g                                                  11.2.0.4.0
There are 1 products installed in this Oracle Home.


Interim patches (2) :

Patch  22502549     : applied on Wed May 11 23:17:40 CST 2016
Unique Patch ID:  19945546
Patch description:  "OCW Patch Set Update : 11.2.0.4.160419 (22502549)"
   Created on 18 Mar 2016, 05:57:37 hrs PST8PDT
   Bugs fixed:
     9999999

Patch  22502456     : applied on Wed May 11 23:15:56 CST 2016
Unique Patch ID:  19878058
Patch description:  "Database Patch Set Update : 11.2.0.4.160419 (22502456)"
   Created on 9 Mar 2016, 19:56:01 hrs 
Sub-patch  21948347; "Database Patch Set Update : 11.2.0.4.160119 (21948347)"
Sub-patch  21352635; "Database Patch Set Update : 11.2.0.4.8 (21352635)"
Sub-patch  20760982; "Database Patch Set Update : 11.2.0.4.7 (20760982)"
Sub-patch  20299013; "Database Patch Set Update : 11.2.0.4.6 (20299013)"
Sub-patch  19769489; "Database Patch Set Update : 11.2.0.4.5 (19769489)"
Sub-patch  19121551; "Database Patch Set Update : 11.2.0.4.4 (19121551)"
Sub-patch  18522509; "Database Patch Set Update : 11.2.0.4.3 (18522509)"
Sub-patch  18031668; "Database Patch Set Update : 11.2.0.4.2 (18031668)"
Sub-patch  17478514; "Database Patch Set Update : 11.2.0.4.1 (17478514)"
   Bugs fixed:
     17288409, 21051852, 17811429, 18607546, 17205719, 20506699, 17816865
     17922254, 17754782, 16934803, 13364795, 17311728, 17441661, 17284817
     16992075, 17446237, 14015842, 19972569, 21756677, 21538558, 20925795
     17449815, 17375354, 19463897, 13866822, 17982555, 17235750, 17478514
     18317531, 14338435, 18235390, 20803583, 13944971, 20142975, 17811789
     16929165, 18704244, 20506706, 17546973, 20334344, 14054676, 17088068
     17346091, 18264060, 17343514, 21538567, 19680952, 18471685, 19211724
     13951456, 21847223, 16315398, 18744139, 16850630, 19049453, 18673304
     17883081, 19915271, 18641419, 18262334, 17006183, 16065166, 18277454
     16833527, 10136473, 18051556, 17865671, 17852463, 18554871, 17853498
     18334586, 17551709, 17588480, 19827973, 17344412, 17842825, 18828868
     17025461, 11883252, 13609098, 17239687, 17602269, 19197175, 22195457
     18316692, 17313525, 12611721, 19544839, 18964939, 17600719, 18191164
     19393542, 17571306, 18482502, 20777150, 19466309, 17040527, 17165204
     18098207, 16785708, 17465741, 17174582, 16180763, 16777840, 12982566
     19463893, 22195465, 16875449, 12816846, 17237521, 19358317, 17811438
     17811447, 21983325, 17945983, 18762750, 16912439, 17184721, 18061914
     17282229, 18331850, 18202441, 17082359, 18723434, 21972320, 19554106
     14034426, 18339044, 19458377, 17752995, 20448824, 17891943, 17258090
     17767676, 16668584, 18384391, 17040764, 17381384, 15913355, 18356166
     14084247, 20596234, 20506715, 21756661, 13853126, 18203837, 14245531
     21756699, 16043574, 22195441, 17848897, 17877323, 21453153, 17468141
     20861693, 17786518, 17912217, 17037130, 18155762, 16956380, 17478145
     17394950, 18641461, 18189036, 18619917, 17027426, 21352646, 16268425
     22195492, 19584068, 18436307, 17265217, 17634921, 13498382, 21526048
     19258504, 20004087, 17443671, 22195485, 18000422, 20004021, 22321756
     17571039, 21067387, 16344544, 18009564, 14354737, 21286665, 18135678
     18614015, 20441797, 18362222, 17835048, 16472716, 17936109, 17050888
     17325413, 14010183, 18747196, 17761775, 16721594, 17082983, 20067212
     21179898, 17302277, 18084625, 15990359, 18203835, 17297939, 17811456
     16731148, 21168487, 13829543, 17215560, 14133975, 17694209, 17385178
     18091059, 8322815, 17586955, 17201159, 17655634, 18331812, 19730508
     18868646, 17648596, 16220077, 16069901, 17348614, 17393915, 17274537
     17957017, 18096714, 17308789, 18436647, 14285317, 19289642, 14764829
     18328509, 17622427, 22195477, 16943711, 22502493, 14368995, 17346671
     18996843, 17783588, 21343838, 16618694, 17672719, 18856999, 18783224
     17851160, 17546761, 17798953, 18273830, 22092979, 16596890, 19972566
     16384983, 17726838, 17360606, 22321741, 13645875, 18199537, 16542886
     21787056, 17889549, 14565184, 17071721, 17610798, 20299015, 21343897
     22893153, 20657441, 17397545, 18230522, 16360112, 19769489, 12905058
     18641451, 12747740, 18430495, 17016369, 17042658, 14602788, 17551063
     19972568, 21517440, 18508861, 19788842, 14657740, 17332800, 13837378
     19972564, 17186905, 18315328, 19699191, 17437634, 22353199, 18093615
     19006849, 19013183, 17296856, 18674024, 17232014, 16855292, 17762296
     14692762, 21051840, 17705023, 19121551, 21330264, 19854503, 21868720
     19309466, 18681862, 18554763, 20558005, 17390160, 18456514, 16306373
     13955826, 18139690, 17501491, 17752121, 21668627, 17299889, 17889583
     18673325, 19721304, 18293054, 17242746, 17951233, 17649265, 18094246
     19615136, 17011832, 16870214, 17477958, 18522509, 20631274, 16091637
     17323222, 16595641, 16524926, 18228645, 18282562, 17596908, 17156148
     18031668, 16494615, 22683225, 17545847, 17655240, 17614134, 13558557
     17341326, 17891946, 17716305, 16392068, 19271443, 21351877, 18092127
     18440047, 17614227, 14106803, 16903536, 18973907, 18673342, 19032867
     17389192, 17612828, 16194160, 17006570, 17721717, 17390431, 17570240
     16863422, 18325460, 19727057, 16422541, 19972570, 17267114, 18244962
     21538485, 18765602, 18203838, 16198143, 17246576, 14829250, 17835627
     18247991, 14458214, 21051862, 16692232, 17786278, 17227277, 16042673
     16314254, 16228604, 16837842, 17393683, 17787259, 20331945, 20074391
     15861775, 16399083, 18018515, 22683212, 18260550, 21051858, 17036973
     16613964, 17080436, 16579084, 18384537, 18280813, 20296213, 16901385
     15979965, 18441944, 16450169, 9756271, 17892268, 11733603, 16285691
     17587063, 21343775, 16538760, 18180390, 18193833, 21387964, 21051833
     17238511, 17824637, 16571443, 18306996, 14852021, 18674047, 17853456
     12364061, 22195448



Rac system comprising of multiple nodes
  Local node = jyrac2
  Remote node = jyrac1

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

OPatch succeeded.

到此将Oracle 11.2.0.4升级到11.2.0.4.160419的操作完成

Linux 格式化分区 报错Could not stat /dev/sda3 — No such file or directory

执行分区过程如下:
[root@jyrac2 ~]# fdisk /dev/sda

The number of cylinders for this disk is set to 3002.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)

Command (m for help): p

Disk /dev/sda: 24.6 GB, 24696061952 bytes
255 heads, 63 sectors/track, 3002 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 2355 18916506 83 Linux
/dev/sda2 2356 2610 2048287+ 82 Linux swap / Solaris

Command (m for help): m
Command action
a toggle a bootable flag
b edit bsd disklabel
c toggle the dos compatibility flag
d delete a partition
l list known partition types
m print this menu
n add a new partition
o create a new empty DOS partition table
p print the partition table
q quit without saving changes
s create a new empty Sun disklabel
t change a partition’s system id
u change display/entry units
v verify the partition table
w write table to disk and exit
x extra functionality (experts only)

Command (m for help): u
Changing display/entry units to sectors

Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 3
First sector (41929650-48234495, default 41929650):
Using default value 41929650
Last sector or +size or +sizeM or +sizeK (41929650-48234495, default 48234495):
Using default value 48234495

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 16: Device or resource busy.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.
You have new mail in /var/spool/mail/root

[root@jyrac2 ~]# fdisk -l

Disk /dev/sda: 24.6 GB, 24696061952 bytes
255 heads, 63 sectors/track, 3002 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/sda1 * 1 2355 18916506 83 Linux
/dev/sda2 2356 2610 2048287+ 82 Linux swap / Solaris
/dev/sda3 2611 3003 3152423 83 Linux
新的分区为/dev/sda3

对分区进行格式化:
[root@jyrac2 /]# mkfs.ext3 /dev/sda3
mke2fs 1.39 (29-May-2006)
Could not stat /dev/sda3 — No such file or directory

The device apparently does not exist; did you specify it correctly?

解决这个问题可以使用partprobe 命令,partprobe包含在parted的rpm软件包中。partprobe可以修改kernel中分区表,使kernel重新读取分区表。 因此,使用该命令就可以创建分区并且在不重新启动机器的情况下系统能够识别这些分区。
检查是否安装了partprobe软件包
[root@jyrac2 /]# rpm -q parted
parted-1.8.1-23.el5

[root@jyrac2 /]# partprobe
[root@jyrac2 /]# mkfs -t ext3 /dev/sda3
mke2fs 1.39 (29-May-2006)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
394400 inodes, 788105 blocks
39405 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=809500672
25 block groups
32768 blocks per group, 32768 fragments per group
15776 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912

Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 21 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
You have new mail in /var/spool/mail/root
格式化分区成功
[root@jyrac2 /]# mkdir /u02
[root@jyrac2 /]# mount /dev/sda3 /u02
[root@jyrac2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda1 18G 16G 1.5G 92% /
tmpfs 2.0G 0 2.0G 0% /dev/shm
/dev/sda3 4.0G 237M 3.6G 7% /u02

Oracle 11g RMAN虚拟私有目录

虚拟私有目录
缺省情况下,RMAN恢复目录的所有用户都有完全的权限来向恢复目录插入,更新与删除元数据。例如,如果管理员管理的两个不相关的数据库共享同一个恢复目录,每个管理员都可以有意或无意的损坏另一个数据库的元数据。在许多企业,这种情况是被允许的因为相同的人管理许多不同的数据库与恢复目录。你可能期望限制每个数据库管理员只能修改属于他管理的数据库元数据。可以通过创建虚拟私有目录来完成这个目标。

每个11G恢复目录都支持虚拟恢复目录,但它们需要显式地被创建。虚拟私有目录的个数没有限制,每个虚拟私有目录是属于数据库方案用户不同于恢复目录的所有者。

在创建一个或多个虚拟私有目录后,接下来就是管理员对恢复目录授予每个虚拟私有目录权限来向恢复目录注册当前使用的一个或多个数据库。恢复目录管理也能被授予权限来使用虚拟私有目录来注册新的数据库。

一.创建基本恢复目录:
1.启动SQL*Plus并使用管理权限连接到包含恢复目录的数据库

[oracle11@jingyong1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Sun May 10 17:24:02 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

2.为恢复目录创建一个用户与方案

SQL> create user rman identified by "rman" default tablespace users quota unlimited on users temporary tablespace temp;

User created.

3.给恢复目录用户授予recovery_catalog_owner角色。有这个角色的用户有恢复与查询恢复目录所需要的所有权限

SQL> grant recovery_catalog_owner to rman;

Grant succeeded.

4.启动RMAN并连接到包含恢复目录的数据库,使用恢复目录用户连接数据库

[oracle11@jingyong1 ~]$ rman catalog rman/rman@cs

Recovery Manager: Release 11.2.0.4.0 - Production on Fri May 8 14:28:09 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to recovery catalog database

RMAN>

5.执行create catalog命令来创建目录。创建操作可能会执行几分钟。如果恢复目录表空间是用户的缺省表空间,那么可以执行以下命令

RMAN> create catalog;

recovery catalog created

可以在执行create catalog命令时指定表空间名:RMAN> CREATE CATALOG TABLESPACE cat_tbs;如果恢复目录要使用的表空间名是RMAN的保留关键字,那么必须书写为大写并以引号括起来,比如:CREATE CATALOG TABLESPACE ‘CATALOG’。

6.使用SQL*Plus来查询恢复目录查看相关基本是否创建

SQL> conn rman/rman
Connected.

SQL> SELECT TABLE_NAME FROM USER_TABLES;

TABLE_NAME
------------------------------
DB
NODE
CONF
DBINC
CKP
TS
TSATT
DF
SITE_DFATT
TF
SITE_TFATT
OFFR
RR
RT
ORL
RLH
AL
BS
BP
BCF
CCF
XCF
BSF
BDF
CDF
XDF
BRL
BCB
CCB
SCR
SCRL
CONFIG
XAL
RSR
FB
GRSP
NRSP
VPC_USERS
VPC_DATABASES
CFS
BCR
ROUT
RCVER
TEMPRES

44 rows selected.

SQL> select count(*) from user_objects;

  COUNT(*)
----------
       252

二.创建虚拟私有目录
1.启动SQL*Plus并使用管理权限连接到恢复目录数据库

[oracle11@jingyong1 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Sun May 10 17:24:02 2015

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

2.如果虚拟私有目录的所者用户不存在,那么创建这个用户。例如,如果想要创建数据库用户vpc1来管理虚拟私有目录,那么可以执行下面的命令

SQL> create user vpc1 identified by "vpc1" default tablespace users quota unlimited on users temporary tablespace temp;

User created.

3.对管理虚拟私有目录的用户授予recovery_catalog_owner角色

SQL> grant recovery_catalog_owner to vpc1;

Grant succeeded.

SQL> exit

4.启动RMAN并以基本恢复目录用户连接到恢复目录数据库

[oracle11@oracle11g ~]$ rman

Recovery Manager: Release 11.2.0.4.0 - Production on Sun May 10 16:09:22 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

RMAN> connect catalog rman/rman@cs

connected to recovery catalog database

RMAN>

5.给虚拟私有目录用户授予需要的权限,指定用户vpc1可以访问数据库db的元数据

RMAN> grant catalog for database db to vpc1;

Grant succeeded.

在授予权限时可以使用DBID不一定要使用数据库名。虚拟私有目录用户不能访问恢复目录中任何其它数据库的元数据。

6.可以授予用户向恢复目录注册新目标数据库的能力

RMAN> grant register database to vpc1;

Grant succeeded.

7.启动RMAN并使用虚拟私有目录用户(不是基本恢复目录用户)连接到恢复目录数据库

Recovery Manager complete.
[oracle11@oracle11g ~]$ rman

Recovery Manager: Release 11.2.0.4.0 - Production on Sun May 10 16:19:26 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

RMAN> connect catalog vpc1/vpc1@cs

connected to recovery catalog database

RMAN>

8.创建虚拟私有目录

[oracle11@jingyong1 cs]$ rman catalog vpc1/vpc1@cs

Recovery Manager: Release 11.2.0.4.0 - Production on Sun May 10 17:25:40 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to recovery catalog database

RMAN> create virtual catalog;

found ineligible base catalog owned by RMAN
found eligible base catalog owned by VPC1
created virtual catalog against base catalog owned by VPC1

9.如果是使用 10.2或之前的版本RMAN且要使用虚拟私有目录,那么可以执行下面的PL/SQL过程来创建虚拟私有目录(这里的base_catalog_owner是基本恢复目录用户)

SQL> EXECUTE base_catalog_owner.DBMS_RCVCAT.CREATE_VIRTUAL_CATALOG;

10.注册目标数据库

[oracle11@jingyong1 cs]$ rman target sys/system@db catalog vpc1/vpc1@cs

Recovery Manager: Release 11.2.0.4.0 - Production on Sun May 10 17:46:51 2015

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

connected to target database: DB (DBID=1640573015)
connected to recovery catalog database

RMAN> register database;

database registered in recovery catalog
starting full resync of recovery catalog
full resync complete

使用dbms_transaction来获得事务ID

一般找出当前事务ID与回滚段最常见的方法就是执行以下SQL

SQL> select xidusn, xidslot, xidsqn  from v$transaction, v$session  where saddr=ses_addr;

    XIDUSN    XIDSLOT     XIDSQN
---------- ---------- ----------
         6         27       9338

而最简单与最容易的方法是使用dbms_transaction PL/SQL包。下面使用一个例子来进行说明如何使用dbms_transaction PL/SQL包来找出当前事务ID,并使用undo header dump信息来进行验证。

SQL> select dbms_transaction.local_transaction_id from dual;

LOCAL_TRANSACTION_ID
--------------------------------------------------------------------------------

SQL> set transaction read write;

Transaction set.

SQL> select dbms_transaction.local_transaction_id from dual;

LOCAL_TRANSACTION_ID
--------------------------------------------------------------------------------
6.27.9339

6 –> undo segment number(USN) undo段号
27 –> Transaction slot in the transaction list 事务列表中的事务插槽
9339 –> Sequence number(the number of times the given slot has been used) 序列号(给定的事务插槽被使用的次数)

上面的事务ID可以通过undo segment的undo header dump信息来进行验证
1.找到回滚段名

SQL> select * from v$rollname where USN=6;

       USN NAME
---------- ------------------------------
         6 _SYSSMU6_3214712007$

2.转储回滚段header

SQL> alter system dump undo header '_SYSSMU6_3214712007$';

System altered.

SQL> select
  2  d.value||'/'||lower(rtrim(i.instance,
  3  chr(0)))||'_ora_'||p.spid||'.trc' trace_file_name
  4  from ( select p.spid
  5  from v$mystat m,
  6  v$session s,v$process p
  7  where m.statistic# = 1 and s.sid = m.sid and p.addr = s.paddr) p,
  8  ( select t.instance from v$thread  t,v$parameter v
  9  where v.name = 'thread' and
 10  (v.value = 0 or t.thread# = to_number(v.value))) i,
 11  ( select value from v$parameter
 12  where name = 'user_dump_dest') d;

TRACE_FILE_NAME
--------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/jyrac/jyrac1/trace/jyrac1_ora_16785.trc

跟踪文件信息如下:

Unix process pid: 16785, image: oracle@jyrac1 (TNS V1-V3)


*** 2016-04-28 09:10:02.380
*** SESSION ID:(147.9205) 2016-04-28 09:10:02.380
*** CLIENT ID:() 2016-04-28 09:10:02.380
*** SERVICE NAME:(SYS$USERS) 2016-04-28 09:10:02.380
*** MODULE NAME:(sqlplus@jyrac1 (TNS V1-V3)) 2016-04-28 09:10:02.380
*** ACTION NAME:() 2016-04-28 09:10:02.380
 
 
********************************************************************************
Undo Segment:  _SYSSMU6_3214712007$ (6)
********************************************************************************
  Extent Control Header
  -----------------------------------------------------------------
  Extent Header:: spare1: 0      spare2: 0      #extents: 3      #blocks: 143   
                  last map  0x00000000  #maps: 0      offset: 4080  
      Highwater::  0x00c00aaa  ext#: 2      blk#: 42     ext size: 128   
  #blocks in seg. hdr's freelists: 0     
  #blocks below: 0     
  mapblk  0x00000000  offset: 2     
                   Unlocked
     Map Header:: next  0x00000000  #extents: 3    obj#: 0      flag: 0x40000000
  Extent Map
  -----------------------------------------------------------------
   0x00c000d1  length: 7     
   0x00c00108  length: 8     
   0x00c00a80  length: 128   
  
 Retention Table 
  -----------------------------------------------------------
 Extent Number:0  Commit Time: 1461797986
 Extent Number:1  Commit Time: 1461800269
 Extent Number:2  Commit Time: 1461796031
  
  TRN CTL:: seq: 0x0c6a chd: 0x001e ctl: 0x001f inc: 0x00000000 nfb: 0x0000
            mgc: 0xb000 xts: 0x0068 flg: 0x0001 opt: 2147483646 (0x7ffffffe)
            uba: 0x00c00aa6.0c6a.18 scn: 0x0000.014ce06a
Version: 0x01
  FREE BLOCK POOL::
    uba: 0x00000000.0c6a.17 ext: 0x2  spc: 0x128c  
    uba: 0x00000000.0c6a.02 ext: 0x2  spc: 0x1ace  
    uba: 0x00000000.0c6a.14 ext: 0x2  spc: 0x13fe  
    uba: 0x00000000.0bc3.01 ext: 0x2  spc: 0x1f84  
    uba: 0x00000000.0000.00 ext: 0x0  spc: 0x0     
  TRN TBL::
 
  index  state cflags  wrap#    uel         scn            dba            parent-xid    nub     stmt_num    cmt
  ------------------------------------------------------------------------------------------------
   0x00    9    0x00  0x2471  0x001a  0x0000.014ce250  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461804655
   0x01    9    0x00  0x2479  0x0008  0x0000.014ce7f8  0x00c00aa9  0x0000.000.00000000  0x00000001   0x00000000  1461805256
   0x02    9    0x00  0x2476  0x000c  0x0000.014ce44e  0x00c00aa6  0x0000.000.00000000  0x00000001   0x00000000  1461805136
   0x03    9    0x00  0x2472  0x000b  0x0000.014ce2d5  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461804775
   0x04    9    0x00  0x2477  0x0000  0x0000.014ce210  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461804595
   0x05    9    0x00  0x2478  0x0017  0x0000.014ce3d0  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461805015
   0x06    9    0x00  0x2478  0x0018  0x0000.014ce4db  0x00c00aa6  0x0000.000.00000000  0x00000001   0x00000000  1461805245
   0x07    9    0x00  0x2479  0x000e  0x0000.014ce353  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461804894
   0x08    9    0x00  0x2476  0x0016  0x0000.014ce815  0x00c00aa9  0x0000.000.00000000  0x00000001   0x00000000  1461805256
   0x09    9    0x00  0x247e  0x0012  0x0000.014ce74b  0x00c00aa9  0x0000.000.00000000  0x00000001   0x00000000  1461805247
   0x0a    9    0x00  0x2477  0x001d  0x0000.014ce10d  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461804355
   0x0b    9    0x00  0x247a  0x0007  0x0000.014ce326  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461804835
   0x0c    9    0x00  0x2471  0x000f  0x0000.014ce4d9  0x00c00aa9  0x0000.000.00000000  0x00000001   0x00000000  1461805245
   0x0d    9    0x00  0x2473  0x001c  0x0000.014ce284  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461804715
   0x0e    9    0x00  0x2478  0x0011  0x0000.014ce358  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461804894
   0x0f    9    0x00  0x2470  0x0006  0x0000.014ce4da  0x00c00aaa  0x0000.000.00000000  0x00000003   0x00000000  1461805245
   0x10    9    0x00  0x2477  0x0001  0x0000.014ce7e8  0x00c00aa9  0x0000.000.00000000  0x00000001   0x00000000  1461805256
   0x11    9    0x00  0x2472  0x0005  0x0000.014ce38a  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461804954
   0x12    9    0x00  0x2478  0x0010  0x0000.014ce7d8  0x00c00aa9  0x0000.000.00000000  0x00000001   0x00000000  1461805256
   0x13    9    0x00  0x2473  0x0003  0x0000.014ce2c0  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461804775
   0x14    9    0x00  0x247a  0x0004  0x0000.014ce1a2  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461804474
   0x15    9    0x00  0x2476  0x000a  0x0000.014ce106  0x00000000  0x0000.000.00000000  0x00000000   0x00000000  1461804355
   0x16    9    0x00  0x246d  0x001f  0x0000.014ce867  0x00000000  0x0000.000.00000000  0x00000000   0x00000000  1461805315
   0x17    9    0x00  0x2473  0x0019  0x0000.014ce3f4  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461805040
   0x18    9    0x00  0x247a  0x0009  0x0000.014ce5a4  0x00c00aa9  0x0000.000.00000000  0x00000001   0x00000000  1461805245
   0x19    9    0x00  0x2475  0x0002  0x0000.014ce441  0x00c00aa6  0x0000.000.00000000  0x00000002   0x00000000  1461805135
   0x1a    9    0x00  0x2478  0x000d  0x0000.014ce254  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461804655
   0x1b   10    0x80  0x247b  0x0002  0x0000.014ce8fc  0x00000000  0x0000.000.00000000  0x00000000   0x00000000  0
   0x1c    9    0x00  0x2477  0x0013  0x0000.014ce2b7  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461804775
   0x1d    9    0x00  0x2474  0x0014  0x0000.014ce155  0x00c00aa5  0x0000.000.00000000  0x00000001   0x00000000  1461804415
   0x1e    9    0x00  0x246d  0x0021  0x0000.014ce079  0x00c00aa3  0x0000.000.00000000  0x00000001   0x00000000  1461804174
   0x1f    9    0x00  0x2477  0xffff  0x0000.014ce8de  0x00c00aa6  0x0000.000.00000000  0x00000001   0x00000000  1461805376
   0x20    9    0x00  0x2478  0x0015  0x0000.014ce0dc  0x00000000  0x0000.000.00000000  0x00000000   0x00000000  1461804295
   0x21    9    0x00  0x2479  0x0020  0x0000.014ce0a7  0x00c00aa3  0x0000.000.00000000  0x00000001   0x00000000  1461804235
  EXT TRN CTL::
  usn: 6
  sp1:0x00000000 sp2:0x00000000 sp3:0x00000000 sp4:0x00000000
  sp5:0x00000000 sp6:0x00000000 sp7:0x00000000 sp8:0x00000000
  EXT TRN TBL::
  index  extflag    extHash    extSpare1   extSpare2 
  ---------------------------------------------------
   0x00  0x00000000 0x00000000 0x00000000  0x00000000
   0x01  0x00000000 0x00000000 0x00000000  0x00000000
   0x02  0x00000000 0x00000000 0x00000000  0x00000000
   0x03  0x00000000 0x00000000 0x00000000  0x00000000
   0x04  0x00000000 0x00000000 0x00000000  0x00000000
   0x05  0x00000000 0x00000000 0x00000000  0x00000000
   0x06  0x00000000 0x00000000 0x00000000  0x00000000
   0x07  0x00000000 0x00000000 0x00000000  0x00000000
   0x08  0x00000000 0x00000000 0x00000000  0x00000000
   0x09  0x00000000 0x00000000 0x00000000  0x00000000
   0x0a  0x00000000 0x00000000 0x00000000  0x00000000
   0x0b  0x00000000 0x00000000 0x00000000  0x00000000
   0x0c  0x00000000 0x00000000 0x00000000  0x00000000
   0x0d  0x00000000 0x00000000 0x00000000  0x00000000
   0x0e  0x00000000 0x00000000 0x00000000  0x00000000
   0x0f  0x00000000 0x00000000 0x00000000  0x00000000
   0x10  0x00000000 0x00000000 0x00000000  0x00000000
   0x11  0x00000000 0x00000000 0x00000000  0x00000000
   0x12  0x00000000 0x00000000 0x00000000  0x00000000
   0x13  0x00000000 0x00000000 0x00000000  0x00000000
   0x14  0x00000000 0x00000000 0x00000000  0x00000000
   0x15  0x00000000 0x00000000 0x00000000  0x00000000
   0x16  0x00000000 0x00000000 0x00000000  0x00000000
   0x17  0x00000000 0x00000000 0x00000000  0x00000000
   0x18  0x00000000 0x00000000 0x00000000  0x00000000
   0x19  0x00000000 0x00000000 0x00000000  0x00000000
   0x1a  0x00000000 0x00000000 0x00000000  0x00000000
   0x1b  0x00000000 0x00000000 0x00000000  0x00000000
   0x1c  0x00000000 0x00000000 0x00000000  0x00000000
   0x1d  0x00000000 0x00000000 0x00000000  0x00000000
   0x1e  0x00000000 0x00000000 0x00000000  0x00000000
   0x1f  0x00000000 0x00000000 0x00000000  0x00000000
   0x20  0x00000000 0x00000000 0x00000000  0x00000000
   0x21  0x00000000 0x00000000 0x00000000  0x00000000

从Undo Segment: _SYSSMU6_3214712007$ (6)可以知道回滚段号是6,找到 state为10的记录

 index  state cflags  wrap#    uel         scn            dba            parent-xid    nub     stmt_num    cmt
 ------------------------------------------------------------------------------------------------
 0x1b   10    0x80  0x247b  0x0002  0x0000.014ce8fc  0x00000000  0x0000.000.00000000  0x00000000   0x00000000  0

其中0x1b=27

SQL> select to_number('1b','xxx') from dual;
 
TO_NUMBER('1B','XXX')
---------------------
27


0x247b=9339
SQL> select to_number('247b','xxxx') from dual;
 
TO_NUMBER('247B','XXXX')
------------------------
                    9339

从上面的信息可以看到与我们使用dbms_transaction PL/SQL包所获得的事务ID信息一致。