自定义show_space过程来显示数据段的利用信息

SHOW_SPACE过程
SHOW_SPACE例程用于打印数据库段空间利用率信息:

sys@DEVELOP> create or replace procedure show_space
  2  ( p_segname in varchar2,
  3    p_owner in varchar2 default user,
  4    p_type in varchar2 default 'TABLE',
  5    p_partition in varchar2 default NULL )
  6  -- this procedure uses authid current user so it can query DBA_*
  7  -- views using privileges from a ROLE, and so it can be installed
  8  -- once per database, instead of once per user who wanted to use it
  9    authid current_user
 10  as
 11    l_free_blks number;
 12    l_total_blocks number;
 13    l_total_bytes number;
 14    l_unused_blocks number;
 15    l_unused_bytes number;
 16    l_LastUsedExtFileId number;
 17    l_LastUsedExtBlockId number;
 18    l_LAST_USED_BLOCK number;
 19    l_segment_space_mgmt varchar2(255);
 20    l_unformatted_blocks number;
 21    l_unformatted_bytes number;
 22    l_fs1_blocks number; l_fs1_bytes number;
 23    l_fs2_blocks number; l_fs2_bytes number;
 24    l_fs3_blocks number; l_fs3_bytes number;
 25    l_fs4_blocks number; l_fs4_bytes number;
 26    l_full_blocks number; l_full_bytes number;
 27  -- inline procedure to print out numbers nicely formatted
 28  -- with a simple label
 29  procedure p( p_label in varchar2, p_num in number )
 30  is
 31  begin
 32    dbms_output.put_line( rpad(p_label,40,'.') ||
 33    to_char(p_num,'999,999,999,999') );
 34  end;
 35  begin
 36  -- this query is executed dynamically in order to allow this procedure
 37  -- to be created by a user who has access to DBA_SEGMENTS/TABLESPACES
 38  -- via a role as is customary.
 39  -- NOTE: at runtime, the invoker MUST have access to these two
-- views!
 40   41  -- this query determines if the object is an ASSM object or not
 42    begin
 43      execute immediate
 44      'select ts.segment_space_management
 45      from dba_segments seg, dba_tablespaces ts
 46      where seg.segment_name = :p_segname
    and (:p_partition is null or
 47   48      seg.partition_name = :p_partition)
 49      and seg.owner = :p_owner
 50      and seg.tablespace_name = ts.tablespace_name'
 51      into l_segment_space_mgmt
 52      using p_segname, p_partition, p_partition, p_owner;
 53    exception
 54    when too_many_rows then
 55      dbms_output.put_line
 56        ( 'This must be a partitioned table, use p_partition => ');
 57      return;
 58    end;
 59  -- if the object is in an ASSM tablespace, we must use this API
 60  -- call to get space information, otherwise we use the FREE_BLOCKS
 61  -- API for the user-managed segments
 62    if l_segment_space_mgmt = 'AUTO'   then
 63       dbms_space.space_usage
 64       ( p_owner, p_segname, p_type, l_unformatted_blocks,
 65       l_unformatted_bytes, l_fs1_blocks, l_fs1_bytes,
 66       l_fs2_blocks, l_fs2_bytes, l_fs3_blocks, l_fs3_bytes,
 67       l_fs4_blocks, l_fs4_bytes, l_full_blocks, l_full_bytes, p_partition);
 68       p( 'Unformatted Blocks ', l_unformatted_blocks );
 69       p( 'FS1 Blocks (0-25) ', l_fs1_blocks );
 70       p( 'FS2 Blocks (25-50) ', l_fs2_blocks );
 71       p( 'FS3 Blocks (50-75) ', l_fs3_blocks );
 72       p( 'FS4 Blocks (75-100)', l_fs4_blocks );
 73       p( 'Full Blocks ', l_full_blocks );
 74    else
 75       dbms_space.free_blocks(
 76       segment_owner => p_owner,
 77       segment_name => p_segname,
 78       segment_type => p_type,
 79       freelist_group_id => 0,
 80       free_blks => l_free_blks);
 81       p( 'Free Blocks', l_free_blks );
 82    end if;
 83  -- and then the unused space API call to get the rest of the
 84  -- information
 85    dbms_space.unused_space
 86     ( segment_owner => p_owner,
 87       segment_name => p_segname,
 88       segment_type => p_type,
 89       partition_name => p_partition,
 90       total_blocks => l_total_blocks,
 91       total_bytes => l_total_bytes,
 92       unused_blocks => l_unused_blocks,
 93       unused_bytes => l_unused_bytes,
 94       LAST_USED_EXTENT_FILE_ID => l_LastUsedExtFileId,
 95       LAST_USED_EXTENT_BLOCK_ID => l_LastUsedExtBlockId,
 96       LAST_USED_BLOCK => l_LAST_USED_BLOCK );
 97       p( 'Total Blocks', l_total_blocks );
 98       p( 'Total Bytes', l_total_bytes );
 99       p( 'Total MBytes', trunc(l_total_bytes/1024/1024) );
100       p( 'Unused Blocks', l_unused_blocks );
101       p( 'Unused Bytes', l_unused_bytes );
102       p( 'Last Used Ext FileId', l_LastUsedExtFileId );
103       p( 'Last Used Ext BlockId', l_LastUsedExtBlockId );
104       p( 'Last Used Block', l_LAST_USED_BLOCK );
105  end;
106  /

Procedure created.

show_space过程包含以下参数:

sys@DEVELOP> desc show_space
PROCEDURE show_space
 Argument Name                  Type                    In/Out Default?
 ------------------------------ ----------------------- ------ --------
 P_SEGNAME                      VARCHAR2                IN
 P_OWNER                        VARCHAR2                IN     DEFAULT
 P_TYPE                         VARCHAR2                IN     DEFAULT
 P_PARTITION                    VARCHAR2                IN     DEFAULT

参数如下:
• P_SEGNAME:段名(例如,表或索引名)。
• P_OWNER:默认为当前用户,不过也可以使用这个例程查看另外某个用户。
• P_TYPE:默认为TABLE,这个参数表示查看哪种类型的对象(段)。例如,SELECT DISTINCT SEGMENT_TYPE FROM DBA_SEGMENTS
会列出合法的段类型。
• P_PARTITION:显示分区对象的空间时所用的分区名。SHOW_SPACE一次只显示一个分区的空间利用率。

这个过程的输出如下,这里段位于一个自动段空间管理(Automatic Segment Space Management, ASSM)表空间中:

sys@DEVELOP> exec show_space('AC01','HNSIC');
Unformatted Blocks .....................               0
FS1 Blocks (0-25) ......................               1
FS2 Blocks (25-50) .....................               0
FS3 Blocks (50-75) .....................               0
FS4 Blocks (75-100).....................              12
Full Blocks ............................          16,305
Total Blocks............................         146,304
Total Bytes.............................   1,198,522,368
Total MBytes............................           1,143
Unused Blocks...........................         129,920
Unused Bytes............................   1,064,304,640
Last Used Ext FileId....................              10
Last Used Ext BlockId...................         348,800
Last Used Block.........................           8,192

PL/SQL procedure successfully completed.

报告的各项结果说明如下:
• Unformatted Blocks:为表分配的位于高水位线(high-water mark, HWM)之下但未用的块数。把未格式化和未用的块加在一起,就是已为表分配但从未用于保存ASSM对象数据的总块数。
• FS1 Blocks-FS4 Blocks:包含数据的格式化块。项名后的数字区间表示各块的“空闲度”。例如,(0-25)是指空闲度为
0~25%的块数。
• Full Blocks:已满的块数,不能再对这些执行插入。
• Total Blocks、Total bytes、Total Mbytes:为所查看的段分配的总空间量,单位分别是数据库块、字节和兆字节。
• Unused Blocks、Unused Bytes:表示未用空间所占的比例(未用空间量)。这些块已经分配给所查看的段,但目前在段的HWM之上。
• Last Used Ext FileId:最后使用的文件的文件ID,该文件包含最后一个含数据的区段(extent)。
• Last Used Ext BlockId:最后一个区段开始处的块ID;这是最后使用的文件中的块ID。
• Last Used Block:最后一个区段中最后一个块的偏移量。

如果对象在用户空间管理的表空间中,使用SHOW_SPACE查看时,输出如下:

sys@DEVELOP> exec show_space('T1');
Free Blocks.............................               3
Total Blocks............................          17,408
Total Bytes.............................     142,606,336
Total MBytes............................             136
Unused Blocks...........................             869
Unused Bytes............................       7,118,848
Last Used Ext FileId....................               1
Last Used Ext BlockId...................       1,696,896
Last Used Block.........................             155

PL/SQL procedure successfully completed.

这里惟一的区别是报告中最前面的Free Blocks项。这是段的第一个freelist(自由列表)组中的块数。
脚本只测试了第一个freelist组。如果想测试多个freelist组,还需要修改这个脚本。

自定义统计结果脚本mystat

mystat.sql和相应的mystat2.sql用于展示完成某操作之前和之后的某些Oracle“统计结果”的变化情况。mystat.sql只是获得统计结果的开始值:
mystat.sql脚本内容如下:

set echo off
set verify off
column value new_val V
define S="&1"
set autotrace off
select a.name, b.value
from v$statname a, v$mystat b
where a.statistic# = b.statistic#
and lower(a.name) like '%' || lower('&S')||'%'
/
set echo on

mystat2.sql用于报告统计结果的变化情况(差值):

set echo off
set verify off
select a.name, b.value V, to_char(b.value-&V,'999,999,999,999') diff
from v$statname a, v$mystat b
where a.statistic# = b.statistic#
and lower(a.name) like '%' || lower('&S')||'%'
/
set echo on

例如,要查看某个UPDATE生成的redo数,可以使用以下命令:

sys@DEVELOP> @/oracle/product/11.2/sqlplus/mystat.sql "redo size"

NAME                                                                  VALUE
---------------------------------------------------------------- ----------
redo size                                                         756293676
redo size for lost write detection                                        0
redo size for direct writes                                               0

sys@DEVELOP> update t1 set aac009='1';

795680 rows updated.

sys@DEVELOP> @/oracle/product/11.2/sqlplus/mystat2.sql

NAME                                                                      V DIFF
---------------------------------------------------------------- ---------- ----------------
redo size                                                        1139306496    1,139,306,496
redo size for lost write detection                                        0                0
redo size for direct writes                                               0                0

由此可见,795,680行记录的UPDATE会生成1,139,306,496字节的redo.

自定义性能统计存储过程包runstats

runstats是一个工具,能对做同一件事的两个不同方法进行比较,得出孰优孰劣的结果。只需提供两个不同的方法, 余下的事情都由runstats负责。runstats只是测量3个要素:
? 耗用时间(elapsed time):知道耗用时间很有用,不过这不是最重要的信息。
? 系统统计结果:会并排显示每个方法做某件事(如执行一个解析调用)的次数,并展示二者之差。
? 闩锁(latching):这是这个报告的关键输出。
闩锁(latch)是一种轻量级的锁。锁(lock)是一种串行化设备,而串行化设备不支持并发。如果应用不支 持并发,可扩缩性就比较差,只能支持较少的用户,而且需要更多的资源。构建应用时,我们往往希望应用能很好地扩缩,也就是说,为1位用户服务与为1,000或10,000位用户服务应该是一样的。应用中使用的闩锁越少,性能就越好。如果一种方法从耗用时间来看运行时间较长,但是只使用了另一种方法10%的闩锁,我可能会选择前者。因为与使用更多闩锁的方法相比,使用较少闩锁的方法能更好地扩缩。
runstats最后独立使用,也就是说,最好在一个单用户数据库上运行。它会测量各个方法的统计结果和闩锁(锁定)活动。 runstats在运行过程中,不希望其他任务对系统的负载或闩锁产生影响。只需一个小的测试数据库就能很好地完成这些测试。要使用runstats,需要能访问几个V$视图,并创建一个表来存储统计结果,还要创建runstats包。为此,需要访问3个V$表:V$STATNAME、V$MYSTAT和V$LATCH。以下是我使用的视图:

create or replace view stats
as select 'STAT...' || a.name name, b.value
from v$statname a, v$mystat b
where a.statistic# = b.statistic#
union all
select 'LATCH.' || name, gets
from v$latch;

如果你能得到V$STATNAME、V$MYSTAT、V$LATCH和V$TIMER的直接授权,就能直接对这些表执行SELECT操作(相应地可以自行创建 视图);否则,可以由其他人对这些表执行SELECT操作为你创建视图,并授予你在这个视图上执行SELECT的权限。
一旦建立视图,接下来只需要一个小表来收集统计结果:

sys@DEVELOP> create global temporary table run_stats
  2  ( runid varchar2(15),
  3  name varchar2(80),
  4  value int )
  5  on commit preserve rows;

Table created.

最后,需要创建runstats包。其中包含3个简单的API调用:
runstats测试开始时调用RS_STAT(runstats开始)。
正如你想象的,RS_MIDDLE会在测试之间调用。
完成时调用RS_STOP,打印报告。
创建runstats包的规范如下:

sys@DEVELOP> create or replace package runstats_pkg
  2  as
  3  procedure rs_start;
  4  procedure rs_middle;
  5  procedure rs_stop(p_difference_threshold in number default 0);
  6  end;
  7  /

Package created.

参数P_DIFFERENCE_THRESHOLD用于控制最后打印的数据量。runstats会收集并得到每次运行的统计结果和闩信息,然后打印一个 报告,说明每次测试(每个方法)使用了多少资源,以及不同测试(不同方法)的结果之差。可以使用这个输入参数来控制只查 看差值大于这个数的统计结果和闩信息。由于这个参数默认为0,所以默认情况下可以看到所有输出。
下面我们逐一分析包体中的过程。包前面是一些全局变量,这些全局变量用于记录每次运行的耗用时间:
RS_START过程。这个过程只是清空保存统计结果的表,并填入“上一次”(before)得到的统计结果和闩信息。然后获得 当前定时器值,这是一种时钟,可用于计算耗用时间(单位百分之一秒):

接下来是RS_MIDDLE过程。这个过程只是把第一次测试运行的耗用时间记录在G_RUN1中。然后插入当前的一组统计结果和闩信息。 如果把这些值与先前在RS_START中保存的值相减,就会发现第一个方法使用了多少闩,以及使用了多少游标(一种统计结果), 等等。
最后,记录下一次运行的开始时间:

完整的包体创建语句如下:

sys@DEVELOP> create or replace package body runstats_pkg
  2   as
  3
  4   g_start number;
  5   g_run1 number;
  6   g_run2 number;
  7
  8   procedure rs_start
  9   is
 10   begin
 11     delete from run_stats;
 12
 13     insert into run_stats
 14     select 'before', stats.* from stats;
 15
 16     g_start := dbms_utility.get_time;
 17   end;
 18
 19   procedure rs_middle
 20   is
 21   begin
 22     g_run1 := (dbms_utility.get_time-g_start);
 23
 24     insert into run_stats
 25     select 'after 1', stats.* from stats;
 26     g_start := dbms_utility.get_time;
 27
 28   end;
 29
 30   procedure rs_stop(p_difference_threshold in number default 0)
 31   is
 32   begin
 33     g_run2 := (dbms_utility.get_time-g_start);
 34
 35     dbms_output.put_line
 36       ( 'Run1 ran in ' || g_run1 || ' hsecs' );
 37     dbms_output.put_line
 38       ( 'Run2 ran in ' || g_run2 || ' hsecs' );
 39     dbms_output.put_line
 40       ( 'run 1 ran in ' || round(g_run1/g_run2*100,2) ||
 41       '% of the time' );
 42     dbms_output.put_line( chr(9) );
 43
 44     insert into run_stats
 45     select 'after 2', stats.* from stats;
 46
 47     dbms_output.put_line
 48       ( rpad( 'Name', 30 ) || lpad( 'Run1', 10 ) ||
 49       lpad( 'Run2', 10 ) || lpad( 'Diff', 10 ) );
 50
 51     for x in
 52       ( select rpad( a.name, 30 ) ||
 53         to_char( b.value-a.value, '9,999,999' ) ||
 54         to_char( c.value-b.value, '9,999,999' ) ||
 55         to_char( ( (c.value-b.value)-(b.value-a.value)), '9,999,999' ) data
 56         from run_stats a, run_stats b, run_stats c
 57         where a.name = b.name
 58         and b.name = c.name
 59         and a.runid = 'before'
 60         and b.runid = 'after 1'
 61         and c.runid = 'after 2'
 62         and (c.value-a.value) > 0
 63         and abs( (c.value-b.value) - (b.value-a.value) )
 64         > p_difference_threshold
 65         order by abs( (c.value-b.value)-(b.value-a.value))
 66       ) loop
 67       dbms_output.put_line( x.data );
 68     end loop;
 69
 70     dbms_output.put_line( chr(9) );
 71     dbms_output.put_line
 72       ( 'Run1 latches total versus runs -- difference and pct' );
 73     dbms_output.put_line
 74       ( lpad( 'Run1', 10 ) || lpad( 'Run2', 10 ) ||
 75         lpad( 'Diff', 10 ) || lpad( 'Pct', 8 ) );
 76
 77     for x in
 78       ( select to_char( run1, '9,999,999' ) ||
 79       to_char( run2, '9,999,999' ) ||
 80       to_char( diff, '9,999,999' ) ||
 81       to_char( round( run1/run2*100,2 ), '999.99' ) || '%' data
 82       from ( select sum(b.value-a.value) run1, sum(c.value-b.value) run2,
 83       sum( (c.value-b.value)-(b.value-a.value)) diff
 84       from run_stats a, run_stats b, run_stats c
 85       where a.name = b.name
 86       and b.name = c.name
 87       and a.runid = 'before'
 88       and b.runid = 'after 1'
 89       and c.runid = 'after 2'
 90       and a.name like 'LATCH%'
 91          )
 92       ) loop
 93       dbms_output.put_line( x.data );
 94     end loop;
 95   end;
 96
 97  end;
 98   /

Package body created.

下面可以使用runstats了。我们将通过例子来说明如何使用runstats对批量插入(INSERT)和逐行处理进行比较,
看看哪种方法效率更高。首先建立两个表,要在其中插入795,680行记录:

sys@DEVELOP> create table t1 as select * from hnsic.ac01 where 1=0;

Table created.

sys@DEVELOP> create table t2 as select * from hnsic.ac01 where 1=0;

Table created.

接下来使用第一种方法插入记录,也就是使用单独一条SQL语句完成批量插入。首先调用RUNSTATS_PKG.RS_START:

sys@DEVELOP> exec runstats_pkg.rs_start;

PL/SQL procedure successfully completed.

sys@DEVELOP> insert into t1 select * from hnsic.ac01;

795680 rows created.

sys@DEVELOP> commit;

Commit complete.

下面准备执行第二种方法,即逐行地插入数据:

sys@DEVELOP> exec runstats_pkg.rs_middle;

PL/SQL procedure successfully completed.

sys@DEVELOP> begin
  2   for x in (select * from hnsic.ac01)
  3   loop
  4     insert into t2 values x;
  5   end loop;
  6   commit;
  7  end;
  8  /

PL/SQL procedure successfully completed.

最后生成报告:

sys@DEVELOP> exec runstats_pkg.rs_stop;
Run1 ran in 4835 hsecs
Run2 ran in 14497 hsecs
run 1 ran in 33.35% of the time

Name                                                                                            Run1              

  Run2
Diff
LATCH.space background state object latch                                                1         0        -1
LATCH.file cache latch                                                                  93        94         1
LATCH.ktm global data                                                                    5         4        -1
LATCH.KTF sga latch                                                                      1         0        -1
LATCH.dml lock allocation                                                                1         2         1
LATCH.tablespace key chain                                                               1         2         1
LATCH.deferred cleanup latch                                                             1         2         1
LATCH.kcbtsemkid latch                                                                   2         1        -1
LATCH.threshold alerts latch                                                             1         2         1
LATCH.cp sga latch                                                                       1         2         1
LATCH.hash table modification latch                                                      1         2         1
STAT...parse count (hard)                                                                1         2         1
STAT...parse count (total)                                                               5         4        -1
STAT...sql area evicted                                                                  1         0        -1
LATCH.ASM network state latch                                                            1         2         1
STAT...write clones created in foreground                                                3         2        -1
STAT...shared hash latch upgrades - no wait                                             93        94         1
LATCH.ncodef allocation latch                                                            1         2         1
STAT...deferred (CURRENT) block cleanout applications                                    1         2         1
STAT...commit txn count during cleanout                                                  0         1         1
STAT...IMU Flushes                                                                       0         1         1
STAT...table fetch by rowid                                                             94        95         1
STAT...index scans kdiixs1                                                              94        95         1
STAT...Requests to/from client                                                           6         4        -2
STAT...session cursor cache count                                                        5         3        -2
STAT...redo log space wait time                                                          2         0        -2
STAT...redo log space requests                                                           4         2        -2
LATCH.ksv class latch                                                                    3         5         2
STAT...non-idle wait time                                                                2         0        -2
STAT...calls to get snapshot scn: kcmgss                                               184       186         2
STAT...SQL*Net roundtrips to/from client                                                 6         4        -2
LATCH.MinActiveScn Latch                                                                 0         2         2
STAT...db block gets from cache (fastpath)                                             103       105         2
LATCH.ksv allocation latch                                                               4         6         2
STAT...redo entries                                                                849,543   849,545         2
LATCH.message pool operations parent latch                                               4         1        -3
STAT...parse time cpu                                                                    1         4         3
STAT...user calls                                                                        9         6        -3
LATCH.kwqbsn:qsga                                                                        2         5         3
LATCH.Shared B-Tree                                                                      3         6         3
LATCH.interrupt manipulation                                                             1         5         4
LATCH.SQL memory manager latch                                                           1         5         4
LATCH.kokc descriptor allocation latch                                                   2         6         4
STAT...redo buffer allocation retries                                                    5         1        -4
LATCH.multiblock read objects                                                            6         2        -4
LATCH.object stats modification                                                          8        13         5
STAT...enqueue releases                                                              3,711     3,716         5
STAT...enqueue requests                                                              3,710     3,716         6
STAT...redo subscn max counts                                                       23,411    23,405        -6
LATCH.corrupted undo seg latch                                                          18        12        -6
STAT...heap block compress                                                               7         0        -7
STAT...free buffer requested                                                        23,406    23,414         8
LATCH.ksuosstats global area                                                             5        14         9
STAT...calls to kcmgas                                                              10,299    10,289       -10
STAT...redo ordering marks                                                          10,201    10,191       -10
STAT...calls to kcmgcs                                                              33,174    33,187        13
LATCH.loader state object freelist                                                      14        28        14
LATCH.qmn task queue latch                                                              15        30        15
LATCH.job_queue_processes parameter latch                                               11        31        20
LATCH.parallel query alloc buffer                                                        7        31        24
STAT...consistent changes                                                               31        56        25
STAT...db block gets from cache                                                    870,280   870,307        27
STAT...db block gets                                                               870,280   870,307        27
STAT...db block changes                                                          1,672,435 1,672,465        30
STAT...active txn count during cleanout                                             16,027    15,995       -32
STAT...cleanout - number of ktugct calls                                            16,027    15,995       -32
STAT...consistent gets - examination                                                16,032    16,000       -32
LATCH.session timer                                                                     16        48        32
LATCH.Change Notification Hash table latch                                              16        48        32
LATCH.KMG MMAN ready and startup request latch                                          16        49        33
STAT...workarea memory allocated                                                        40        -5       -45
STAT...messages sent                                                                   370       322       -48
LATCH.sort extent pool                                                                   2        61        59
STAT...undo change vector size                                                  ####################        60
LATCH.ASM db client latch                                                               36        99        63
LATCH.simulator lru latch                                                            6,903     6,977        74
LATCH.parameter list                                                                    36       125        89
LATCH.FOB s.o list latch                                                                 6        97        91
LATCH.active checkpoint queue latch                                                    143       237        94
LATCH.global tx hash mapping                                                            19       129       110
LATCH.transaction branch allocation                                                     32       162       130
LATCH.space background task latch                                                       89       270       181
LATCH.post/wait queue                                                                   68       251       183
LATCH.SGA IO buffer pool latch                                                         193       442       249
STAT...change write time                                                             1,393     1,648       255
LATCH.Real-time plan statistics latch                                                  383       763       380
LATCH.shared pool simulator                                                            106       508       402
STAT...bytes sent via SQL*Net to client                                              1,438       948      -490
LATCH.JS queue state obj latch                                                         360     1,044       684
STAT...bytes received via SQL*Net from client                                        2,313     1,623      -690
LATCH.lgwr LWN SCN                                                                     401     1,402     1,001
LATCH.Consistent RBA                                                                   399     1,401     1,002
LATCH.session switching                                                                  7     1,009     1,002
LATCH.resmgr:actses change group                                                         9     1,018     1,009
LATCH.resmgr group change latch                                                          7     1,016     1,009
LATCH.compile environment latch                                                          8     1,017     1,009
LATCH.global KZLD latch for mem in SGA                                                   7     1,016     1,009
LATCH.mostly latch-free SCN                                                            408     1,427     1,019
LATCH.PL/SQL warning settings                                                           53     1,086     1,033
LATCH.In memory undo latch                                                             298     1,793     1,495
LATCH.channel handle pool latch                                                         15     2,024     2,009
LATCH.dummy allocation                                                                  14     2,024     2,010
LATCH.ksz_so allocation latch                                                           13     2,023     2,010
LATCH.OS process: request allocation                                                    13     2,023     2,010
LATCH.resmgr:active threads                                                             13     2,023     2,010
LATCH.resmgr:free threads list                                                          13     2,023     2,010
LATCH.process allocation                                                                14     2,024     2,010
LATCH.process group creation                                                            13     2,023     2,010
LATCH.list of block allocation                                                       1,665     3,678     2,013
LATCH.Event Group Locks                                                                 17     2,035     2,018
LATCH.session state list latch                                                          13     2,042     2,029
LATCH.transaction allocation                                                            24     2,079     2,055
STAT...IMU undo allocation size                                                      3,256     1,080    -2,176
LATCH.DML lock allocation                                                               73     2,251     2,178
LATCH.parameter table management                                                        69     2,249     2,180
LATCH.OS process allocation                                                            113     2,315     2,202
LATCH.redo allocation                                                                2,664     5,249     2,585
LATCH.sequence cache                                                                    21     3,048     3,027
LATCH.undo global data                                                              23,400    26,617     3,217
LATCH.active service list                                                              146     3,396     3,250
LATCH.cache buffer handles                                                              42     3,356     3,314
LATCH.redo writing                                                                   1,389     4,733     3,344
LATCH.channel operations parent latch                                                  273     3,729     3,456
STAT...CPU used when call started                                                    2,405     6,330     3,925
STAT...CPU used by this session                                                      2,403     6,330     3,927
STAT...DB time                                                                       2,416     6,351     3,935
LATCH.OS process                                                                        29     4,041     4,012
LATCH.call allocation                                                                   26     4,252     4,226
LATCH.session allocation                                                               200     4,567     4,367
STAT...free buffer inspected                                                         9,080    13,902     4,822
LATCH.messages                                                                       1,938     7,030     5,092
STAT...hot buffers moved to head of LRU                                              3,719     9,033     5,314
STAT...recursive cpu usage                                                               6     5,494     5,488
LATCH.client/application info                                                           52     7,115     7,063
STAT...consistent gets from cache                                                   49,254    57,049     7,795
STAT...consistent gets                                                              49,254    57,049     7,795
STAT...table scan blocks gotten                                                     16,318    24,129     7,811
STAT...no work - consistent read gets                                               16,507    24,320     7,813
STAT...buffer is not pinned count                                                   16,695    24,510     7,815
STAT...session logical reads                                                       919,534   927,356     7,822
STAT...consistent gets from cache (fastpath)                                        33,128    40,954     7,826
LATCH.enqueue hash chains                                                            8,891    17,620     8,729
LATCH.object queue header heap                                                      12,561    21,765     9,204
STAT...session cursor cache hits                                                        97     9,347     9,250
STAT...IMU Redo allocation size                                                        476    11,228    10,752
STAT...redo size                                                                ####################    17,552
LATCH.session idle bit                                                               5,575    23,796    18,221
LATCH.cache buffers lru chain                                                       18,487    42,303    23,816
LATCH.checkpoint queue latch                                                        17,631    49,092    31,461
LATCH.object queue header operation                                                122,486   188,006    65,520
STAT...session uga memory max                                                      123,488    31,848   -91,640
LATCH.simulator hash latch                                                         237,377   443,767   206,390
LATCH.SQL memory manager workarea list latch                                         1,219   237,704   236,485
STAT...session pga memory max                                                            0   262,144   262,144
STAT...execute count                                                                   101   795,782   795,681
STAT...opened cursors cumulative                                                       102   795,789   795,687
STAT...recursive calls                                                                 848   804,498   803,650
LATCH.shared pool                                                                    7,037   884,303   877,266
LATCH.row cache objects                                                             25,994 1,205,408 1,179,414
LATCH.cache buffers chains                                                      #################### 7,690,411
STAT...logical read bytes from cache                                            ##############################

Run1 latches total versus runs -- difference and pct
Run1      Run2      Diff     Pct
##############################  53.64%

PL/SQL procedure successfully completed.

本文参考Expert.Oracle.Database.Architecture.9i.and.10g.Programming.Techniques.and.Solutions

在删除用户时报ORA-00600: 内部错误代码, 参数: [13011], [420], [4293646], [57], [4293653], [0], [], [], [], [], [], []

在删除用户时报ORA-00600: 内部错误代码, 参数: [13011], [420], [4293646], [57], [4293653], [0], [], [], [], [], [], []

Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0
Connected as system

SQL> drop user gzyb cascade;

ORA-00600: 内部错误代码, 参数: [13011], [420], [4293646], [57], [4293653], [0], [], [], [], [], [], []

检查跟踪文件/orac/diag/rdbms/dbservice/dbservice/incident/incdir_47163/dbservice_ora_13533_i47163.trc

Dump file /orac/diag/rdbms/dbservice/dbservice/incident/incdir_47163/dbservice_ora_13533_i47163.trc
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
ORACLE_HOME = /orac/orahome/11.2.0/db_1
System name:    Linux
Node name:      gzybtest
Release:        2.6.32-279.el6.x86_64
Version:        #1 SMP Wed Jun 13 18:24:36 EDT 2012
Machine:        x86_64
Instance name: dbservice
Redo thread mounted by this instance: 1
Oracle process number: 26
Unix process pid: 13533, image: oracle@gzybtest


*** 2013-08-10 13:15:13.697
*** SESSION ID:(68.2534) 2013-08-10 13:15:13.697
*** CLIENT ID:() 2013-08-10 13:15:13.697
*** SERVICE NAME:(dbservice) 2013-08-10 13:15:13.697
*** MODULE NAME:(PL/SQL Developer) 2013-08-10 13:15:13.697
*** ACTION NAME:(Main session) 2013-08-10 13:15:13.697

Dump continued from file: /orac/diag/rdbms/dbservice/dbservice/trace/dbservice_ora_13533.trc
ORA-00600: 内部错误代码, 参数: [13011], [420], [4293646], [57], [4293653], [0], [], [], [], [], [], []

========= Dump for incident 47163 (ORA 600 [13011]) ========

*** 2013-08-10 13:15:13.697
dbkedDefDump(): Starting incident default dumps (flags=0x2, level=3, mask=0x0)
----- Current SQL Statement for this session (sql_id=2mp99nzd9u1qp) -----
delete from histgrm$ where obj# = :1

----- Call Stack Trace -----
calling              call     entry                argument values in hex
location             type     point                (? means dubious value)
-------------------- -------- -------------------- ----------------------------
skdstdst()+36        call     kgdsdst()            000000000 ? 000000000 ?
                                                   7FFFEC2A8D08 ? 000000001 ?
                                                   7FFFEC2AD208 ? 000000000 ?

发现是在执行delete from histgrm$ where obj# = :1语句时报错

对于13013错误而言,随后的6个参数含义如下:
Arg [a] Passcount
Arg [b] Data Object number
Arg [c] Tablespace Relative DBA of block containing the row to be updated
Arg [d] Row Slot number
Arg [e] Relative DBA of block being updated (should be same as [c])

查询object_id=420是什么对象发现是C_OBJ#_INTCOL#

SQL> Select object_name,object_type,owner from dba_objects where data_object_id=420;

OBJECT_NAME                                                                      OBJECT_TYPE         OWNER
-------------------------------------------------------------------------------- ------------------- ----------- -------------------
HISTGRM$                                                                         TABLE               SYS
C_OBJ#_INTCOL#                                                                   CLUSTER             SYS

看样子只有HISTGRM$存储在这个CLUSTER中。按理说这个对象是可以TRUNCATE的

SQL> truncate cluster c_obj#_intcol#;
truncate cluster c_obj#_intcol#
                 *
第 1 行出现错误:
ORA-00701: 无法变更热启动数据库所需的对象

由于是BOOTSTRAP$对象,所以无法TRUNCATE.由于这个对象是420>59,因此不是核心BOOTSTRAP$对象,所以我们用得上EVENT 38003 了。

SQL> alter system set EVENT="38003 trace name context forever, level 10"
  2  SCOPE=SPFILE;

系统已更改。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。
Total System Global Area  448790528 bytes
Fixed Size                  1297220 bytes
Variable Size             163579068 bytes
Database Buffers          276824064 bytes
Redo Buffers                7090176 bytes
数据库装载完毕。
数据库已经打开。
SQL> truncate cluster c_obj#_intcol#;
簇已截断

SQL> drop user gzyb cascade;

User dropped

隐含参数_DISABLE_LOGGING导致数据库的损坏在重启数据库时报ORA-19821

由于修改了隐含参数_DISABLE_LOGGING为TRUE:_disable_logging = TRUE 那么启动数据库后进行任何的操作,在关闭数据库后,就会发现数据库出现了损坏:

SQL> startup
ORACLE instance started.

Total System Global Area 1.3495E+10 bytes
Fixed Size                  2218032 bytes
Variable Size            5838473168 bytes
Database Buffers         7583301632 bytes
Redo Buffers               71471104 bytes
Database mounted.
ORA-19821: an intentionally corrupt log file was found

由于是将_disable_logging”=true造成的这个问题那么现在将_disable_logging”设置为false

SQL> alter system set "_disable_logging"=false scope=spfile;

System altered.

SQL> shutdown immediate
ORA-01109: database not open

Database dismounted.
ORACLE instance shut down.
SQL> startup
ORACLE instance started.

Total System Global Area 1.3495E+10 bytes
Fixed Size                  2218032 bytes
Variable Size            5838473168 bytes
Database Buffers         7583301632 bytes
Redo Buffers               71471104 bytes
Database mounted.
ORA-19821: an intentionally corrupt log file was found

还是报ORA-19821

由于错误提示是说日志文件有问题那么设置_allow_resetlogs_corruption来尝试恢复执行下面的sql语句来创建pfile参数文件
SQL>create pfile from spfile;

编辑/orac/orahome/11.2.0/db_1/dbs/spfiledbservice.ora

[root@gzybtest dbservice]vi /orac/orahome/11.2.0/db_1/dbs/spfiledbservice.ora
System parameters with non-default values:
  processes                = 150
  memory_target            = 12928M
  control_files            = "/oradata/dbservice/control01.ctl"
  control_files            = "/orac/flash_recovery_area/dbservice/control02.ctl"
  db_block_size            = 8192
  compatible               = "11.2.0.0.0"
  _disable_logging         = FALSE
  db_files                 = 500
  db_recovery_file_dest    = "/orac/flash_recovery_area"
  db_recovery_file_dest_size= 3882M
  _allow_resetlogs_corruption= TRUE
  undo_tablespace          = "UNDOTBS1"
  remote_login_passwordfile= "EXCLUSIVE"
  db_domain                = ""
  dispatchers              = "(PROTOCOL=TCP) (SERVICE=dbserviceXDB)"
  audit_file_dest          = "/orac/admin/dbservice/adump"
  audit_trail              = "NONE"
  db_name                  = "dbservic"
  db_unique_name           = "dbservice"
  open_cursors             = 300
  deferred_segment_creation= FALSE
  diagnostic_dest          = "/orac"

然后使用pfile文件来启动实例

SQL>  startup pfile=/orac/orahome/11.2.0/db_1/dbs/initdbservice.ora mount
ORACLE instance started.

Total System Global Area 1.3495E+10 bytes
Fixed Size                  2218032 bytes
Variable Size            5838473168 bytes
Database Buffers         7583301632 bytes
Redo Buffers               71471104 bytes
Database mounted.

SQL> recover database until cancel;

ORA-00279: change 13480665044793 generated at 08/08/2013 16:36:47 needed for
thread 1
ORA-00289: suggestion :
/orac/flash_recovery_area/DBSERVICE/archivelog/2013_08_08/o1_mf_1_1258_%u_.arc
ORA-00280: change 13480665044793 for thread 1 is in sequence #1258

Specify log: {=suggested | filename | AUTO | CANCEL}
ORA-00308: cannot open archived log
'/orac/flash_recovery_area/DBSERVICE/archivelog/2013_08_08/o1_mf_1_1258_%u_.arc'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

ORA-10879: error signaled in parallel recovery slave
ORA-01547: warning: RECOVER succeeded but OPEN RESETLOGS would get error below
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/oradata/dbservice/system01.dbf'

SQL> recover datafile 1;
ORA-00283: recovery session canceled due to errors
ORA-01610: recovery using the BACKUP CONTROLFILE option must be done

SQL> alter database backup controlfile to trace;

SQL> oradebug setmypid;

SQL> oradebug TRACEFILE_NAME
/orac/diag/rdbms/dbservice/dbservice/trace/dbservice_ora_6571.trc

找到跟踪文件中的

CREATE CONTROLFILE REUSE DATABASE "DBSERVIC" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 800
    MAXINSTANCES 8
    MAXLOGHISTORY 2336
LOGFILE
  GROUP 4 '/oradata/dbservice/redo04.log'  SIZE 1000M BLOCKSIZE 512,
  GROUP 5 '/oradata/dbservice/redo05.log'  SIZE 1000M BLOCKSIZE 512,
  GROUP 6 '/oradata/dbservice/redo07.log'  SIZE 1000M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/oradata/dbservice/system01.dbf',
  '/oradata/dbservice/sysaux01.dbf',
  '/oradata/dbservice/undotbs01.dbf',
  '/oradata/dbservice/users01.dbf',
  '/oradata/dbservice/example01.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk01.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk02.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk03.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk04.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk05.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk06.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk07.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk08.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk09.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk10.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk11.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk12.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk13.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk14.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk15.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk16.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk17.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk18.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk19.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk20.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk21.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk22.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk23.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk24.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk25.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk26.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb01.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk01.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh01.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh02.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh03.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh04.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh05.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh06.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh07.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh08.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh09.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh10.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh11.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh12.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg01.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg02.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg03.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg04.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg05.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg06.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg07.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg08.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg09.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg10.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg11.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg12.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb02.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb03.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb04.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb05.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb06.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb07.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb08.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb09.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb10.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb11.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb12.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb13.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb14.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb15.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb16.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb17.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb18.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb19.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb20.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb21.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb22.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb23.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb24.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb25.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb26.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb27.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb28.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb29.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb30.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb31.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb32.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb33.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb34.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb35.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb36.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb37.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb38.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb39.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb40.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb41.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb42.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb43.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb44.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb45.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb46.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb47.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb48.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb49.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb50.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb51.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb52.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb53.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb54.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb55.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb56.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb57.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb58.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb59.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb60.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb61.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb62.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb63.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb64.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb65.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb66.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb67.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb68.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb69.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb70.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb71.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb72.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb73.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb74.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb75.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb76.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb77.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb78.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb79.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb80.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb81.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb82.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb83.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb84.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb85.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb86.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb87.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb88.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb89.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb90.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb91.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb92.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb93.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb94.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb95.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb96.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb97.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb98.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb99.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb100.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb101.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb102.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb103.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk02.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk03.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk04.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk05.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk06.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk07.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk08.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk09.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk10.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk11.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk12.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk13.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk14.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk15.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk16.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk17.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk18.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk19.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk20.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk21.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk22.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk23.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk24.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk25.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk26.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk27.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk28.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk29.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk30.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk31.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk32.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk33.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk34.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk35.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk36.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk37.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk38.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk39.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk40.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk41.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk42.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk43.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk44.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk45.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk46.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk47.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk48.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk49.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk50.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk51.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk52.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk53.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk54.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk55.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk56.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk57.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk58.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk59.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk60.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk61.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk62.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk63.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk64.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk65.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk66.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk67.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk68.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk69.dbf',
  '/oradata/dbservice/gzyb/gzyb01.dbf',
  '/oradata/dbservice/gzyb/gzyb02.dbf',
  '/oradata/dbservice/gzyb/gzyb03.dbf',
  '/oradata/dbservice/gzyb/gzyb04.dbf',
  '/oradata/dbservice/gzyb/gzyb05.dbf',
  '/oradata/dbservice/gzyb/gzyb06.dbf',
  '/oradata/dbservice/gzyb/gzyb07.dbf',
  '/oradata/dbservice/gzyb/gzyb08.dbf',
  '/oradata/dbservice/gzyb/gzyb09.dbf',
  '/oradata/dbservice/gzyb/gzyb10.dbf',
  '/oradata/dbservice/gzyb/gzyb11.dbf',
  '/oradata/dbservice/gzyb/gzyb12.dbf',
  '/oradata/dbservice/gzyb/gzyb13.dbf',
  '/oradata/dbservice/gzyb/gzyb14.dbf',
  '/oradata/dbservice/gzyb/gzyb15.dbf',
  '/oradata/dbservice/gzyb/gzyb16.dbf',
  '/oradata/dbservice/gzyb/gzyb17.dbf',
  '/oradata/dbservice/gzyb/gzyb18.dbf',
  '/oradata/dbservice/gzyb/gzyb19.dbf',
  '/oradata/dbservice/gzyb/gzyb20.dbf',
  '/oradata/dbservice/gzyb/gzyb21.dbf',
  '/oradata/dbservice/gzyb/gzyb22.dbf',
  '/oradata/dbservice/gzyb/gzyb23.dbf',
  '/oradata/dbservice/gzyb/gzyb24.dbf',
  '/oradata/dbservice/gzyb/gzyb25.dbf',
  '/oradata/dbservice/gzyb/gzyb26.dbf',
  '/oradata/dbservice/gzyb/gzyb27.dbf',
  '/oradata/dbservice/gzyb/gzyb28.dbf',
  '/oradata/dbservice/gzyb/gzyb29.dbf',
  '/oradata/dbservice/gzyb/gzyb30.dbf',
  '/oradata/dbservice/gzyb/gzyb31.dbf',
  '/oradata/dbservice/gzyb/gzyb32.dbf',
  '/oradata/dbservice/gzyb/gzyb33.dbf',
  '/oradata/dbservice/gzyb/gzyb34.dbf',
  '/oradata/dbservice/gzyb/gzyb35.dbf',
  '/oradata/dbservice/gzyb/gzyb36.dbf',
  '/oradata/dbservice/gzyb/gzyb37.dbf',
  '/oradata/dbservice/gzyb/gzyb38.dbf',
  '/oradata/dbservice/gzyb/gzyb39.dbf',
  '/oradata/dbservice/gzyb/gzyb40.dbf',
  '/oradata/dbservice/gzyb/gzyb41.dbf',
  '/oradata/dbservice/gzyb/gzyb42.dbf',
  '/oradata/dbservice/gzyb/gzyb43.dbf',
  '/oradata/dbservice/gzyb/gzyb44.dbf',
  '/oradata/dbservice/gzyb/gzyb45.dbf',
  '/oradata/dbservice/gzyb/gzyb46.dbf',
  '/oradata/dbservice/gzyb/gzyb47.dbf',
  '/oradata/dbservice/gzyb/gzyb48.dbf',
  '/oradata/dbservice/gzyb/gzyb49.dbf',
  '/oradata/dbservice/gzyb/gzyb50.dbf',
  '/oradata/dbservice/gzyb/gzyb51.dbf',
  '/oradata/dbservice/gzyb/gzyb52.dbf',
  '/oradata/dbservice/gzyb/gzyb53.dbf',
  '/oradata/dbservice/gzyb/gzyb54.dbf',
  '/oradata/dbservice/gzyb/gzyb55.dbf',
  '/oradata/dbservice/gzyb/gzyb56.dbf',
  '/oradata/dbservice/gzyb/gzyb57.dbf',
  '/oradata/dbservice/gzyb/gzyb58.dbf',
  '/oradata/dbservice/gzyb/gzyb59.dbf',
  '/oradata/dbservice/gzyb/gzyb60.dbf',
  '/oradata/dbservice/gzyb/gzyb61.dbf',
  '/oradata/dbservice/gzyb/gzyb62.dbf',
  '/oradata/dbservice/gzyb/gzyb63.dbf',
  '/oradata/dbservice/gzyb/gzyb64.dbf',
  '/oradata/dbservice/gzyb/gzyb65.dbf',
  '/oradata/dbservice/gzyb/gzyb66.dbf',
  '/oradata/dbservice/gzyb/gzyb67.dbf',
  '/oradata/dbservice/gzyb/gzyb68.dbf',
  '/oradata/dbservice/gzyb/gzyb69.dbf',
  '/oradata/dbservice/gzyb/gzyb70.dbf',
  '/oradata/dbservice/gzyb/gzyb71.dbf',
  '/oradata/dbservice/gzyb/gzyb72.dbf',
  '/oradata/dbservice/gzyb/gzyb73.dbf',
  '/oradata/dbservice/gzyb/gzyb74.dbf',
  '/oradata/dbservice/gzyb/gzyb75.dbf',
  '/oradata/dbservice/gzyb/gzyb76.dbf',
  '/oradata/dbservice/gzyb/gzyb77.dbf',
  '/oradata/dbservice/gzyb/gzyb78.dbf',
  '/oradata/dbservice/gzyb/gzyb79.dbf',
  '/oradata/dbservice/gzyb/gzyb80.dbf',
  '/oradata/dbservice/gzyb/gzyb81.dbf',
  '/oradata/dbservice/gzyb/gzyb82.dbf',
  '/oradata/dbservice/gzyb/gzyb83.dbf',
  '/oradata/dbservice/gzyb/gzyb84.dbf',
  '/oradata/dbservice/gzyb/gzyb85.dbf',
  '/oradata/dbservice/gzyb/gzyb86.dbf',
  '/oradata/dbservice/gzyb/gzyb87.dbf',
  '/oradata/dbservice/gzyb/gzyb88.dbf',
  '/oradata/dbservice/gzyb/gzyb89.dbf',
  '/oradata/dbservice/gzyb/gzyb90.dbf',
  '/oradata/dbservice/gzyb/gzyb91.dbf',
  '/oradata/dbservice/gzyb/gzyb92.dbf',
  '/oradata/dbservice/gzyb/gzyb93.dbf',
  '/oradata/dbservice/gzyb/gzyb94.dbf',
  '/oradata/dbservice/gzyb/gzyb95.dbf',
  '/oradata/dbservice/gzyb/gzyb96.dbf',
  '/oradata/dbservice/gzyb/gzyb97.dbf',
  '/oradata/dbservice/gzyb/gzyb98.dbf',
  '/oradata/dbservice/gzyb/gzyb99.dbf',
  '/oradata/dbservice/gzyb/gzyb100.dbf',
  '/oradata/dbservice/gzyb/gzyb101.dbf',
  '/oradata/dbservice/gzyb/gzyb102.dbf',
  '/oradata/dbservice/gzyb/gzyb103.dbf',
  '/oradata/dbservice/gzyb/gzyb104.dbf',
  '/oradata/dbservice/gzyb/gzyb105.dbf',
  '/oradata/dbservice/gzyb/gzyb106.dbf',
  '/oradata/dbservice/gzyb/gzyb107.dbf',
  '/oradata/dbservice/gzyb/gzyb108.dbf',
  '/oradata/dbservice/gzyb/gzyb109.dbf',
  '/oradata/dbservice/gzyb/gzyb110.dbf',
  '/oradata/dbservice/gzyb/gzyb111.dbf',
  '/oradata/dbservice/gzyb/gzyb112.dbf',
  '/oradata/dbservice/gzyb/gzyb113.dbf',
  '/oradata/dbservice/gzyb/gzyb114.dbf',
  '/oradata/dbservice/gzyb/gzyb115.dbf',
  '/oradata/dbservice/gzyb/gzyb116.dbf',
  '/oradata/dbservice/gzyb/gzyb117.dbf',
  '/oradata/dbservice/gzyb/gzyb118.dbf',
  '/oradata/dbservice/gzyb/gzyb119.dbf',
  '/oradata/dbservice/gzyb/gzyb120.dbf',
  '/oradata/dbservice/gzyb/gzyb121.dbf',
  '/oradata/dbservice/gzyb/gzyb122.dbf',
  '/oradata/dbservice/gzyb/gzyb123.dbf',
  '/oradata/dbservice/gzyb/gzyb124.dbf',
  '/oradata/dbservice/gzyb/gzyb125.dbf',
  '/oradata/dbservice/gzyb/gzyb126.dbf',
  '/oradata/dbservice/gzyb/gzyb127.dbf',
  '/oradata/dbservice/gzyb/gzyb128.dbf',
  '/oradata/dbservice/gzyb/gzyb129.dbf',
  '/oradata/dbservice/gzyb/gzyb130.dbf',
  '/oradata/dbservice/gzyb/gzyb131.dbf',
  '/oradata/dbservice/gzyb/gzyb132.dbf',
  '/oradata/dbservice/gzyb/gzyb133.dbf',
  '/oradata/dbservice/gzyb/gzyb134.dbf',
  '/oradata/dbservice/gzyb/gzyb135.dbf',
  '/oradata/dbservice/gzyb/gzyb136.dbf',
  '/oradata/dbservice/gzyb/gzyb137.dbf',
  '/oradata/dbservice/gzyb/gzyb138.dbf',
  '/oradata/dbservice/gzyb/gzyb139.dbf',
  '/oradata/dbservice/gzyb/gzyb140.dbf',
  '/oradata/dbservice/gzyb/gzyb141.dbf',
  '/oradata/dbservice/gzyb/gzyb142.dbf',
  '/oradata/dbservice/gzyb/gzyb143.dbf',
  '/oradata/dbservice/gzyb/gzyb144.dbf',
  '/oradata/dbservice/gzyb/gzyb145.dbf',
  '/oradata/dbservice/gzyb/gzyb146.dbf',
  '/oradata/dbservice/gzyb/gzyb147.dbf',
  '/oradata/dbservice/gzyb/gzyb148.dbf',
  '/oradata/dbservice/gzyb/gzyb149.dbf',
  '/oradata/dbservice/gzyb/gzyb150.dbf',
  '/oradata/dbservice/gzyb/gzyb151.dbf',
  '/oradata/dbservice/gzyb/gzyb152.dbf',
  '/oradata/dbservice/gzyb/gzyb153.dbf',
  '/oradata/dbservice/gzyb/gzyb154.dbf',
  '/oradata/dbservice/gzyb/gzyb155.dbf',
  '/oradata/dbservice/gzyb/gzyb156.dbf',
  '/oradata/dbservice/gzyb/gzyb157.dbf',
  '/oradata/dbservice/gzyb/gzyb158.dbf',
  '/oradata/dbservice/gzyb/gzyb159.dbf',
  '/oradata/dbservice/gzyb/gzyb160.dbf',
  '/oradata/dbservice/gzyb/gzyb161.dbf',
  '/oradata/dbservice/gzyb/gzyb162.dbf',
  '/oradata/dbservice/gzyb/gzyb163.dbf',
  '/oradata/dbservice/gzyb/gzyb164.dbf',
  '/oradata/dbservice/gzyb/gzyb165.dbf',
  '/oradata/dbservice/gzyb/gzyb166.dbf',
  '/oradata/dbservice/gzyb/gzyb167.dbf',
  '/oradata/dbservice/gzyb/gzyb168.dbf',
  '/oradata/dbservice/gzyb/gzyb169.dbf',
  '/oradata/dbservice/gzyb/gzyb170.dbf',
  '/oradata/dbservice/gzyb/gzyb171.dbf',
  '/oradata/dbservice/gzyb/gzyb172.dbf',
  '/oradata/dbservice/gzyb/gzyb173.dbf',
  '/oradata/dbservice/gzyb/gzyb174.dbf',
  '/oradata/dbservice/gzyb/gzyb175.dbf',
  '/oradata/dbservice/gzyb/gzyb176.dbf',
  '/oradata/dbservice/gzyb/gzyb177.dbf',
  '/oradata/dbservice/gzyb/gzyb178.dbf',
  '/oradata/dbservice/gzyb/gzyb179.dbf',
  '/oradata/dbservice/gzyb/gzyb180.dbf',
  '/oradata/dbservice/gzyb/gzyb181.dbf',
  '/oradata/dbservice/gzyb/gzyb182.dbf',
  '/oradata/dbservice/gzyb/gzyb183.dbf',
  '/oradata/dbservice/gzyb/gzyb184.dbf',
  '/oradata/dbservice/gzyb/gzyb185.dbf',
  '/oradata/dbservice/gzyb/gzyb186.dbf',
  '/oradata/dbservice/gzyb/gzyb187.dbf',
  '/oradata/dbservice/gzyb/gzyb188.dbf',
  '/oradata/dbservice/gzyb/gzyb189.dbf',
  '/oradata/dbservice/gzyb/gzyb190.dbf',
  '/oradata/dbservice/gzyb/gzyb191.dbf',
  '/oradata/dbservice/gzyb/gzyb192.dbf',
  '/oradata/dbservice/gzyb/gzyb193.dbf',
  '/oradata/dbservice/gzyb/gzyb194.dbf',
  '/oradata/dbservice/gzyb/gzyb195.dbf',
  '/oradata/dbservice/gzyb/gzyb196.dbf',
  '/oradata/dbservice/gzyb/gzyb197.dbf',
  '/oradata/dbservice/gzyb/gzyb198.dbf',
  '/oradata/dbservice/gzyb/gzyb199.dbf',
  '/oradata/dbservice/gzyb/gzyb200.dbf',
  '/oradata/dbservice/gzyb_sy.dbf'
CHARACTER SET ZHS16GBK
;

来创建控制文件,在创建新的控制文件前记得在操作系统级别来执行rm来删除原来的控制文件

SQL> startup nomount
ORACLE instance started.

Total System Global Area 1.3495E+10 bytes
Fixed Size                  2218032 bytes
Variable Size            5838473168 bytes
Database Buffers         7583301632 bytes
Redo Buffers               71471104 bytes

SQL>CREATE CONTROLFILE REUSE DATABASE "DBSERVIC" NORESETLOGS  NOARCHIVELOG
    MAXLOGFILES 16
    MAXLOGMEMBERS 3
    MAXDATAFILES 800
    MAXINSTANCES 8
    MAXLOGHISTORY 2336
LOGFILE
  GROUP 4 '/oradata/dbservice/redo04.log'  SIZE 1000M BLOCKSIZE 512,
  GROUP 5 '/oradata/dbservice/redo05.log'  SIZE 1000M BLOCKSIZE 512,
  GROUP 6 '/oradata/dbservice/redo07.log'  SIZE 1000M BLOCKSIZE 512
-- STANDBY LOGFILE
DATAFILE
  '/oradata/dbservice/system01.dbf',
  '/oradata/dbservice/sysaux01.dbf',
  '/oradata/dbservice/undotbs01.dbf',
  '/oradata/dbservice/users01.dbf',
  '/oradata/dbservice/example01.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk01.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk02.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk03.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk04.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk05.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk06.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk07.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk08.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk09.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk10.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk11.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk12.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk13.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk14.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk15.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk16.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk17.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk18.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk19.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk20.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk21.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk22.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk23.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk24.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk25.dbf',
  '/oradata/dbservice/sicp3_bbk/sicp3_bbk26.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb01.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk01.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh01.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh02.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh03.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh04.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh05.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh06.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh07.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh08.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh09.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh10.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh11.dbf',
  '/oradata/dbservice/sicp3_ybjh/sicp3_ybjh12.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg01.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg02.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg03.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg04.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg05.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg06.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg07.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg08.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg09.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg10.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg11.dbf',
  '/oradata/dbservice/sicp3_ydjg/sicp3_ydjg12.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb02.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb03.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb04.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb05.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb06.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb07.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb08.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb09.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb10.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb11.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb12.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb13.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb14.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb15.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb16.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb17.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb18.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb19.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb20.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb21.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb22.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb23.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb24.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb25.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb26.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb27.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb28.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb29.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb30.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb31.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb32.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb33.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb34.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb35.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb36.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb37.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb38.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb39.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb40.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb41.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb42.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb43.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb44.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb45.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb46.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb47.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb48.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb49.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb50.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb51.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb52.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb53.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb54.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb55.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb56.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb57.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb58.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb59.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb60.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb61.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb62.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb63.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb64.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb65.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb66.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb67.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb68.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb69.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb70.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb71.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb72.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb73.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb74.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb75.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb76.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb77.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb78.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb79.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb80.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb81.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb82.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb83.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb84.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb85.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb86.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb87.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb88.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb89.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb90.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb91.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb92.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb93.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb94.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb95.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb96.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb97.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb98.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb99.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb100.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb101.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb102.dbf',
  '/oradata/dbservice/sicp3_gzyb/sicp3_gzyb103.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk02.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk03.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk04.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk05.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk06.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk07.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk08.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk09.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk10.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk11.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk12.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk13.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk14.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk15.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk16.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk17.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk18.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk19.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk20.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk21.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk22.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk23.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk24.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk25.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk26.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk27.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk28.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk29.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk30.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk31.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk32.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk33.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk34.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk35.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk36.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk37.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk38.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk39.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk40.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk41.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk42.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk43.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk44.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk45.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk46.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk47.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk48.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk49.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk50.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk51.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk52.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk53.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk54.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk55.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk56.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk57.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk58.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk59.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk60.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk61.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk62.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk63.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk64.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk65.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk66.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk67.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk68.dbf',
  '/oradata/dbservice/sicp3_ybnk/sicp3_ybnk69.dbf',
  '/oradata/dbservice/gzyb/gzyb01.dbf',
  '/oradata/dbservice/gzyb/gzyb02.dbf',
  '/oradata/dbservice/gzyb/gzyb03.dbf',
  '/oradata/dbservice/gzyb/gzyb04.dbf',
  '/oradata/dbservice/gzyb/gzyb05.dbf',
  '/oradata/dbservice/gzyb/gzyb06.dbf',
  '/oradata/dbservice/gzyb/gzyb07.dbf',
  '/oradata/dbservice/gzyb/gzyb08.dbf',
  '/oradata/dbservice/gzyb/gzyb09.dbf',
  '/oradata/dbservice/gzyb/gzyb10.dbf',
  '/oradata/dbservice/gzyb/gzyb11.dbf',
  '/oradata/dbservice/gzyb/gzyb12.dbf',
  '/oradata/dbservice/gzyb/gzyb13.dbf',
  '/oradata/dbservice/gzyb/gzyb14.dbf',
  '/oradata/dbservice/gzyb/gzyb15.dbf',
  '/oradata/dbservice/gzyb/gzyb16.dbf',
  '/oradata/dbservice/gzyb/gzyb17.dbf',
  '/oradata/dbservice/gzyb/gzyb18.dbf',
  '/oradata/dbservice/gzyb/gzyb19.dbf',
  '/oradata/dbservice/gzyb/gzyb20.dbf',
  '/oradata/dbservice/gzyb/gzyb21.dbf',
  '/oradata/dbservice/gzyb/gzyb22.dbf',
  '/oradata/dbservice/gzyb/gzyb23.dbf',
  '/oradata/dbservice/gzyb/gzyb24.dbf',
  '/oradata/dbservice/gzyb/gzyb25.dbf',
  '/oradata/dbservice/gzyb/gzyb26.dbf',
  '/oradata/dbservice/gzyb/gzyb27.dbf',
  '/oradata/dbservice/gzyb/gzyb28.dbf',
  '/oradata/dbservice/gzyb/gzyb29.dbf',
  '/oradata/dbservice/gzyb/gzyb30.dbf',
  '/oradata/dbservice/gzyb/gzyb31.dbf',
  '/oradata/dbservice/gzyb/gzyb32.dbf',
  '/oradata/dbservice/gzyb/gzyb33.dbf',
  '/oradata/dbservice/gzyb/gzyb34.dbf',
  '/oradata/dbservice/gzyb/gzyb35.dbf',
  '/oradata/dbservice/gzyb/gzyb36.dbf',
  '/oradata/dbservice/gzyb/gzyb37.dbf',
  '/oradata/dbservice/gzyb/gzyb38.dbf',
  '/oradata/dbservice/gzyb/gzyb39.dbf',
  '/oradata/dbservice/gzyb/gzyb40.dbf',
  '/oradata/dbservice/gzyb/gzyb41.dbf',
  '/oradata/dbservice/gzyb/gzyb42.dbf',
  '/oradata/dbservice/gzyb/gzyb43.dbf',
  '/oradata/dbservice/gzyb/gzyb44.dbf',
  '/oradata/dbservice/gzyb/gzyb45.dbf',
  '/oradata/dbservice/gzyb/gzyb46.dbf',
  '/oradata/dbservice/gzyb/gzyb47.dbf',
  '/oradata/dbservice/gzyb/gzyb48.dbf',
  '/oradata/dbservice/gzyb/gzyb49.dbf',
  '/oradata/dbservice/gzyb/gzyb50.dbf',
  '/oradata/dbservice/gzyb/gzyb51.dbf',
  '/oradata/dbservice/gzyb/gzyb52.dbf',
  '/oradata/dbservice/gzyb/gzyb53.dbf',
  '/oradata/dbservice/gzyb/gzyb54.dbf',
  '/oradata/dbservice/gzyb/gzyb55.dbf',
  '/oradata/dbservice/gzyb/gzyb56.dbf',
  '/oradata/dbservice/gzyb/gzyb57.dbf',
  '/oradata/dbservice/gzyb/gzyb58.dbf',
  '/oradata/dbservice/gzyb/gzyb59.dbf',
  '/oradata/dbservice/gzyb/gzyb60.dbf',
  '/oradata/dbservice/gzyb/gzyb61.dbf',
  '/oradata/dbservice/gzyb/gzyb62.dbf',
  '/oradata/dbservice/gzyb/gzyb63.dbf',
  '/oradata/dbservice/gzyb/gzyb64.dbf',
  '/oradata/dbservice/gzyb/gzyb65.dbf',
  '/oradata/dbservice/gzyb/gzyb66.dbf',
  '/oradata/dbservice/gzyb/gzyb67.dbf',
  '/oradata/dbservice/gzyb/gzyb68.dbf',
  '/oradata/dbservice/gzyb/gzyb69.dbf',
  '/oradata/dbservice/gzyb/gzyb70.dbf',
  '/oradata/dbservice/gzyb/gzyb71.dbf',
  '/oradata/dbservice/gzyb/gzyb72.dbf',
  '/oradata/dbservice/gzyb/gzyb73.dbf',
  '/oradata/dbservice/gzyb/gzyb74.dbf',
  '/oradata/dbservice/gzyb/gzyb75.dbf',
  '/oradata/dbservice/gzyb/gzyb76.dbf',
  '/oradata/dbservice/gzyb/gzyb77.dbf',
  '/oradata/dbservice/gzyb/gzyb78.dbf',
  '/oradata/dbservice/gzyb/gzyb79.dbf',
  '/oradata/dbservice/gzyb/gzyb80.dbf',
  '/oradata/dbservice/gzyb/gzyb81.dbf',
  '/oradata/dbservice/gzyb/gzyb82.dbf',
  '/oradata/dbservice/gzyb/gzyb83.dbf',
  '/oradata/dbservice/gzyb/gzyb84.dbf',
  '/oradata/dbservice/gzyb/gzyb85.dbf',
  '/oradata/dbservice/gzyb/gzyb86.dbf',
  '/oradata/dbservice/gzyb/gzyb87.dbf',
  '/oradata/dbservice/gzyb/gzyb88.dbf',
  '/oradata/dbservice/gzyb/gzyb89.dbf',
  '/oradata/dbservice/gzyb/gzyb90.dbf',
  '/oradata/dbservice/gzyb/gzyb91.dbf',
  '/oradata/dbservice/gzyb/gzyb92.dbf',
  '/oradata/dbservice/gzyb/gzyb93.dbf',
  '/oradata/dbservice/gzyb/gzyb94.dbf',
  '/oradata/dbservice/gzyb/gzyb95.dbf',
  '/oradata/dbservice/gzyb/gzyb96.dbf',
  '/oradata/dbservice/gzyb/gzyb97.dbf',
  '/oradata/dbservice/gzyb/gzyb98.dbf',
  '/oradata/dbservice/gzyb/gzyb99.dbf',
  '/oradata/dbservice/gzyb/gzyb100.dbf',
  '/oradata/dbservice/gzyb/gzyb101.dbf',
  '/oradata/dbservice/gzyb/gzyb102.dbf',
  '/oradata/dbservice/gzyb/gzyb103.dbf',
  '/oradata/dbservice/gzyb/gzyb104.dbf',
  '/oradata/dbservice/gzyb/gzyb105.dbf',
  '/oradata/dbservice/gzyb/gzyb106.dbf',
  '/oradata/dbservice/gzyb/gzyb107.dbf',
  '/oradata/dbservice/gzyb/gzyb108.dbf',
  '/oradata/dbservice/gzyb/gzyb109.dbf',
  '/oradata/dbservice/gzyb/gzyb110.dbf',
  '/oradata/dbservice/gzyb/gzyb111.dbf',
  '/oradata/dbservice/gzyb/gzyb112.dbf',
  '/oradata/dbservice/gzyb/gzyb113.dbf',
  '/oradata/dbservice/gzyb/gzyb114.dbf',
  '/oradata/dbservice/gzyb/gzyb115.dbf',
  '/oradata/dbservice/gzyb/gzyb116.dbf',
  '/oradata/dbservice/gzyb/gzyb117.dbf',
  '/oradata/dbservice/gzyb/gzyb118.dbf',
  '/oradata/dbservice/gzyb/gzyb119.dbf',
  '/oradata/dbservice/gzyb/gzyb120.dbf',
  '/oradata/dbservice/gzyb/gzyb121.dbf',
  '/oradata/dbservice/gzyb/gzyb122.dbf',
  '/oradata/dbservice/gzyb/gzyb123.dbf',
  '/oradata/dbservice/gzyb/gzyb124.dbf',
  '/oradata/dbservice/gzyb/gzyb125.dbf',
  '/oradata/dbservice/gzyb/gzyb126.dbf',
  '/oradata/dbservice/gzyb/gzyb127.dbf',
  '/oradata/dbservice/gzyb/gzyb128.dbf',
  '/oradata/dbservice/gzyb/gzyb129.dbf',
  '/oradata/dbservice/gzyb/gzyb130.dbf',
  '/oradata/dbservice/gzyb/gzyb131.dbf',
  '/oradata/dbservice/gzyb/gzyb132.dbf',
  '/oradata/dbservice/gzyb/gzyb133.dbf',
  '/oradata/dbservice/gzyb/gzyb134.dbf',
  '/oradata/dbservice/gzyb/gzyb135.dbf',
  '/oradata/dbservice/gzyb/gzyb136.dbf',
  '/oradata/dbservice/gzyb/gzyb137.dbf',
  '/oradata/dbservice/gzyb/gzyb138.dbf',
  '/oradata/dbservice/gzyb/gzyb139.dbf',
  '/oradata/dbservice/gzyb/gzyb140.dbf',
  '/oradata/dbservice/gzyb/gzyb141.dbf',
  '/oradata/dbservice/gzyb/gzyb142.dbf',
  '/oradata/dbservice/gzyb/gzyb143.dbf',
  '/oradata/dbservice/gzyb/gzyb144.dbf',
  '/oradata/dbservice/gzyb/gzyb145.dbf',
  '/oradata/dbservice/gzyb/gzyb146.dbf',
  '/oradata/dbservice/gzyb/gzyb147.dbf',
  '/oradata/dbservice/gzyb/gzyb148.dbf',
  '/oradata/dbservice/gzyb/gzyb149.dbf',
  '/oradata/dbservice/gzyb/gzyb150.dbf',
  '/oradata/dbservice/gzyb/gzyb151.dbf',
  '/oradata/dbservice/gzyb/gzyb152.dbf',
  '/oradata/dbservice/gzyb/gzyb153.dbf',
  '/oradata/dbservice/gzyb/gzyb154.dbf',
  '/oradata/dbservice/gzyb/gzyb155.dbf',
  '/oradata/dbservice/gzyb/gzyb156.dbf',
  '/oradata/dbservice/gzyb/gzyb157.dbf',
  '/oradata/dbservice/gzyb/gzyb158.dbf',
  '/oradata/dbservice/gzyb/gzyb159.dbf',
  '/oradata/dbservice/gzyb/gzyb160.dbf',
  '/oradata/dbservice/gzyb/gzyb161.dbf',
  '/oradata/dbservice/gzyb/gzyb162.dbf',
  '/oradata/dbservice/gzyb/gzyb163.dbf',
  '/oradata/dbservice/gzyb/gzyb164.dbf',
  '/oradata/dbservice/gzyb/gzyb165.dbf',
  '/oradata/dbservice/gzyb/gzyb166.dbf',
  '/oradata/dbservice/gzyb/gzyb167.dbf',
  '/oradata/dbservice/gzyb/gzyb168.dbf',
  '/oradata/dbservice/gzyb/gzyb169.dbf',
  '/oradata/dbservice/gzyb/gzyb170.dbf',
  '/oradata/dbservice/gzyb/gzyb171.dbf',
  '/oradata/dbservice/gzyb/gzyb172.dbf',
  '/oradata/dbservice/gzyb/gzyb173.dbf',
  '/oradata/dbservice/gzyb/gzyb174.dbf',
  '/oradata/dbservice/gzyb/gzyb175.dbf',
  '/oradata/dbservice/gzyb/gzyb176.dbf',
  '/oradata/dbservice/gzyb/gzyb177.dbf',
  '/oradata/dbservice/gzyb/gzyb178.dbf',
  '/oradata/dbservice/gzyb/gzyb179.dbf',
  '/oradata/dbservice/gzyb/gzyb180.dbf',
  '/oradata/dbservice/gzyb/gzyb181.dbf',
  '/oradata/dbservice/gzyb/gzyb182.dbf',
  '/oradata/dbservice/gzyb/gzyb183.dbf',
  '/oradata/dbservice/gzyb/gzyb184.dbf',
  '/oradata/dbservice/gzyb/gzyb185.dbf',
  '/oradata/dbservice/gzyb/gzyb186.dbf',
  '/oradata/dbservice/gzyb/gzyb187.dbf',
  '/oradata/dbservice/gzyb/gzyb188.dbf',
  '/oradata/dbservice/gzyb/gzyb189.dbf',
  '/oradata/dbservice/gzyb/gzyb190.dbf',
  '/oradata/dbservice/gzyb/gzyb191.dbf',
  '/oradata/dbservice/gzyb/gzyb192.dbf',
  '/oradata/dbservice/gzyb/gzyb193.dbf',
  '/oradata/dbservice/gzyb/gzyb194.dbf',
  '/oradata/dbservice/gzyb/gzyb195.dbf',
  '/oradata/dbservice/gzyb/gzyb196.dbf',
  '/oradata/dbservice/gzyb/gzyb197.dbf',
  '/oradata/dbservice/gzyb/gzyb198.dbf',
  '/oradata/dbservice/gzyb/gzyb199.dbf',
  '/oradata/dbservice/gzyb/gzyb200.dbf',
  '/oradata/dbservice/gzyb_sy.dbf'
CHARACTER SET ZHS16GBK
;

SQL>recover database;
Media Recovery Complete 

SQL> alter database open;
alter database open

SQL>  alter database open 
ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/oradata/dbservice/system01.dbf'

打开数据库还是报错检查alert_dbservice.log文件发现

Errors in file /orac/diag/rdbms/dbservice/dbservice/trace/dbservice_ora_5247.trc  (incident=24161):
ORA-00600: internal error code, arguments: [2662], [3138], [3057689962], [3138], [3057697443], [12583040], [], 

[], [], [], [], []
Incident details in: /orac/diag/rdbms/dbservice/dbservice/incident/incdir_24161/dbservice_ora_5247_i24161.trc
Errors in file /orac/diag/rdbms/dbservice/dbservice/trace/dbservice_ora_5247.trc:
ORA-00600: internal error code, arguments: [2662], [3138], [3057689962], [3138], [3057697443], [12583040], [], 

[], [], [], [], []
Errors in file /orac/diag/rdbms/dbservice/dbservice/trace/dbservice_ora_5247.trc:
ORA-00600: internal error code, arguments: [2662], [3138], [3057689962], [3138], [3057697443], [12583040], [], 

[], [], [], [], []
Error 600 happened during db open, shutting down database

得到的信息有限,只能看到是严重内部错误,剩下的都是内存堆栈的一堆信息,于是查找了一下这个错误的具体相关信息。ORA-600 [2662] “Block SCN is ahead of Current SCN”,说明当前数据库的数据块的SCN早于当前的SCN,主要是和存储在UGA变量中的dependent SCN进行比较,如果当前的SCN小于它,数据库就会产生这个ORA-600 [2662]的错误了。这个错误一共有五个参
数,分别代表不同的含义,
ORA-600 [2662] [a] [b] [c] [d] [e]
Arg [a] Current SCN WRAP
Arg [b] Current SCN BASE
Arg [c] dependent SCN WRAP
Arg [d] dependent SCN BASE
Arg [e] Where present this is the DBA where the dependent SCN came from.
我们分析错误中的提示,它的参数b=3057689962,d=3057697443,表明当前的SCN确实是小于dependent SCN,所以产生了这个600的错误。
通过查阅文档,发现这个错误的产生原因主要有以下几条:
1.使用隐含参数_ALLOW_RESETLOGS_CORRUPTION后resetlogs打开数据库
2.硬件错误引起数据库没法写控制文件和重做日志文件
3.错误的部分恢复数据库
4.恢复了控制文件但是没有使用recover database using backup controlfile进行恢复
5.数据库crash后设置了_DISABLE_LOGGING隐含参数
6.在并行服务器环境中DLM存在问题
仔细对比了一下,发现问题可能是由于第一条产生的,由于设置了_ALLOW_RESETLOGS_CORRUPTION这个隐含参数后,虽然强制性的打开数据库,但是数据库本身存在了corruption,仍然存在严重的问题。于是想到使用ADJUST_SCN事件来调整当前的SCN,使其大于dependent SCN,然后保证数据库可以全库的导出,然后重建数据库导入数据。执行:

alter session set events ‘IMMEDIATE trace name ADJUST_SCN level 1’;

SQL>  startup pfile=/orac/orahome/11.2.0/db_1/dbs/initdbservice.ora mount
ORACLE instance started.

Total System Global Area 1.3495E+10 bytes
Fixed Size                  2218032 bytes
Variable Size            5838473168 bytes
Database Buffers         7583301632 bytes
Redo Buffers               71471104 bytes
Database mounted.

SQL>recover database;
Media Recovery Complete 

SQL> alter session set events '10015 trace name adjust_scn level 1';

Session altered.

SQL>  alter database open;

ERROR at line 1:
ORA-01194: file 1 needs more recovery to be consistent
ORA-01110: data file 1: '/oradata/dbservice/system01.dbf'

检查alert_dbservice.log文件发现

No Resource Manager plan active
Errors in file /orac/diag/rdbms/dbservice/dbservice/trace/dbservice_ora_5571.trc  (incident=25369):
ORA-00600: internal error code, arguments: [4193], [], [], [], [], [], [], [], [], [], [], []

说明:600-[4000]到[5000]的错误都是和rollback 相关的

可以先使用手功管理的回滚表空间的方式将数据库打开
设置如下参数
undo_tablespace=’SYSTEM’
undo_management=’MANUAL’

[root@gzybtest dbservice]# vi /orac/orahome/11.2.0/db_1/dbs/initdbservice.ora
dbservice.__db_cache_size=7583301632
dbservice.__java_pool_size=67108864
dbservice.__large_pool_size=67108864
dbservice.__oracle_base='/orac'#ORACLE_BASE set from environment
dbservice.__pga_aggregate_target=4764729344
dbservice.__sga_target=8791261184
dbservice.__shared_io_pool_size=0
dbservice.__shared_pool_size=872415232
dbservice.__streams_pool_size=67108864
*._allow_resetlogs_corruption=TRUE
*._disable_logging=FALSE
*.audit_file_dest='/orac/admin/dbservice/adump'
*.audit_trail='none'
*.compatible='11.2.0.0.0'
*.control_files='/oradata/dbservice/control01.ctl','/orac/flash_recovery_area/dbservice/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_files=500
*.db_name='dbservic'
*.db_recovery_file_dest='/orac/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.db_unique_name='dbservice'
*.deferred_segment_creation=FALSE
*.diagnostic_dest='/orac'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dbserviceXDB)'
*.memory_target=13501464576
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='SYSTEM'
undo_management='MANUAL'

SQL>  startup pfile=/orac/orahome/11.2.0/db_1/dbs/initdbservice.ora
ORACLE instance started.

Total System Global Area 1.3495E+10 bytes
Fixed Size                  2218032 bytes
Variable Size            5838473168 bytes
Database Buffers         7583301632 bytes
Redo Buffers               71471104 bytes
Database mounted.
Database opened.

接下来创建新的undo表空间并修改initdbservice.ora文件的undo表空间相关的参数

SQL> create undo tablespace undotbs02 datafile '/oradata/dbservice/undotbs02.dbf' size 500M;

Tablespace created.

[root@gzybtest dbservice]# vi /orac/orahome/11.2.0/db_1/dbs/initdbservice.ora
dbservice.__db_cache_size=7583301632
dbservice.__java_pool_size=67108864
dbservice.__large_pool_size=67108864
dbservice.__oracle_base='/orac'#ORACLE_BASE set from environment
dbservice.__pga_aggregate_target=4764729344
dbservice.__sga_target=8791261184
dbservice.__shared_io_pool_size=0
dbservice.__shared_pool_size=872415232
dbservice.__streams_pool_size=67108864
*._allow_resetlogs_corruption=TRUE
*._disable_logging=FALSE
*.audit_file_dest='/orac/admin/dbservice/adump'
*.audit_trail='none'
*.compatible='11.2.0.0.0'
*.control_files='/oradata/dbservice/control01.ctl','/orac/flash_recovery_area/dbservice/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_files=500
*.db_name='dbservic'
*.db_recovery_file_dest='/orac/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.db_unique_name='dbservice'
*.deferred_segment_creation=FALSE
*.diagnostic_dest='/orac'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dbserviceXDB)'
*.memory_target=13501464576
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
undo_tablespace='undotbs02'
undo_management='AUTO'

SQL> startup pfile=/orac/orahome/11.2.0/db_1/dbs/initdbservice.ora
ORACLE instance started.

Total System Global Area 1.3495E+10 bytes
Fixed Size                  2218032 bytes
Variable Size            5838473168 bytes
Database Buffers         7583301632 bytes
Redo Buffers               71471104 bytes
Database mounted.
Database opened.
SQL> show parameter undo

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      undotbs02
SQL> create spfile from pfile;

File created.

使用spfile参数文件来启动数据库

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.

SQL> startup
ORACLE instance started.

Total System Global Area 1.3495E+10 bytes
Fixed Size                  2218032 bytes
Variable Size            5838473168 bytes
Database Buffers         7583301632 bytes
Redo Buffers               71471104 bytes
Database mounted.
Database opened.

数据库打开了,本以为搞定了数据库的恢复但是过了一分钟连接数据库进行操作时报错

SQL> ALTER DATABASE  DATAFILE '/oradata/dbservice/undotbs01.dbf' OFFLINE DROP;
ALTER DATABASE  DATAFILE '/oradata/dbservice/undotbs01.dbf' OFFLINE DROP
*
ERROR at line 1:
ORA-03135: connection lost contact
Process ID: 8532
Session ID: 96 Serial number: 3

检查alert_dbservice.log文件发现

Errors in file /orac/diag/rdbms/dbservice/dbservice/trace/dbservice_smon_7186.trc  (incident=32527):
ORA-00600: internal error code, arguments: [4137], [2.18.4491], [0], [0], [], [], [], [], [], [], [], []
Thu Aug 08 23:14:00 2013

错误原因:
_smon_internal_errlimit(limit of SMON internal errors) SMON遇到了内部错误,最大允许100次,不断计数增长,达到100的时候,数据库smon进程自动down掉,从而导致数据库down

解决办法:
1.临时解决办法:设置_smon_internal_errlimit一个较大值
2.根本解决办法:使用undo隐含参数,删除有问题undo 回滚段和undo表空间或者使用10513 事件

我这里选择删除有问题的undo表空间

SQL> drop tablespace UNDOTBS1 including contents and datafiles;
drop tablespace UNDOTBS1 including contents and datafiles
*
ERROR at line 1:
ORA-01548: active rollback segment '_SYSSMU3_2097677531$' found, terminate
dropping tablespace

执行下面的查询来看undotbs1表空间的回滚段

SQL> SELECT SEGMENT_NAME, OWNER, TABLESPACE_NAME, STATUS FROM DBA_ROLLBACK_SEGS;

SEGMENT_NAME                   OWNER  TABLESPACE_NAME
------------------------------ ------ ------------------------------
STATUS
----------------
SYSTEM                         SYS    SYSTEM
ONLINE

_SYSSMU13_2246115931$          PUBLIC UNDOTBS1
OFFLINE

_SYSSMU12_1541645018$          PUBLIC UNDOTBS1
NEEDS RECOVERY

SEGMENT_NAME                   OWNER  TABLESPACE_NAME
------------------------------ ------ ------------------------------
STATUS
----------------
_SYSSMU11_1259892418$          PUBLIC UNDOTBS1
OFFLINE

_SYSSMU10_3550978943$          PUBLIC UNDOTBS1
OFFLINE

_SYSSMU9_1424341975$           PUBLIC UNDOTBS1
OFFLINE

SEGMENT_NAME                   OWNER  TABLESPACE_NAME
------------------------------ ------ ------------------------------
STATUS
----------------
_SYSSMU8_2012382730$           PUBLIC UNDOTBS1
OFFLINE

_SYSSMU7_3286610060$           PUBLIC UNDOTBS1
OFFLINE

_SYSSMU6_2443381498$           PUBLIC UNDOTBS1
OFFLINE

SEGMENT_NAME                   OWNER  TABLESPACE_NAME
------------------------------ ------ ------------------------------
STATUS
----------------
_SYSSMU5_1527469038$           PUBLIC UNDOTBS1
OFFLINE

_SYSSMU4_1152005954$           PUBLIC UNDOTBS1
OFFLINE

_SYSSMU3_2097677531$           PUBLIC UNDOTBS1
NEEDS RECOVERY

SEGMENT_NAME                   OWNER  TABLESPACE_NAME
------------------------------ ------ ------------------------------
STATUS
----------------
_SYSSMU37_1815119680$          PUBLIC UNDOTBS02
OFFLINE

_SYSSMU36_3725248445$          PUBLIC UNDOTBS02
OFFLINE

_SYSSMU35_2892765787$          PUBLIC UNDOTBS02
OFFLINE

SEGMENT_NAME                   OWNER  TABLESPACE_NAME
------------------------------ ------ ------------------------------
STATUS
----------------
_SYSSMU34_2695217521$          PUBLIC UNDOTBS02
OFFLINE

_SYSSMU33_1797432692$          PUBLIC UNDOTBS02
OFFLINE

_SYSSMU32_1653795157$          PUBLIC UNDOTBS02
OFFLINE

SEGMENT_NAME                   OWNER  TABLESPACE_NAME
------------------------------ ------ ------------------------------
STATUS
----------------
_SYSSMU31_1105695367$          PUBLIC UNDOTBS02
OFFLINE

_SYSSMU30_424248798$           PUBLIC UNDOTBS02
OFFLINE

_SYSSMU29_778801568$           PUBLIC UNDOTBS02
OFFLINE

SEGMENT_NAME                   OWNER  TABLESPACE_NAME
------------------------------ ------ ------------------------------
STATUS
----------------
_SYSSMU28_2939988898$          PUBLIC UNDOTBS02
OFFLINE

_SYSSMU27_220897705$           PUBLIC UNDOTBS02
OFFLINE

_SYSSMU26_153095121$           PUBLIC UNDOTBS02
OFFLINE

SEGMENT_NAME                   OWNER  TABLESPACE_NAME
------------------------------ ------ ------------------------------
STATUS
----------------
_SYSSMU25_193585708$           PUBLIC UNDOTBS02
OFFLINE

_SYSSMU24_3014414866$          PUBLIC UNDOTBS02
OFFLINE

_SYSSMU23_2910579661$          PUBLIC UNDOTBS02
OFFLINE

SEGMENT_NAME                   OWNER  TABLESPACE_NAME
------------------------------ ------ ------------------------------
STATUS
----------------
_SYSSMU22_2488176863$          PUBLIC UNDOTBS02
OFFLINE

_SYSSMU21_1905929509$          PUBLIC UNDOTBS02
OFFLINE

_SYSSMU20_3032273491$          PUBLIC UNDOTBS02
OFFLINE

SEGMENT_NAME                   OWNER  TABLESPACE_NAME
------------------------------ ------ ------------------------------
STATUS
----------------
_SYSSMU19_2000855474$          PUBLIC UNDOTBS02
OFFLINE

_SYSSMU18_729116992$           PUBLIC UNDOTBS02
OFFLINE

_SYSSMU17_388387478$           PUBLIC UNDOTBS02
OFFLINE

SEGMENT_NAME                   OWNER  TABLESPACE_NAME
------------------------------ ------ ------------------------------
STATUS
----------------
_SYSSMU16_241755401$           PUBLIC UNDOTBS02
OFFLINE

_SYSSMU15_1810545622$          PUBLIC UNDOTBS02
OFFLINE

_SYSSMU14_714084753$           PUBLIC UNDOTBS02
OFFLINE

[root@gzybtest admin]# vi /orac/orahome/11.2.0/db_1/dbs/initdbservice.ora
dbservice.__db_cache_size=7583301632
dbservice.__java_pool_size=67108864
dbservice.__large_pool_size=67108864
dbservice.__oracle_base='/orac'#ORACLE_BASE set from environment
dbservice.__pga_aggregate_target=4764729344
dbservice.__sga_target=8791261184
dbservice.__shared_io_pool_size=0
dbservice.__shared_pool_size=872415232
dbservice.__streams_pool_size=67108864
*._allow_resetlogs_corruption=TRUE
*._disable_logging=FALSE
*.audit_file_dest='/orac/admin/dbservice/adump'
*.audit_trail='none'
*.compatible='11.2.0.0.0'
*.control_files='/oradata/dbservice/control01.ctl','/orac/flash_recovery_area/dbservice/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_files=500
*.db_name='dbservic'
*.db_recovery_file_dest='/orac/flash_recovery_area'
*.db_recovery_file_dest_size=4070572032
*.db_unique_name='dbservice'
*.deferred_segment_creation=FALSE
*.diagnostic_dest='/orac'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=dbserviceXDB)'
*.memory_target=13501464576
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.undo_management='MANUAL'
*.undo_tablespace='undotbs02'
_CORRUPTED_ROLLBACK_SEGMENTS = (_SYSSMU1$,_SYSSMU2$,_SYSSMU3$,_SYSSMU3$,_SYSSMU4$,_SYSSMU5$,_SYSSMU6$,_SYSSMU7

$,_SYSSMU8$,_SYSSMU9$,_SYSSMU10$,_SYSSMU11$,_SYSSMU12$,_SYSSMU13$,_SYSSMU14$,_SYSSMU15$,_SYSSMU16$,_SYSSMU17

$,_SYSSMU18$,_SYSSMU19$,_SYSSMU20$,_SYSSMU2_2232571081$,
_SYSSMU3_2097677531$,_SYSSMU4_1152005954$,_SYSSMU5_1527469038$,_SYSSMU6_2443381498$,_SYSSMU7_3286610060

$,_SYSSMU8_2012382730$,
_SYSSMU9_1424341975$,_SYSSMU10_3550978943$,_SYSSMU11_1259892418$,_SYSSMU12_1541645018$,_SYSSMU13_2246115931$)
~
~
~
~
"/orac/orahome/11.2.0/db_1/dbs/initdbservice.ora" 34L, 1602C written
[root@gzybtest admin]# 

SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup pfile=/orac/orahome/11.2.0/db_1/dbs/initdbservice.ora
ORACLE instance started.

Total System Global Area 1.3495E+10 bytes
Fixed Size                  2218032 bytes
Variable Size            5838473168 bytes
Database Buffers         7583301632 bytes
Redo Buffers               71471104 bytes
Database mounted.
Database opened.
SQL> drop tablespace UNDOTBS1 including contents and datafiles;

Tablespace dropped.

到此数据恢复终于搞定了,接下来就是备份数据使用exp/expdp来进行逻辑导出

网络设备重启造成rac监听故障连接数据库报ora-12170:TNS:连接超时的错误

由于网络管理员把所有网络设备做了重启造成rac的虚拟IP发生漂移造成监听程序失效应用连接数据库
时报ora-12170:TNS:连接超时的错误
从下面的信息可以看到两个节点的vip漂移到另一个节点上使监听offline了

[root@hnzdb2 bin]# ./crs_stat -t
Name           Type           Target    State     Host
------------------------------------------------------------
ora....SM1.asm application    ONLINE    ONLINE    hnzdb1
ora....ER.lsnr application    ONLINE    OFFLINE
ora....B1.lsnr application    ONLINE    OFFLINE
ora.hnzdb1.gsd application    ONLINE    ONLINE    hnzdb1
ora.hnzdb1.ons application    ONLINE    ONLINE    hnzdb1
ora.hnzdb1.vip application    ONLINE    ONLINE    hnzdb2
ora....SM2.asm application    ONLINE    ONLINE    hnzdb2
ora....ER.lsnr application    ONLINE    OFFLINE
ora....B2.lsnr application    ONLINE    OFFLINE
ora.hnzdb2.gsd application    ONLINE    ONLINE    hnzdb2
ora.hnzdb2.ons application    ONLINE    ONLINE    hnzdb2
ora.hnzdb2.vip application    ONLINE    ONLINE    hnzdb1
ora.orcl.db    application    ONLINE    ONLINE    hnzdb1
ora....l1.inst application    ONLINE    ONLINE    hnzdb1
ora....l2.inst application    ONLINE    ONLINE    hnzdb2

尝试重启所有服务报虚拟ip漂移的错误信息

[root@hnzdb2 bin]# ./crs_start -all
hnzdb1 : CRS-1019: Resource ora.hnzdb2.LISTENER.lsnr (application) cannot run on
 hnzdb1
hnzdb2 : CRS-1018: Resource ora.hnzdb2.vip (application) is already running on h
nzdb1

hnzdb1 : CRS-1018: Resource ora.hnzdb1.vip (application) is already running on h
nzdb2
hnzdb2 : CRS-1019: Resource ora.hnzdb1.LISTENER.lsnr (application) cannot run on
 hnzdb2

hnzdb1 : CRS-1019: Resource ora.hnzdb2.LISTENER_HNZDB2.lsnr (application) cannot
 run on hnzdb1
hnzdb2 : CRS-1018: Resource ora.hnzdb2.vip (application) is already running on h
nzdb1

hnzdb1 : CRS-1018: Resource ora.hnzdb1.vip (application) is already running on h
nzdb2
hnzdb2 : CRS-1019: Resource ora.hnzdb1.LISTENER_HNZDB1.lsnr (application) cannot
 run on hnzdb2

CRS-0223: Resource 'ora.hnzdb1.LISTENER.lsnr' has placement error.

CRS-0223: Resource 'ora.hnzdb1.LISTENER_HNZDB1.lsnr' has placement error.

CRS-0223: Resource 'ora.hnzdb2.LISTENER.lsnr' has placement error.

CRS-0223: Resource 'ora.hnzdb2.LISTENER_HNZDB2.lsnr' has placement error.

先停止所有服务再来重启

[root@hnzdb2 bin]# ./crs_stop -all
Attempting to stop `ora.hnzdb2.gsd` on member `hnzdb2`
Attempting to stop `ora.hnzdb2.ons` on member `hnzdb2`
Stop of `ora.hnzdb2.gsd` on member `hnzdb2` succeeded.
Attempting to stop `ora.hnzdb1.gsd` on member `hnzdb1`
Attempting to stop `ora.orcl.db` on member `hnzdb1`
Attempting to stop `ora.hnzdb1.ons` on member `hnzdb1`
Stop of `ora.hnzdb2.ons` on member `hnzdb2` succeeded.
Stop of `ora.hnzdb1.gsd` on member `hnzdb1` succeeded.
Stop of `ora.hnzdb1.ons` on member `hnzdb1` succeeded.
^[Stop of `ora.orcl.db` on member `hnzdb1` succeeded.
`ora.orcl.orcl1.inst` is already OFFLINE.
`ora.orcl.orcl2.inst` is already OFFLINE.
Attempting to stop `ora.hnzdb2.ASM2.asm` on member `hnzdb2`
Target set to OFFLINE for `ora.hnzdb2.LISTENER_HNZDB2.lsnr`
Target set to OFFLINE for `ora.hnzdb1.LISTENER_HNZDB1.lsnr`
Attempting to stop `ora.hnzdb1.ASM1.asm` on member `hnzdb1`
Target set to OFFLINE for `ora.hnzdb2.LISTENER.lsnr`
Attempting to stop `ora.hnzdb2.vip` on member `hnzdb1`
Target set to OFFLINE for `ora.hnzdb1.LISTENER.lsnr`
Attempting to stop `ora.hnzdb1.vip` on member `hnzdb2`
Stop of `ora.hnzdb2.vip` on member `hnzdb1` succeeded.
Stop of `ora.hnzdb1.vip` on member `hnzdb2` succeeded.

[root@hnzdb2 bin]# ./crs_start -all

oracle result cache 结果集缓存的使用

结果集缓存
缓存是一种最常见的在计算机系统用来提高性能的技术.硬件和软件被广泛的使用.oracle数据库也不会例外.例如在缓冲区缓存中缓存数据文件块,在字典缓存中缓存字典信息,在库缓存中缓存游标.在oracle11G中结果集缓存也是可用的.

结果集缓存是如何工作的
oracle数据库引擎提供了三种结果集缓存:
服务器结果集缓存也叫查询结果缓存,是一种服务器端缓存,它用来存储查询的结果集.

pl/sql函数结果集缓存是一种服务器端缓存,它用来存储pl/sql函数返回的结果集.

客户端结果集缓存是一种客户端缓存,用来存储查询结果集.

服务器结果集缓存
服务器结果集缓存是用来避免重复执行查询.简单来说查询第一次执行,它的结果集被存储在共享池中.然后后续执行相同的查询时从结果集缓存中直接提取结果集而不用重新计算.注意这两个查询被认为是相等的.因此能使用相同的结果集.另外如果出现绑定变量,那么它们的值必须相同.这是必须的,因为很明显,绑定变量作为参数输入并传给查询.因此不同的绑定变量值会有不同的结果集.注意结果集缓存是存储在共享池中,对于一个指定的实例所有连接的会话都能共享相同的缓存条目.

下面来举例说明.注意在查询时指定了result_cache提示来启用结果集缓存.第一次执行花了1.04秒.可以看到在执行计划中操作result cache确定了对查询启用了结果集缓存.在执行计划中starts列清楚的说明了所有的操作都至少要被执行一次.执行计划中所有的操作都是必须的因为是第一次执行这个查询.因此结果集缓存还不包含结果集.

SQL> alter session set statistics_level=all;

SQL> SELECT /*+ result_cache */
  2  p.prod_category, c.country_id,
  3  sum(s.quantity_sold) AS quantity_sold,
  4  sum(s.amount_sold) AS amount_sold
  5  FROM sh.sales s, sh.customers c, sh.products p
  6  WHERE s.cust_id = c.cust_id
  7  AND s.prod_id = p.prod_id
  8  GROUP BY p.prod_category, c.country_id
  9  ORDER BY p.prod_category, c.country_id;

已选择81行。

已用时间:  00: 00: 01.04

SQL> select * from table(dbms_xplan.display_cursor(null,null,'all allstats'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

SQL_ID  g9sxqz9qgutu7, child number 0
-------------------------------------
SELECT /*+ result_cache */ p.prod_category, c.country_id,
sum(s.quantity_sold) AS quantity_sold, sum(s.amount_sold) AS
amount_sold FROM sh.sales s, sh.customers c, sh.products p WHERE
s.cust_id = c.cust_id AND s.prod_id = p.prod_id GROUP BY
p.prod_category, c.country_id ORDER BY p.prod_category, c.country_id

Plan hash value: 1866882273

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


PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

| Id  | Operation                 | Name                       | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | Pstart| Pstop | A-Rows |   A-Time   |  OMem |  1Mem |  O/1/M   |

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |                            |      1 |        |       |   985 (100)|          |       |       |     81 |00:00:00.01 |       |       |          |

|   1 |  RESULT CACHE             | cu8pf4s7jn9d05yda1swvwpd7y |      1 |        |       |            |          |       |       |     81 |00:00:00.01 |       |       |          |

|   2 |   SORT GROUP BY           |                            |      1 |     68 |  3808 |   985   (7)| 00:00:12 |       |       |      0 |00:00:00.01 | 73728 | 73728 |          |

|*  3 |    HASH JOIN              |                            |      1 |    968 | 54208 |   984   (7)| 00:00:12 |       |       |      0 |00:00:00.01 |   940K|   940K|          |

|   4 |     VIEW                  | index$_join$_003           |      1 |     72 |  1512 |     3  (34)| 00:00:01 |       |       |      0 |00:00:00.01 |       |       |          |

|*  5 |      HASH JOIN            |                            |      1 |        |       |            |          |       |       |      0 |00:00:00.01 |  1269K|  1269K|          |

|   6 |       INDEX FAST FULL SCAN| PRODUCTS_PK                |      1 |     72 |  1512 |     1   (0)| 00:00:01 |       |       |      0 |00:00:00.01 |       |       |          |

|   7 |       INDEX FAST FULL SCAN| PRODUCTS_PROD_CAT_IX       |      1 |     72 |  1512 |     1   (0)| 00:00:01 |       |       |      0 |00:00:00.01 |       |       |          |

|   8 |     VIEW                  | VW_GBC_9                   |      1 |    968 | 33880 |   981   (7)| 00:00:12 |       |       |      0 |00:00:00.01 |       |       |          |

|   9 |      HASH GROUP BY        |                            |      0 |    968 | 26136 |   981   (7)| 00:00:12 |       |       |      0 |00:00:00.01 |    56M|  4744K|          |

|* 10 |       HASH JOIN           |                            |      1 |    918K|    23M|   941   (3)| 00:00:12 |       |       |      0 |00:00:00.01 |  3056K|  1398K|          |

|  11 |        TABLE ACCESS FULL  | CUSTOMERS                  |      1 |  55500 |   541K|   406   (1)| 00:00:05 |       |       |      0 |00:00:00.01 |       |       |          |

|  12 |        PARTITION RANGE ALL|                            |      1 |    918K|    14M|   530   (3)| 00:00:07 |     1 |    28 |      0 |00:00:00.01 |       |       |          |

|  13 |         TABLE ACCESS FULL | SALES                      |     28 |    918K|    14M|   530   (3)| 00:00:07 |     1 |    28 |      0 |00:00:00.01 |       |       |          |
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

第二次执行只花了0.03秒.在执行计划中starts列显示了所有操作的执行次数.RESULT CACHE被执一次.其它的操作没有被执行.换句话说直接使用了存储在结果集缓存中的结果集.

SQL> SELECT /*+ result_cache */
  2  p.prod_category, c.country_id,
  3  sum(s.quantity_sold) AS quantity_sold,
  4  sum(s.amount_sold) AS amount_sold
  5  FROM sh.sales s, sh.customers c, sh.products p
  6  WHERE s.cust_id = c.cust_id
  7  AND s.prod_id = p.prod_id
  8  GROUP BY p.prod_category, c.country_id
  9  ORDER BY p.prod_category, c.country_id;

已选择81行。

已用时间:  00: 00: 00.03

SQL> select *  from table(dbms_xplan.display_cursor(null,null,'all allstats'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

SQL_ID  g9sxqz9qgutu7, child number 0
-------------------------------------
SELECT /*+ result_cache */ p.prod_category, c.country_id,
sum(s.quantity_sold) AS quantity_sold, sum(s.amount_sold) AS
amount_sold FROM sh.sales s, sh.customers c, sh.products p WHERE
s.cust_id = c.cust_id AND s.prod_id = p.prod_id GROUP BY
p.prod_category, c.country_id ORDER BY p.prod_category, c.country_id

Plan hash value: 1866882273

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


PLAN_TABLE_OUTPUT
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

| Id  | Operation                 | Name                       | Starts | E-Rows |E-Bytes| Cost (%CPU)| E-Time   | Pstart| Pstop | A-Rows |   A-Time   |  OMem |  1Mem |  O/1/M   |

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT          |                            |      1 |        |       |   985 (100)|          |       |       |    162 |00:00:00.01 |       |       |          |

|   1 |  RESULT CACHE             | cu8pf4s7jn9d05yda1swvwpd7y |      1 |        |       |            |          |       |       |    162 |00:00:00.01 |       |       |          |

|   2 |   SORT GROUP BY           |                            |      0 |     68 |  3808 |   985   (7)| 00:00:12 |       |       |      0 |00:00:00.01 | 73728 | 73728 |          |

|*  3 |    HASH JOIN              |                            |      0 |    968 | 54208 |   984   (7)| 00:00:12 |       |       |      0 |00:00:00.01 |   940K|   940K|          |

|   4 |     VIEW                  | index$_join$_003           |      0 |     72 |  1512 |     3  (34)| 00:00:01 |       |       |      0 |00:00:00.01 |       |       |          |

|*  5 |      HASH JOIN            |                            |      0 |        |       |            |          |       |       |      0 |00:00:00.01 |  1269K|  1269K|          |

|   6 |       INDEX FAST FULL SCAN| PRODUCTS_PK                |      0 |     72 |  1512 |     1   (0)| 00:00:01 |       |       |      0 |00:00:00.01 |       |       |          |

|   7 |       INDEX FAST FULL SCAN| PRODUCTS_PROD_CAT_IX       |      0 |     72 |  1512 |     1   (0)| 00:00:01 |       |       |      0 |00:00:00.01 |       |       |          |

|   8 |     VIEW                  | VW_GBC_9                   |      0 |    968 | 33880 |   981   (7)| 00:00:12 |      |        |      0 |00:00:00.01 |       |       |          |

|   9 |      HASH GROUP BY        |                            |      0 |    968 | 26136 |   981   (7)| 00:00:12 |      |        |      0 |00:00:00.01 |    56M|  4744K|          |

|* 10 |       HASH JOIN           |                            |      0 |    918K|    23M|   941   (3)| 00:00:12 |      |        |      0 |00:00:00.01 |  3056K|  1398K|          |

|  11 |        TABLE ACCESS FULL  | CUSTOMERS                  |      0 |  55500 |   541K|   406   (1)| 00:00:05 |      |        |      0 |00:00:00.01 |       |       |          |

|  12 |        PARTITION RANGE ALL|                            |      0 |    918K|    14M|   530   (3)| 00:00:07 |    1 |     28 |      0 |00:00:00.01 |       |       |          |

|  13 |         TABLE ACCESS FULL | SALES                      |      0 |    918K|    14M|   530   (3)| 00:00:07 |    1 |     28 |      0 |00:00:00.01 |       |       |          |

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

在执行计划中要注意一个名字缓存ID它与操作result cache相关.如果知道这个缓存ID,可以查询v$resul_cache_objects视图来显示关于缓存数据的信息.下面的查询显示缓存结果集已经被发布(换句话说可以使用).视图信息会显示缓存结果集是何进创建的,创建它花了多长时间,有多少行记录被存储和它被引用了多少次.其它提供关于缓存结果集信息的视图还有v$result_cache_dependency,v$result_cache_memory和v$result_chace_statistics.

SQL> SELECT status, creation_timestamp, build_time, row_count, scan_count
  2  FROM v$result_cache_objects
  3  WHERE cache_id = 'cu8pf4s7jn9d05yda1swvwpd7y';
 
STATUS    CREATION_TIMESTAMP BUILD_TIME  ROW_COUNT SCAN_COUNT
--------- ------------------ ---------- ---------- ----------
Published 2013-7-5 9:21:26           94         81          3

为了保证结果的一致性(也就是说结果集是相同的就是看它是来自缓存还是来自数据库计算).每当查询中所引用的对象发生改变,那么依赖于这些表的缓存条目将会无效.事实情况就是这样,即使真正的改变没有发生.例如.甚至一个select * for update语句后面紧跟着一个commit提交也会导致依赖于select表的缓存条目变为无效.

有一些动态初始化参数可以控制服务器结果集缓存:
result_cache_max_size:以byte为单位来指定在共享池中用于结果集缓存的内存总量.如果它被设置为0,这个功能将会被禁用.缺省值是一个比0大的值,它是从共享池中派生出来的.内存分配是动态的,因此初始化参数只能指定它的上限.可以使用下面的查询来显示当前分配的内存大小:

SQL> SELECT name, sum(bytes) FROM v$sgastat WHERE name LIKE 'Result Cache%' GROUP BY rollup(name);
 
NAME                       SUM(BYTES)
-------------------------- ----------
Result Cache                   161680
Result Cache: Bloom Fltr         2048
Result Cache: Cache Mgr           208
Result Cache: Memory Mgr          200
Result Cache: State Objs         2896
                               167032
下面的语句显示了resulr_cache_max_size的值为15424K
SQL> show parameter result
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
client_result_cache_lag              big integer 3000
client_result_cache_size             big integer 0
result_cache_max_result              integer     5
result_cache_max_size                big integer 15424K
result_cache_mode                    string      MANUAL
result_cache_remote_expiration       integer     0

result_cache_mode:指定在什么情况下使用结果集缓存.可以将它设置为manual手动这是缺省值或者设置为force.当使用manual时结果集缓存只有当指定result_cache提示时才使用.当使用force时那么会对所有没有使用no_result_cache提示的所有查询使用结果集缓存.因为在大多数情况下我们只会对少量的查询使用结果集缓存,所以让该参数设置为它的缺省值manual当只需要使用时在查询中指定result_cache来启用它.

result_cache_max_result:指定单一个结果集缓存的占用result_cache_max_size服务器结果集缓存大小的百分比.它的缺省值是5.它的值可以是0到100的任何一个数字.超过这个限制的结果集缓存将是无效的.

result_cache_remote_expiration:指定基于远程对象的结果集的有效时间(以分钟为单位).这是必须的,因当远程对象已经发生改变了基于这些远程对象的失效的结果集缓存不能被执行.当经过初始化参数所指定的有效时间后这些结果集才变为无效.这个参数的缺省值是0,意味着基于远程对象的查询缓存功能被禁用.

初始化参数result_cache_max_size和result_cache_max_result只能在系统级别进行修改.其它的result_cache_mode
和result_cache_remote_expiration能在会话级别进行修改.

注意:将result_cache_remote_expiration参数设置为一个比0大的数字会导致过时的结果集缓存存在.因此只有你真正地理解这样做的影响后才能将它设置为比0大.

使用结果集缓存有几个很明显的限制:
查询使用非确定性的函数,序列和临时表是结果集不会被缓存

查询违反了读一致性时结果集将不会被缓存.例如,当通过会话创建结果集时所引用的表正经历大量的事务这样的结果
集不会被缓存.

引用数据字典视图的查询的结果集不会被缓存.

dbms_result_cache包
可以使用dbms_result_cache包来管理结果集缓存,它提供了以下程序来进行管理:
bypass:在会话或系统级别临时禁用或启用结果集缓存.

flush:从结果集缓存中清空所有对象

invalidate:让依赖于指定的数据库对象的所有结果集缓存变为无效

invalidate_object:让单个结果集缓存条目变为无效

memory_report:生成一个内存使用情况报告

status:显示结果集缓存的状态.

例如:

SQL> select dbms_result_cache.status from dual;
 
STATUS
--------------------------------------------------------------------------------
ENABLED

pl/sql函数结果集缓存
pl/sql函数结果集缓存类似于服务器结果集缓存,但是它支持pl/sql函数,还和服务器结果集缓存共享相同的内存结构.它的目的是在结果集缓存中存储函数返回的值(仅仅只有函数返回的值,过程返回的值不能被缓存).明显地使用不同输入值的函数是以不同的缓存条目被缓存在结果集缓存中的.在下面的例子中显示了一个启用结果集缓存的函数.为了启用pl/sql函数结果集缓存,要指定result_cache子句.还可以指定relies_on子句来指定函数依赖于哪个表来返回结果.

SQL> CREATE OR REPLACE FUNCTION f
  2    RETURN NUMBER
  3    RESULT_CACHE RELIES_ON(t) IS
  4    l_ret NUMBER;
  5  BEGIN
  6    SELECT count(t.indi_id) INTO l_ret FROM impl_chenzhou.bs_insured t;
  7    RETURN l_ret;
  8  END;
  9  /
 
Function created

在下面的例子中将会调用函数2480625次f不使用结果集缓存(通过使用bypass过程来临时禁用结果集缓存)共用了4.69秒

SQL> execute dbms_result_cache.bypass(bypass_mode => TRUE, session => TRUE);

SQL> select count(f) from impl_chenzhou.bs_insured t;

  COUNT(F)
----------
   2480625

Elapsed: 00:00:04.69

在下面的例子中将会调用函数2480625次f使用结果集缓存共用了0.32秒
SQL> execute dbms_result_cache.bypass(bypass_mode => FALSE, session => TRUE)

SQL> select count(f) from impl_chenzhou.bs_insured t;

  COUNT(F)
----------
   2480625

Elapsed: 00:00:00.32

注意:如果relies_on子句没有指定或者包含错误信息,当函数依赖的对象发生修改结果集缓存不会变为无效.因此可能会出现过时的结果集.

使用pl/sql函数结果集有一些限制,下面的函数不能使用结果集缓存:
使用out和(或者)in out参数的函数

定义了使用调用者权限的函数

管道化表函数

从匿名块调用函数

使用in参数或者返回值有以下类型的函数:LOB,REF CURSOR,对象和记录

客户端结果缓存集
客户端结果集缓存是用客户端缓存来存查询的结果集.它的目的和工作类似于服务器端结果集缓存.与服务器端的实现进行比较有两个重要的不同.第一它避免了需要在客户端/服务器之间来回地执行sql语句.这是一大优点.第二结果集的失效是基于一种轮询机制,因此一致性不能保证这是一大缺点.

为了实现这种轮询客户端必须定期地执行数据库调用来检查数据库引擎看看它的结果集缓存是否已经变为无效了.为了轮询的开销最小化,每一次客户端由于其它原因执行一个数据库调用时它将检查结果集缓存的有效性.这样,就可以避免掉那些用于对缓存的结果集进行失效操作的数据库调用.使客户端能持续地执行”正常的”数据库调用.

尽管它是客户端缓存但还是要在服务器端来启用它.下面有些参数来控制客户端缓存:
client_result_cache_size:指定每一个客户端进程能使用的结果集缓存的最大内存大小以byte为单位.如果它设置为0,这也是缺省值那么这个功能将禁用.这个初始化参数是静态的只能在实例级别进行修改.修改完后必须对实例进行重启才会生效.

client_result_cache_lag:指定两次数据库调用之间的最大时间间隔以毫秒为单位.也就是说它指定无效的结果集能在客户端缓存中保留多长的时间.缺省值是3000.这个初始化参数是静态的只能在实例级别进行修改.修改完后必须对实例进行重启才会生效.

oci_result_cache_max_size:会覆盖服务器端设置的初始化参数client_result_cache-size.然而要注意是如果在服务器禁用了结果集缓存这个参数将不能激活它.

oci_result_cache_max_rset_size:指定单个结果集缓存最多能使用的内存大小以byte为单位.

oci_result_cache_max_rset_rows:指定单个结果集缓存最多能存储的返回行数.

何时使用
当你遇到由程序反复执行相同的操作所导致的性能问题时,你要么减少执行的频率要么减少操作的响应时间.理想的情况时两者都做.然而有时(例如由于应用程序代码不能修改)你只能实现后者.为了减少响应时间可以使用各种优化技术,如果还不能满足要求那就只能使用高级优化技术了象结果集缓存.基本上要有效使用结果集缓存要满足两个条件.第一相对于修改数据来说同样的数据查询的更频繁.第二要有足够的内存来存储结果集.

在大多数情况下不能对所有的查询都启用结果集缓存.事实上在大多数时候只有特定的查询才能从结果集缓存中获益而对于其它的情况来说,结果集缓存只不过是一种纯粹的额外的开销说不定还会使用缓存过载.还要记住的是服务器端缓存是对所有会话共享的,因此它们的访问是要同步的(它们也会象所有的共享资源一样变成一个串处理点).因此只有在真正查询请求它们的时候才会结果集缓存.也就是说只当真正需要使用它们来提高性能时才在查询中指定result_cache提示.

服务器端结果集缓存无法完全避免执行一个查询的额外开销.这意味着如果一个查询在不使用结果集缓存的情况下对于每一行执行了最少的逻辑读(不是物理读)了,那么使用结果集缓存性能不会提高很多.请记住高速缓存和结果集缓存都是存储在相同的共享内存中的.

pl/sql函数结果集缓存对于经常在sql语句中使用的函数来说特别有用.事实上常遇到这样的情况被处理或被返回的每一行都会调用一次这个函数,同时输入的参数也只有几个不同的值,然而这个函数经常从pl/sql中被频繁地调用它能使用结果集缓存.

因为一致性的问题客户端缓存只应该用在只读表或主要是读的表上.

最后要注意的是可以同进使用服务器和客户端结果集缓存.然而对于客户端执行的查询不能选择只使用服务器结果集缓存而不使用客户端结果集缓存.也就是说两种结果集缓存都会被使用.

通过dbms_mviewdbms_mview.explain_rewrite检测为什么不使用查询重写的问题

先创建一个物化视图使用最简单的语法来创建

create materialized view  sales_customers_products as
SELECT p.prod_category, c.country_id,
sum(s.quantity_sold) AS quantity_sold,
sum(s.amount_sold) AS amount_sold
FROM sh.sales s, sh.customers c, sh.products p
WHERE s.cust_id = c.cust_id
AND s.prod_id = p.prod_id
and c.country_id='Ruddy'
GROUP BY p.prod_category, c.country_id
ORDER BY p.prod_category, c.country_id;
/

创建rewrite_table表
SQL> @d:/oracle/product/10.2.0/db_1/rdbms/admin/utlxrw.sql

Table created

检查查询重写的参数设置
SQL> show parameter query

NAME TYPE VALUE
———————————— ———– —————–
query_rewrite_enabled string TRUE
query_rewrite_integrity string enforced

SQL> DECLARE
  2   l_query CLOB := 'SELECT p.prod_category, c.country_id,
  3  sum(s.quantity_sold) AS quantity_sold,
  4  sum(s.amount_sold) AS amount_sold
  5  FROM sh.sales s, sh.customers c, sh.products p
  6  WHERE s.cust_id = c.cust_id
  7  AND s.prod_id = p.prod_id
  8  GROUP BY p.prod_category, c.country_id
  9  ORDER BY p.prod_category, c.country_id';
 10   BEGIN
 11   dbms_mview.explain_rewrite(
 12   query => l_query,
 13   mv => 'sales_customers_products',
 14   statement_id => '42'
 15   );
 16  END;
 17  /

PL/SQL procedure successfully completed;

SQL> select message from rewrite_table;

MESSAGE
-------------------------------------------------------------------
QSM-01150: 未重写查询
QSM-01052: 表的引用完整性约束条件 PRODUCTS 在 ENFORCED 完整性模式中无效
QSM-01026: 对 SALES_CUSTOMERS_PRODUCTS 禁用查询重写


/
SQL>drop materialized view  sales_customers_products ;

下面在创建物化视图时启用查询重写
create materialized view  sales_customers_products
ENABLE QUERY REWRITE
as
SELECT p.prod_category, c.country_id,
sum(s.quantity_sold) AS quantity_sold,
sum(s.amount_sold) AS amount_sold
FROM sh.sales s, sh.customers c, sh.products p
WHERE s.cust_id = c.cust_id
AND s.prod_id = p.prod_id
GROUP BY p.prod_category, c.country_id
ORDER BY p.prod_category, c.country_id;


SQL> DECLARE
  2   l_query CLOB := 'SELECT p.prod_category, c.country_id,
  3  sum(s.quantity_sold) AS quantity_sold,
  4  sum(s.amount_sold) AS amount_sold
  5  FROM sh.sales s, sh.customers c, sh.products p
  6  WHERE s.cust_id = c.cust_id
  7  AND s.prod_id = p.prod_id
  8  GROUP BY p.prod_category, c.country_id
  9  ORDER BY p.prod_category, c.country_id';
 10   BEGIN
 11   dbms_mview.explain_rewrite(
 12   query => l_query,
 13   mv => 'sales_customers_products',
 14   statement_id => '43'
 15   );
 16  END;
 17  /

PL/SQL procedure successfully completed

SQL>select message from rewrite_table where statement_id='43';

MESSAGE
-------------------------------------------------------------------
QSM-01151: 已重写查询
QSM-01209: 已通过实体化视图 SALES_CUSTOMERS_PRODUCTS, 采用文本匹配算法进行了查询重写
/

		

如何能在执行计划中看到Starts

SQL> explain plan for
  2
  2  SELECT *
  3  FROM scott.emp
  4  WHERE NOT EXISTS (SELECT 0
  5  FROM scott.dept
  6  WHERE dept.dname = 'SALES' AND dept.deptno = emp.deptno)
  7  AND NOT EXISTS (SELECT 0
  8  FROM scott.bonus
  9  WHERE bonus.ename = emp.ename);

Explained

SQL> select * from table(dbms_xplan.display);

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 734347697
-----------------------------------------------------------------------------
| Id  | Operation           | Name  | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------
|   0 | SELECT STATEMENT    |       |     9 |   522 |     9  (12)| 00:00:01 |
|*  1 |  HASH JOIN ANTI     |       |     9 |   522 |     9  (12)| 00:00:01 |
|*  2 |   HASH JOIN ANTI    |       |     9 |   459 |     7  (15)| 00:00:01 |
|   3 |    TABLE ACCESS FULL| EMP   |    14 |   532 |     3   (0)| 00:00:01 |
|*  4 |    TABLE ACCESS FULL| DEPT  |     1 |    13 |     3   (0)| 00:00:01 |
|   5 |   TABLE ACCESS FULL | BONUS |     1 |     7 |     2   (0)| 00:00:01 |
-----------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   1 - access("BONUS"."ENAME"="EMP"."ENAME")
   2 - access("DEPT"."DEPTNO"="EMP"."DEPTNO")
   4 - filter("DEPT"."DNAME"='SALES')

使用advanced也不显示
SQL> explain plan for select * from scott.emp;

Explained

SQL> SELECT * FROM table(dbms_xplan.display(NULL,NULL,'advanced'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 3956160932
--------------------------------------------------------------------------
| Id  | Operation         | Name | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------
|   0 | SELECT STATEMENT  |      |    14 |   532 |     3   (0)| 00:00:01 |
|   1 |  TABLE ACCESS FULL| EMP  |    14 |   532 |     3   (0)| 00:00:01 |
--------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1 / EMP@SEL$1
Outline Data
-------------
  /*+
      BEGIN_OUTLINE_DATA
      FULL(@"SEL$1" "EMP"@"SEL$1")

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
      OUTLINE_LEAF(@"SEL$1")
      ALL_ROWS
      DB_VERSION('11.2.0.1')
      OPTIMIZER_FEATURES_ENABLE('11.2.0.1')
      IGNORE_OPTIM_EMBEDDED_HINTS
      END_OUTLINE_DATA
  */
Column Projection Information (identified by operation id):
-----------------------------------------------------------
   1 - "EMP"."EMPNO"[NUMBER,22], "EMP"."ENAME"[VARCHAR2,10],
       "EMP"."JOB"[VARCHAR2,9], "EMP"."MGR"[NUMBER,22],
       "EMP"."HIREDATE"[DATE,7], "EMP"."SAL"[NUMBER,22],
       "EMP"."COMM"[NUMBER,22], "EMP"."DEPTNO"[NUMBER,22]

要得到starts要么在SQLPLUS中将statistics_level设置all,并真实执行sql语句
因为display_cursor是从动态性能视图v$session,v$sql,v$sql_plan和v$sql_plan_statistics_all中获取直接计划的使用explain plan for不行
因为它只生成执行计划并没真正地执行而且执行计划是存储在plan_table表中
并使用display来显示

要么在要执行的sql语句中statistics_level 仍然保留’typical’ ,
然后用这个HINT/*+gather_plan_statistics */
SQL> alter session set statistics_level=all;

会话已更改。

SQL> select count(*) from scott.emp;

COUNT(*)
———-
14

SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

SQL_ID  abj9tmfcs15bm, child number 0
-------------------------------------
select count(*) from scott.emp

Plan hash value: 2937609675

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

| Id  | Operation        | Name   | Starts | E-Rows | A-Rows |   A-Time   | Buffers |

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

|   0 | SELECT STATEMENT |        |      1 |        |      1 |00:00:00.01 |  1      |

|   1 |  SORT AGGREGATE  |        |      1 |      1 |      1 |00:00:00.01 |  1      |

|   2 |   INDEX FULL SCAN| PK_EMP |      1 |     14 |     14 |00:00:00.01 |  1      |

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

已选择14行。

SQL>

SQL> alter session set statistics_level='typical';

会话已更改。

SQL> select /*+gather_plan_statistics */ count(*) from scott.emp;

  COUNT(*)
----------
        14

SQL> select * from table(dbms_xplan.display_cursor(null,null,'allstats'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

SQL_ID  2vku9s3sb55tz, child number 0
-------------------------------------
select /*+gather_plan_statistics */ count(*) from scott.emp

Plan hash value: 2937609675

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

| Id  | Operation        | Name   | Starts | E-Rows | A-Rows |   A-Time   | Buffers |

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------

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

|   0 | SELECT STATEMENT |        |      1 |        |      1 |00:00:00.01 |  1 |

|   1 |  SORT AGGREGATE  |        |      1 |      1 |      1 |00:00:00.01 |  1 |

|   2 |   INDEX FULL SCAN| PK_EMP |      1 |     14 |     14 |00:00:00.01 |  1 |

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

已选择14行。

使用dbms_xplan包来获得sql语句的执行计划

dbms_xplan包
dbms_xplan包可以用来显示存储在三个不同地方的执行计划:plan_table表,库缓存和awr.下面将会介绍dbms_xplan包中可用的函数.

输出
这里主要解释通过dbms_xplan包中函数返回的信息.下面是dbms_xplan.display_cursor输出信息的第一部分
SQL_ID 9nrttza3c2x2u, child number 0
————————————-
select * from scott.emp where empno=7788
Plan hash value: 2949544139

在这一部信息中指出与sql语句相关的以下信息:
sql_id识别父游标.这个信息只有当使用display_cursor和display_awr时才有

child number与sql_id一起用来识别子游标.这种信息只有当使用display_cursor时才有

sql语句的文本只有当使用display_cursor和display_awr函数时才有

第二部分显示的是一个表中的执行计划哈希值和执行计划本身:

Plan hash value: 2949544139
--------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |       |       |     1 (100)|
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |    38 |     1   (0)| 00:0
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     0   (0)|
--------------------------------------------------------------------------------

在这个表中,评估和每一操作的执行统计都被提供.这个表中的列数直接取决于可用信息的数量.例如,关于分区的信息,并行处理或执行统计.由于这个原因相同的函数和完全相同的参数可能产生两组不同的输出结果.在这种情况下,你将看一下通常可用的列:
包含执行计划的表中的列如下:
列 描述
id 在执行计划中标识每一个操作.如果在数字的前面有一 个星号.它意味着这一行是谓词信息
operation 被执行操作.也叫做行资源操作
name 被执行操作的对象

查询优化器评估
rows(e-rows) 评估操作所返回的行数
bytes(e-bytes) 评估操作所返回的数据量
TempSpc 评估操作使用的临时表空间大小
cost(%cpu) 评估操作的成本.在括号中指出了cpu成本的百分比.这个值是通过执行计划来计算的.
换句话说,父操作的成本包含了子操作的成本
Time 评估执行这个操作需要的时间(HH:MM:SS)

分区信息
pstart 第一个分区被访问的次数.如果在解析时未知,可以设置为key,key(I),key(mc),key(or)或
kye(sq)

pstop 最后一个分区被访问的次数.如果在解析时未知,可以设置为key,key(I),key(mc),key(or)
或kye(sq)

并行和分布式处理
inst 对于分布式处理,操作使用的数据库链路名称
tq 对于并行处理,在两个并行从属进程之间通信的表队列
in-out 并行或分布式操作之间的关系
pqdistrib 对于并行处理,由生产者使用分布处理将数据返回给消费者

运行时统计
starts 一个特定操作被执行的次数
a-rows 操作返回的实际行数
a-time 操作实际花费的时间(HH:MM:SS)

I/O统计
buffers 在执行时执行的逻辑读取的次数
reads 在执行时执行的物理读取的次数
writes 在执行时执行的物理写的次数

内存利用统计
0Mem 评估一个最优的执行所需要的内存总量
1Mem 评估一次通过执行所需要的内存总量
0/1/m 在最优,一次通过和多次通过模型下被执行的次数

used_mem 在最后一次执行操作时使用的内存量
used_tmp 在最后一次执行操作时使用的临时表空间量.它是以字节为单位

max_tmp 操作中使用临时表空间的最大量
下面的部分显示的是查询块的名字和对象别名:
Query Block Name / Object Alias (identified by operation id):
————————————————————-
1 – SEL$1 / EMP@SEL$1
2 – SEL$1 / EMP@SEL$1
对于执行计划中的每一个操作都会有一个查询与之相关

第四部分只在oracle10gr2中可用,下面显示是在oracle11G中的输出信息.它显示了为了强制特定的执行计划可以设置提示
这种设置提示叫做计划概要

Outline Data
-------------
/*+

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
BEGIN_OUTLINE_DATA
INDEX_RS_ASC(@"SEL$1" "EMP"@"SEL$1" ("EMP"."EMPNO"))
OUTLINE_LEAF(@"SEL$1")
ALL_ROWS
DB_VERSION('11.2.0.1')
OPTIMIZER_FEATURES_ENABLE('11.2.0.1')
IGNORE_OPTIM_EMBEDDED_HINTS
END_OUTLINE_DATA
*/

下面的部分显示谓词信息
Predicate Information (identified by operation id):
—————————————————
2 – access(“EMPNO”=7788)
Column Projection Information (identified by operation id):
———————————————————–
1 – “EMPNO”[NUMBER,22], “EMP”.”ENAME”[VARCHAR2,10],
“EMP”.”JOB”[VARCHAR2,9], “EMP”.”MGR”[NUMBER,22], “EMP”.”HIREDATE”[DATE,7]
“EMP”.”SAL”[NUMBER,22], “EMP”.”COMM”[NUMBER,22], “EMP”.”DEPTNO”[NUMBER,22

PLAN_TABLE_OUTPUT
——————————————————————————–
2 – “EMP”.ROWID[ROWID,10], “EMPNO”[NUMBER,22]

display函数
display函数返回存储在plan_table表中的执行计划.它返回的是一个实例集合dbms_xplan_type_table.
集合中的元素是实例对象类型dbms_xplan_type.唯一属性的对象类型名叫plan_table_output是varchar2类型
这个函数有以下输出参数:
table_name:指定plan_table表名.缺省值是plan_table如果指定为null将使用缺省值

statement_id:指定sql语句名字是一个可选参数.当执行explain plan语句时.缺省值是null,如果使用缺省值.
那么最近插入到plan_table表中的执行计划会被显示(提供了filter_reds参数但没有指定)

format:指定什么信息被提供在输出信息中.这里有一些原始值(basic,typical,serial,all和advanced).为了
更好的控制有一些额外的修饰符(alias,bytes,cost,note,outline,parallel,partition,peeked_binds,
predicate,projection,remote和rows)可以被加到参数中.如果信息需要被添加可以通过字符+做为可选的修饰符
例如(basic+predicate).如果信息要被删除可以通过字符-做为可选的修饰符(例如,typical-bytes).多个修饰符
可以同时被指定例如(typical+alias-bytes-cost).缺省值是typical,原始值advanced和可用的修饰符只在
oracle10gr2中有.

filter_preds:当查询plan_table表时应用一个限制.这个限制是基于plan table表中某一列的一个常规sql谓词(
例如statement_id=’test’).缺省值是null.如果使用缺省值,那么最近插入plan_table表中的执行计划将会被显示.
这个参数只能在oracle10gr2中使用.

为了使用display函数,调用都只需要有dbms_xplan包的execute权限和plan_table表的select权限

格式参数的原始值表
值 描述
basic 只会显示最小量的信息,基本只有操作和被执行的对象的信息

typical 显示最相关的信息,除以别名,计划概要和列投影信息以外的信息

serial 象typical只有并行处理的信息不显示

all 显示了除了计划概要以外的所有信息

advanced 显示所有可用的信息

236

格式参数可以使用的修饰符
值 描述
alias 控制显示的查询块名字和对象别名
bytes 控制在执行计划表中列bytes的显示
cost 控制在执行计划表中列cost的显示
note 控制注释的显示
outline 控制概要的显示
parallel 控制并行处理信息的显示特别是执行计划表中的TQ,IN-OUT和PQ Distrib列的显示
partition 控制分区信息的显示特别是执行计划表中的Pstart和Pstop列的显示
peeked_binds 控制窥视绑定变量的显示
predicate 控制过滤和访问谓词的显示
projection 控制列投影信息的显示
remote 控制远程执行sql语句的显示
rows 控制执行计划表中的rows列的显示

下面的查询将显示使用不同的格式参数值basic,typical和advanced来显示执行计划.

SQL> explain plan for select * from scott.emp where empno=7788;

Explained

SQL> SELECT * FROM table(dbms_xplan.display(NULL,NULL,'basic'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2949544139
----------------------------------------------
| Id  | Operation                   | Name   |
----------------------------------------------
|   0 | SELECT STATEMENT            |        |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |
|   2 |   INDEX UNIQUE SCAN         | PK_EMP |
----------------------------------------------

9 rows selected

SQL> SELECT * FROM table(dbms_xplan.display(NULL,NULL,'typical'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2949544139
--------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |     1 |    38 |     1   (0)| 00:0
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |    38 |     1   (0)| 00:0
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     0   (0)| 00:0
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("EMPNO"=7788)

14 rows selected

SQL> SELECT * FROM table(dbms_xplan.display(NULL,NULL,'advanced'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2949544139
--------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Rows  | Bytes | Cost (%CPU)| Time
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |     1 |    38 |     1   (0)| 00:0
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |    38 |     1   (0)| 00:0
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |       |     0   (0)| 00:0
--------------------------------------------------------------------------------
Query Block Name / Object Alias (identified by operation id):
-------------------------------------------------------------
   1 - SEL$1 / EMP@SEL$1
   2 - SEL$1 / EMP@SEL$1
Outline Data
-------------
  /*+

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
      BEGIN_OUTLINE_DATA
      INDEX_RS_ASC(@"SEL$1" "EMP"@"SEL$1" ("EMP"."EMPNO"))
      OUTLINE_LEAF(@"SEL$1")
      ALL_ROWS
      DB_VERSION('11.2.0.1')
      OPTIMIZER_FEATURES_ENABLE('11.2.0.1')
      IGNORE_OPTIM_EMBEDDED_HINTS
      END_OUTLINE_DATA
  */
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("EMPNO"=7788)
Column Projection Information (identified by operation id):
-----------------------------------------------------------
   1 - "EMPNO"[NUMBER,22], "EMP"."ENAME"[VARCHAR2,10],
       "EMP"."JOB"[VARCHAR2,9], "EMP"."MGR"[NUMBER,22], "EMP"."HIREDATE"[DATE,7]
       "EMP"."SAL"[NUMBER,22], "EMP"."COMM"[NUMBER,22], "EMP"."DEPTNO"[NUMBER,22

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
   2 - "EMP".ROWID[ROWID,10], "EMPNO"[NUMBER,22]

42 rows selected

下面的查询将显示使用格式化参数basic和typical并使用修饰符来增加或删除所要输出的信息.

SQL> SELECT * FROM table(dbms_xplan.display(NULL,NULL,'basic +predicate',NULL));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2949544139
----------------------------------------------
| Id  | Operation                   | Name   |
----------------------------------------------
|   0 | SELECT STATEMENT            |        |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |
----------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("EMPNO"=7788)

14 rows selected

SQL>
SQL> SELECT * FROM table(dbms_xplan.display(NULL,NULL,'typical -bytes -note',NULL));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
Plan hash value: 2949544139
------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Rows  | Cost (%CPU)| Time     |
------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |     1 |     1   (0)| 00:00:01 |
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |     1 |     1   (0)| 00:00:01 |
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |     1 |     0   (0)| 00:00:01 |
------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("EMPNO"=7788)

14 rows selected

display_cursor函数
display_cursor函数用来显示存储在库缓存中的执行计划.在oracle10g中可以使用,和display一样它返回也是实例集合
dbms_xplan_type_table.这个函数有以下输入参数:
sql_id:指定要被返回的执行计划的父游标.缺省值是null,如果使用缺省值会显示当前会话最后一次执行的sql语句的
执行计划

cursor_child_no:指定子游标号与sql_id一起用来识别被返回的执行计划的子游标.缺省值是0,如果指定为null,那么通过
sql_id找到的父游标的所有子游标

format:指定哪些信息被显示.这个参数与display的格式化参数一样.如果执行统计可用(换句话说,如查初始化参数
statistics_level设置为all或在sql语句中指定gather_plan_statistics提示),那么也支持修饰符.它的缺省值为
typical

为了使用display_cursor函数,调用都要对以下动态性能视图v$session,v$sql,v$sql_plan和v$sql_plan_statistics_all
有select权限.而select_catalog_role角色和select any dictionary系统权限提供了这些权限

格式化可以使用的修饰符
值 描述
allstats* 这是一个对于iostats,memstats的一个快捷方式
iostats* 控制I/O统计的显示
last* 默认是所有执行的累积统计被显示如果这个值被指定只有最后的执行统计被显示
memstats* 控制PGA相关统计的显示
runstats_last 和iostats last一样,它只能在oracle10gr1中使用
runstats_tot 和iostats一样,只能在oracle10gr1中使用

下面的例子显示在查询语句中使用gather_plan_statistics来生成执行计划.display_cursor函数针显示最后执行的
I/O统计.注意这里只会显示逻辑读取操作(buffers)因为这里没有物理读或写:

SQL> select /*+ gather_plan_statistics */ * from scott.emp where empno=7788;

EMPNO ENAME      JOB         MGR HIREDATE          SAL      COMM DEPTNO
----- ---------- --------- ----- ----------- --------- --------- ------
 7788 SCOTT      ANALYST    7566 1987-4-19     3000.00               20

SQL> select a.SQL_TEXT,a.SQL_ID from v$sqlarea a where a.SQL_TEXT
  2  like '% select /*+ gather_plan_statistics */ * from scott.emp where empno=7788 %' and a.sql_text not like  '%v$sqlarea%'
  3  ;

SQL_TEXT                                                                         SQL_ID
-------------------------------------------------------------------------------- -------------
 select /*+ gather_plan_statistics */ * from scott.emp where empno=7788          dzbmswjhdhk8t




SQL> SELECT * FROM table(dbms_xplan.display_cursor('dzbmswjhdhk8t',0, 'iostats last'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID  dzbmswjhdhk8t, child number 0
-------------------------------------
 select /*+ gather_plan_statistics */ * from scott.emp where empno=7788
Plan hash value: 2949544139
--------------------------------------------------------------------------------
| Id  | Operation                   | Name   | Starts | E-Rows | A-Rows |   A-Ti
--------------------------------------------------------------------------------
|   0 | SELECT STATEMENT            |        |      1 |        |      1 |00:00:0
|   1 |  TABLE ACCESS BY INDEX ROWID| EMP    |      1 |      1 |      1 |00:00:0
|*  2 |   INDEX UNIQUE SCAN         | PK_EMP |      1 |      1 |      1 |00:00:0
--------------------------------------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
   2 - access("EMPNO"=7788)

19 rows selected

display_awr函数
这个函数返回存储在awr中的执行计划.在oracle10g中可以使用.和display函数一样,它返回的也是一个实例集合
dbms_xplan_type_table.这个函数有以下输入参数:
sql_id:指定要被返回执行计划的父游标.这个参数没有缺省值

plan_hash_value:指定要被返回执行计划的哈希值.缺省值是null.如果使用缺省值,与通过sql_id标识的父游标相关的
所有执行计划都会被返回

db_id:指定要返回哪个数据库的执行计划,这个参数的缺省值是null,如果使用缺省值就代表是当前数据库

format:指定哪些信息会被显示.与display的格式化参数相同,缺省值是typical

为了能使用display_awr函数,调用者至少要对以下视图dba_hist_sql_plan和dbs_hist_sqltext有select权限.
如果db_id参数没有指定,那么对v$database视图要有select权限.select_catalog_role角色提供了这些权限.

当对于一个特定的游标有多个执行计划存在时使用plan_hash_value参数进行查询是有帮助的

SQL> SELECT * FROM table(dbms_xplan.display_awr('4pqx4cy7p7tnp',2657262937,NULL,'basic'));

PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID 4pqx4cy7p7tnp
--------------------
select * from v$sql_plan
Plan hash value: 2657262937
--------------------------------------
| Id  | Operation        | Name      |
--------------------------------------
|   0 | SELECT STATEMENT |           |
|   1 |  FIXED TABLE FULL| X$KQLFXPL |
--------------------------------------

13 rows selected

有很多情况导致一个游标有多个执行计划.比如象增加了一个索引或都数据发生变化(对象统计改变).基本上查询优化器的工作环境随时发生变化所以可能会生成不同的执行计划.因此当一个sql语句执行比较长的时间又没有报错你对这个语句的性能产生怀疑的时候输出的执行计划的信息对于诊断性能问题是有帮助的.如果在这种情况下,你可以基于输出的信息推断出导致问题的原因.