欢迎光临
我们一直在努力

记一次UNDO块损坏:ORA-01578

Oracle不能启动,报错:
Errors in file /oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_7601.trc  (incident=53018):
ORA-01578: ORACLE data block corrupted (file # 6, block # 208)
ORA-01110: data file 6: ‘/oracle/oradata/ORCL/datafile/o1_mf_undotbs2_9s7tftbj_.dbf’
Incident details in: /oracle/diag/rdbms/orcl/orcl/incident/incdir_53018/orcl_ora_7601_i53018.trc
Incremental checkpoint up to RBA [0x3f.3.0], current log tail at RBA [0x3f.3.0]
Errors in file /oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_7601.trc:
ORA-01578: ORACLE data block corrupted (file # 6, block # 208)
ORA-01110: data file 6: ‘/oracle/oradata/ORCL/datafile/o1_mf_undotbs2_9s7tftbj_.dbf’
Errors in file /oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_7601.trc:
ORA-01578: ORACLE data block corrupted (file # 6, block # 208)
ORA-01110: data file 6: ‘/oracle/oradata/ORCL/datafile/o1_mf_undotbs2_9s7tftbj_.dbf’
Error 1578 happened during db open, shutting down database
USER (ospid: 7601): terminating the instance due to error 1578
Sat Jun 21 15:49:21 2014
Sweep [inc][53018]: completed
Instance terminated by USER, pid = 7601
ORA-1092 signalled during: ALTER DATABASE OPEN…
opiodr aborting process unknown ospid (7601) as a result of ORA-1092
Sat Jun 21 15:49:21 2014
ORA-1092 : opitsk aborting process
原因为UNDO回滚段的一个BLOCK损坏,此时需要将损坏的UNDO段找出来,并通过设置Oracle的隐含参数 _corrupted_rollback_segments启动数据库。
关键的一部是找到UNDO段的段名,在11G中国回滚段命名不再按照10G中的_SYSSMUN$(N=1,2,3,4…)方式命名,在11G中命名方式为:
_SYSSMUN_T$(N=1,2,3,4…,T=一个按创建时间转换的时间戳整数),所以在10G中简单的通过设置
_corrupted_rollback_segments=’_SYSSMU1$’,’_SYSSMU2$’,…’_SYSSMUN$’这种枚举方法就可以启动数据库,但在11G中不行。
所以首先需要找到回滚段名。
怎样找到回滚段名呢?
在另一台相同版本的数据库中执行对bootstrap$的查询,会发现UNDO$的创建SQL:
SQL> select * from bootstrap$ where sql_text like ‘%UNDO%’;
CREATE TABLE UNDO$(“US#” NUMBER NOT NULL,”NAME” VARCHAR2(30) NOT NULL,”USER#” NUMBER NOT NULL,”FILE#” NUMBER NOT NULL,”BLOCK#” NUMBER NOT NULL,”SCNBAS” NUMBER,”SCNWRP” NUMBER,”XACTSQN” NUMBER,”UNDOSQN” NUMBER,”INST#” NUMBER,”STATUS$” NUMBER NOT NULL,”TS#” NUMBER,”UGRP#” NUMBER,”KEEP” NUMBER,”OPTIMAL” NUMBER,”FLAGS” NUMBER,”SPARE1″ NUMBER,”SPARE2″ NUMBER,”SPARE3″ NUMBER,”SPARE4″ VARCHAR2(1000),”SPARE5″ VARCHAR2(1000),”SPARE6″ DATE) PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE (  INITIAL 64K NEXT 1024K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTINCREASE 0 OBJNO 15 EXTENTS (FILE 1 BLOCK 224))
发现UNDO$的段头位于DBA 1,224。
我们可以用BBED查看,

BBED>
BBED>
BBED> set dba 1,224
        DBA             0x004000e0 (4194528 1,224)

BBED> map
 File: /oracle/oradata/ORCL/datafile/o1_mf_system_9rpzgh24_.dbf (1)
 Block: 224                                   Dba:0x004000e0
————————————————————
 Unlimited Data Segment Header

 struct kcbh, 20 bytes                      @0       

 struct ktech, 72 bytes                     @20      

 struct ktemh, 16 bytes                     @92      

 struct ktetb[1], 8 bytes                   @108     

 struct ktshc, 8 bytes                      @4148    

 struct ktsfs_seg[1], 20 bytes              @4156    

 struct ktsfs_txn[16], 320 bytes            @4176    

 ub4 tailchk                                @8188    

可以看到dba 1,224是一个段头,我们可以向下一个block,
BBED> set block +1
        BLOCK#          225

BBED> x /*rnc
就可以打印出所有的UNDO段名:
rowdata[6624]                               @7967    
————-
flag@7967: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@7968: 0x00
cols@7969:   17

col    0[2] @7970: 3
col   1[20] @7973: _SYSSMU3_1645411166$
col    2[2] @7994: ..
col    3[2] @7997: ..
col    4[3] @8000: ..=
col    5[1] @8004: .
col    6[1] @8006: .
col    7[1] @8008: .
col    8[1] @8010: .
col    9[1] @8012: .
col   10[2] @8014: ..
col   11[2] @8017: ..
col   12[0] @8020: *NULL*
col   13[0] @8021: *NULL*
col   14[0] @8022: *NULL*
col   15[0] @8023: *NULL*
col   16[2] @8024: ..

rowdata[6684]                               @8027    
————-
flag@8027: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8028: 0x00
cols@8029:   17

col    0[2] @8030: 2
col   1[20] @8033: _SYSSMU2_3138176977$
col    2[2] @8054: ..
col    3[2] @8057: ..
col    4[3] @8060: ..-
col    5[1] @8064: .
col    6[1] @8066: .
col    7[1] @8068: .
col    8[1] @8070: .
col    9[1] @8072: .
col   10[2] @8074: ..
col   11[2] @8077: ..
col   12[0] @8080: *NULL*
col   13[0] @8081: *NULL*
col   14[0] @8082: *NULL*
col   15[0] @8083: *NULL*
col   16[2] @8084: ..

rowdata[6744]                               @8087    
————-
flag@8087: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8088: 0x00
cols@8089:   17

col    0[2] @8090: 1
col   1[19] @8093: _SYSSMU1_783380902$
col    2[2] @8113: ..
col    3[2] @8116: ..
col    4[3] @8119: …
col    5[1] @8123: .
col    6[1] @8125: .
col    7[1] @8127: .
col    8[1] @8129: .
col    9[1] @8131: .
col   10[2] @8133: ..
col   11[2] @8136: ..
col   12[0] @8139: *NULL*
col   13[0] @8140: *NULL*
col   14[0] @8141: *NULL*
col   15[0] @8142: *NULL*
col   16[2] @8143: ..

rowdata[6803]                               @8146    
————-
flag@8146: 0x2c (KDRHFL, KDRHFF, KDRHFH)
lock@8147: 0x00
cols@8148:   17

col    0[1] @8149: 0
col    1[6] @8151: SYSTEM
col    2[1] @8158: .
col    3[2] @8160: ..
col    4[3] @8163: …
col    5[1] @8167: .
col    6[1] @8169: .
col    7[1] @8171: .
col    8[1] @8173: .
col    9[1] @8175: .
col   10[2] @8177: ..
col   11[1] @8180: .
col   12[0] @8182: *NULL*
col   13[0] @8183: *NULL*
col   14[0] @8184: *NULL*
col   15[0] @8185: *NULL*
col   16[1] @8186: .

tailchk                                     @8188    
——-
BBED-00210: no row at this offset

设置_corrupted_rollback_segments=’_SYSSMU2_3138176977$’,’_SYSSMU2_3138176977$’,再重启DB。
alter system set “_corrupted_rollback_segments”=’_SYSSMU1_3780397527$’,’_SYSSMU2_3138176977$’,’_SYSSMU3_1645411166$’,’_SYSSMU4_1152005954$’,’_SYSSMU4_870421980$’,’_SYSSMU5_1527469038$’,’_SYSSMU6_2443381498$’,’_SYSSMU6_3753507049$’,’_SYSSMU7_3286610060$’,’_SYSSMU7_1260614213$’,’_SYSSMU8_2012382730$’,’_SYSSMU9_1424341975$’,’_SYSSMU9_973944058$’,’_SYSSMU10_3550978943$’,’_SYSSMU10_3904554333$’,’_SYSSMU11_1189042706$’,’_SYSSMU11_286947212$’,’_SYSSMU12_3068564564$’,’_SYSSMU12_483429471$’,’_SYSSMU13_2761193625$’,’_SYSSMU13_1803514519$’,’_SYSSMU1_783380902$’,’_SYSSMU2_2232571081$’,’_SYSSMU3_2097677531$’,’_SYSSMU5_2525172762$’,’_SYSSMU8_2806087761$’,’_SYSSMU14_3428641269$’,’_SYSSMU14_2421411996$’,’_SYSSMU15_1660868316$’,’_SYSSMU15_1683924174$’,’_SYSSMU16_3285257599$’,’_SYSSMU16_2313212396$’,’_SYSSMU17_2041439332$’,’_SYSSMU17_1843067439$’,’_SYSSMU18_4058605626$’,’_SYSSMU18_2800789714$’,’_SYSSMU20_2408133183$’,’_SYSSMU20_3850939844$’,’_SYSSMU19_660708022$’,’_SYSSMU19_53723967$’ scope=spfile;

ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

Total System Global Area  839282688 bytes
Fixed Size                  2217992 bytes
Variable Size             549455864 bytes
Database Buffers          285212672 bytes
Redo Buffers                2396160 bytes
Database mounted.
Database opened.
SQL>
SQL>
DB可以起来了,再创建一个新的UNDO表空间替换原来的UNDO表空间。
SQL> create undo tablespace undotbs02;

Tablespace created.

SQL> show parameter undo

NAME                                 TYPE        VALUE
———————————— ———– ——————————
undo_management                      string      MANUAL
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS2

SQL> alter system set undo_management=auto scope=spfile;

System altered.

SQL> alter system set undo_tablespace=undotbs02 scope=spfile;

System altered.

SQL> startup force
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

Total System Global Area  839282688 bytes
Fixed Size                  2217992 bytes
Variable Size             549455864 bytes
Database Buffers          285212672 bytes
Redo Buffers                2396160 bytes
Database mounted.
Database opened.
SQL>
S
SQL>
SQL> select segment_name from dba_segments where header_file=6 and header_block=208;

SEGMENT_NAME
——————————————————————————–
_SYSSMU16_3285257599$

SQL>
SQL> show parameter roll

NAME                                 TYPE        VALUE
———————————— ———– ——————————
_corrupted_rollback_segments         string      _SYSSMU1_3780397527$, _SYSSMU2
                                                 _3138176977$, _SYSSMU3_1645411
                                                 166$, _SYSSMU4_1152005954$, _S
                                                 YSSMU4_870421980$, _SYSSMU5_15
                                                 27469038$, _SYSSMU6_2443381498
                                                 $, _SYSSMU6_3753507049$, _SYSS
                                                 MU7_3286610060$, _SYSSMU7_1260
                                                 614213$, _SYSSMU8_2012382730$,
                                                  _SYSSMU9_1424341975$, _SYSSMU
                                                 9_973944058$, _SYSSMU10_355097
                                                 8943$, _SYSSMU10_3904554333$,

NAME                                 TYPE        VALUE
———————————— ———– ——————————
                                                 _SYSSMU11_1189042706$, _SYSSMU
                                                 11_286947212$, _SYSSMU12_30685
                                                 64564$, _SYSSMU12_483429471$,
                                                 _SYSSMU13_2761193625$, _SYSSMU
                                                 13_1803514519$, _SYSSMU1_78338
                                                 0902$, _SYSSMU2_2232571081$, _
                                                 SYSSMU3_2097677531$, _SYSSMU5_
                                                 2525172762$, _SYSSMU8_28060877
                                                 61$, _SYSSMU14_3428641269$, _S
                                                 YSSMU14_2421411996$, _SYSSMU15
                                                 _1660868316$, _SYSSMU15_168392

NAME                                 TYPE        VALUE
———————————— ———– ——————————
                                                 4174$, _SYSSMU16_3285257599$,
                                                 _SYSSMU16_2313212396$, _SYSSMU
                                                 17_2041439332$, _SYSSMU17_1843
                                                 067439$, _SYSSMU18_4058605626$
                                                 , _SYSSMU18_2800789714$, _SYSS
                                                 MU20_2408133183$, _SYSSMU20_38
                                                 50939844$, _SYSSMU19_660708022
                                                 $, _SYSSMU19_53723967$
_offline_rollback_segments           string      _SYSSMU1$, _SYSSMU2$, _SYSSMU3
                                                 $, _SYSSMU4$, _SYSSMU5$, _SYSS
                                                 MU6$, _SYSSMU7$, _SYSSMU8$, _S

NAME                                 TYPE        VALUE
———————————— ———– ——————————
                                                 YSSMU9$, _SYSSMU11$
fast_start_parallel_rollback         string      LOW
rollback_segments                    string      SYSTEM
transactions_per_rollback_segment    integer     5

SQL> alter system set “_offline_rollback_segments”=” scope=spfile;

System altered.
将_corrupted_rollback_segments设置为损坏的UNDO段,也可启动DB
SQL> alter system set “_corrupted_rollback_segments”=’_SYSSMU16_3285257599$’ scope=spfile;

System altered.

SQL> startup force
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

Total System Global Area  839282688 bytes
Fixed Size                  2217992 bytes
Variable Size             549455864 bytes
Database Buffers          285212672 bytes
Redo Buffers                2396160 bytes
Database mounted.
Database opened.
SQL>

7 rows selected.

SQL>  alter system set undo_tablespace=UNDOTBS2;

System altered.

SQL> startup force
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

Total System Global Area  839282688 bytes
Fixed Size                  2217992 bytes
Variable Size             549455864 bytes
Database Buffers          285212672 bytes
Redo Buffers                2396160 bytes
Database mounted.
Database opened.
将损坏的UNDO段从_corrupted_rollback_segments中拿掉,DB启动不了。
SQL>  alter system set “_corrupted_rollback_segments”=” scope=spfile;

System altered.

SQL> startup force
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

Total System Global Area  839282688 bytes
Fixed Size                  2217992 bytes
Variable Size             549455864 bytes
Database Buffers          285212672 bytes
Redo Buffers                2396160 bytes
Database mounted.
ORA-01092: ORACLE instance terminated. Disconnection forced
ORA-01578: ORACLE data block corrupted (file # 6, block # 208)
ORA-01110: data file 6:
‘/oracle/oradata/ORCL/datafile/o1_mf_undotbs2_9s7tftbj_.dbf’
Process ID: 8994
Session ID: 1 Serial number: 5

SQL> startup nomount
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

Total System Global Area  839282688 bytes
Fixed Size                  2217992 bytes
Variable Size             549455864 bytes
Database Buffers          285212672 bytes
Redo Buffers                2396160 bytes
SQL> alter system set “_corrupted_rollback_segments”=’_SYSSMU16_3285257599$’ scope=spfile;

System altered.

SQL> startup force
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

Total System Global Area  839282688 bytes
Fixed Size                  2217992 bytes
Variable Size             549455864 bytes
Database Buffers          285212672 bytes
Redo Buffers                2396160 bytes
Database mounted.
Database opened.
删除回滚段,将损坏的UNDO段从_corrupted_rollback_segments拿掉,此时可以启动DB。
SQL> drop rollback segment “_SYSSMU16_3285257599$”;

Rollback segment dropped.

SQL>  alter system set “_corrupted_rollback_segments”=” scope=spfile;

System altered.

SQL> show parameter undo

NAME                                 TYPE        VALUE
———————————— ———– ——————————
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS2
SQL> startup force
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

Total System Global Area  839282688 bytes
Fixed Size                  2217992 bytes
Variable Size             549455864 bytes
Database Buffers          285212672 bytes
Redo Buffers                2396160 bytes
Database mounted.
Database opened.
SQL>
SQL>
SQL> select segment_name from dba_segments where header_file=6 and header_block=208;

SEGMENT_NAME
——————————————————————————–
6.208

SQL> purge recyclebin;

Recyclebin purged.

SQL> select segment_name from dba_segments where header_file=6 and header_block=208;

SEGMENT_NAME
——————————————————————————–
6.208

SQL> desc undo$
 Name                                      Null?    Type
 —————————————– ——– —————————-
 US#                                       NOT NULL NUMBER
 NAME                                      NOT NULL VARCHAR2(30)
 USER#                                     NOT NULL NUMBER
 FILE#                                     NOT NULL NUMBER
 BLOCK#                                    NOT NULL NUMBER
 SCNBAS                                             NUMBER
 SCNWRP                                             NUMBER
 XACTSQN                                            NUMBER
 UNDOSQN                                            NUMBER
 INST#                                              NUMBER
 STATUS$                                   NOT NULL NUMBER
 TS#                                                NUMBER
 UGRP#                                              NUMBER
 KEEP                                               NUMBER
 OPTIMAL                                            NUMBER
 FLAGS                                              NUMBER
 SPARE1                                             NUMBER
 SPARE2                                             NUMBER
 SPARE3                                             NUMBER
 SPARE4                                             VARCHAR2(1000)
 SPARE5                                             VARCHAR2(1000)
 SPARE6                                             DATE

SQL> set lines 2000
SQL> select * from undo$ where NAME=’6.208′;

no rows selected

SQL>
SQL> select * from undo$ where name like ‘_SYSSMU16_3285257599$’;

       US# NAME                                USER#      FILE#     BLOCK#     SCNBAS     SCNWRP    XACTSQN    UNDOSQN      INST#    STATUS$        TS#      UGRP#     KEEP     OPTIMAL      FLAGS     SPARE1     SPARE2     SPARE3 SPARE4
———- —————————— ———- ———- ———- ———- ———- ———- ———- ———- ———- ———- ———- ———- ———- ———- ———- ———- ———-
SPARE5                                                                                                                                                                 SPARE6
——————————————————————————————————————————————————————————————————————————————–
        16 _SYSSMU16_3285257599$                   1          6        208    1317215          0 4294967295          2          0          1          5                    2

SQL> delete undo$ where name like ‘_SYSSMU16_3285257599$’;

1 row deleted.

SQL> commit;

Commit complete.

SQL> show parameter undo

NAME                                 TYPE        VALUE
———————————— ———– ——————————
undo_management                      string      AUTO
undo_retention                       integer     900
undo_tablespace                      string      UNDOTBS2
SQL> show parameter roll

NAME                                 TYPE        VALUE
———————————— ———– ——————————
_corrupted_rollback_segments         string
_offline_rollback_segments           string
fast_start_parallel_rollback         string      LOW
rollback_segments                    string      SYSTEM
transactions_per_rollback_segment    integer     5
SQL> startup force
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

Total System Global Area  839282688 bytes
Fixed Size                  2217992 bytes
Variable Size             549455864 bytes
Database Buffers          285212672 bytes
Redo Buffers                2396160 bytes
Database mounted.
Database opened.
SQL>
SQL>
SQL> select segment_name from dba_segments where header_file=6 and header_block=208;

SEGMENT_NAME
———————————————————————————
6.208

SQL> delete seg$ where file#=6 and block#=208;

1 row deleted.

SQL> startup force
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

Total System Global Area  839282688 bytes
Fixed Size                  2217992 bytes
Variable Size             549455864 bytes
Database Buffers          285212672 bytes
Redo Buffers                2396160 bytes
Database mounted.
Database opened.
SQL>

ALTER DATABASE   MOUNT
Successful mount of redo thread 1, with mount id 1378582471
Database mounted in Exclusive Mode
Lost write protection disabled
Completed: ALTER DATABASE   MOUNT
Sat Jun 21 16:41:47 2014
ALTER DATABASE OPEN
Beginning crash recovery of 1 threads
Started redo scan
Completed redo scan
 read 0 KB redo, 0 data blocks need recovery
Started redo application at
 Thread 1: logseq 71, block 93, scn 1843378
Recovery of Online Redo Log: Thread 1 Group 2 Seq 71 Reading mem 0
  Mem# 0: /oracle/oradata/ORCL/onlinelog/o1_mf_2_9rpzmh7z_.log
Completed redo application of 0.00MB
Completed crash recovery at
 Thread 1: logseq 71, block 93, scn 1863379
 0 data blocks read, 0 data blocks written, 0 redo k-bytes read
Thread 1 advanced to log sequence 72 (thread open)
Thread 1 opened at log sequence 72
  Current log# 3 seq# 72 mem# 0: /oracle/oradata/ORCL/onlinelog/o1_mf_3_9rpzmkg6_.log
Successful open of redo thread 1
SMON: enabling cache recovery
Successfully onlined Undo Tablespace 5.
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Hex dump of (file 6, block 208) in trace file /oracle/diag/rdbms/orcl/orcl/trace/orcl_smon_9940.trc
Corrupt block relative dba: 0x018000d0 (file 6, block 208)
Bad header found during buffer read
Data in bad block:
 type: 38 format: 2 rdba: 0x00c000d0
 last change scn: 0x0000.00000000 seq: 0xff flg: 0x04
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x000026ff
 check value in block header: 0x6029
 computed block checksum: 0x0
Reading datafile ‘/oracle/oradata/ORCL/datafile/o1_mf_undotbs2_9s7tftbj_.dbf’ for corruption at rdba: 0x018000d0 (file 6, block 208)
Reread (file 6, block 208) found same corrupt data
Errors in file /oracle/diag/rdbms/orcl/orcl/trace/orcl_smon_9940.trc  (incident=66180):
ORA-01578: ORACLE data block corrupted (file # 6, block # 208)
ORA-01110: data file 6: ‘/oracle/oradata/ORCL/datafile/o1_mf_undotbs2_9s7tftbj_.dbf’
Incident details in: /oracle/diag/rdbms/orcl/orcl/incident/incdir_66180/orcl_smon_9940_i66180.trc
Incremental checkpoint up to RBA [0x48.3.0], current log tail at RBA [0x48.21.0]
Database Characterset is ZHS16GBK
No Resource Manager plan active
replication_dependency_tracking turned off (no async multimaster replication found)
Trace dumping is performing id=[cdmp_20140621164150]
Starting background process QMNC
Sat Jun 21 16:41:50 2014
QMNC started with pid=21, OS id=10036
Sat Jun 21 16:41:50 2014
Sweep [inc][66180]: completed
Hex dump of (file 6, block 208) in trace file /oracle/diag/rdbms/orcl/orcl/incident/incdir_66180/orcl_m000_10032_i66180_a.trc
Corrupt block relative dba: 0x018000d0 (file 6, block 208)
Bad header found during validation
Data in bad block:
 type: 38 format: 2 rdba: 0x00c000d0
 last change scn: 0x0000.00000000 seq: 0xff flg: 0x04
 spare1: 0x0 spare2: 0x0 spare3: 0x0
 consistency value in tail: 0x000026ff
 check value in block header: 0x6029
 computed block checksum: 0x0
Reread of blocknum=208, file=/oracle/oradata/ORCL/datafile/o1_mf_undotbs2_9s7tftbj_.dbf. found same corrupt data
Reread of blocknum=208, file=/oracle/oradata/ORCL/datafile/o1_mf_undotbs2_9s7tftbj_.dbf. found same corrupt data
Reread of blocknum=208, file=/oracle/oradata/ORCL/datafile/o1_mf_undotbs2_9s7tftbj_.dbf. found same corrupt data
Reread of blocknum=208, file=/oracle/oradata/ORCL/datafile/o1_mf_undotbs2_9s7tftbj_.dbf. found same corrupt data
Reread of blocknum=208, file=/oracle/oradata/ORCL/datafile/o1_mf_undotbs2_9s7tftbj_.dbf. found same corrupt data
Completed: ALTER DATABASE OPEN
Starting background process CJQ0
Sat Jun 21 16:41:52 2014
CJQ0 started with pid=22, OS id=10048

还是报错######
SQL> select segment_name from dba_segments where header_file=6 and header_block=208;

SEGMENT_NAME
——————————————————————————–
6.208

SQL>  select * from seg$ where file#=6 and block#=208;

     FILE#     BLOCK#      TYPE#        TS#     BLOCKS    EXTENTS    INIEXTS
———- ———- ———- ———- ———- ———- ———-
   MINEXTS    MAXEXTS    EXTSIZE     EXTPCT      USER#      LISTS     GROUPS
———- ———- ———- ———- ———- ———- ———-
BITMAPRANGES  CACHEHINT   SCANHINT    HWMINCR     SPARE1     SPARE2
———— ———- ———- ———- ———- ———-
         6        208          3          5          8          1         16
         2      32765          8          0          0          0          0
           0          0          0         16    4227075
SQL> select segment_name from dba_segments where header_file=6 and header_block=208;

SEGMENT_NAME
——————————————————————————–
6.208

SQL>  select * from seg$ where file#=6 and block#=208;

     FILE#     BLOCK#      TYPE#        TS#     BLOCKS    EXTENTS    INIEXTS
———- ———- ———- ———- ———- ———- ———-
   MINEXTS    MAXEXTS    EXTSIZE     EXTPCT      USER#      LISTS     GROUPS
———- ———- ———- ———- ———- ———- ———-
BITMAPRANGES  CACHEHINT   SCANHINT    HWMINCR     SPARE1     SPARE2
———— ———- ———- ———- ———- ———-
         6        208          3          5          8          1         16
         2      32765          8          0          0          0          0
           0          0          0         16    4227075

           

还是能查到,很奇怪,原来没有提交。
SQL> delete seg$ where file#=6 and block#=208;

1 row deleted.

SQL> commit;

Commit complete.

SQL>  startup force

SQL> select * from undo$ where name like ‘_SYSSMU16_3285257599$’;

no rows selected

SQL> startup force
ORA-32004: obsolete or deprecated parameter(s) specified for RDBMS instance
ORACLE instance started.

Total System Global Area  839282688 bytes
Fixed Size                  2217992 bytes
Variable Size             549455864 bytes
Database Buffers          285212672 bytes
Redo Buffers                2396160 bytes
Database mounted.
Database opened.
SQL>

ALTER DATABASE   MOUNT
Successful mount of redo thread 1, with mount id 1378631580
Database mounted in Exclusive Mode
Lost write protection disabled
Completed: ALTER DATABASE   MOUNT
Sat Jun 21 16:45:20 2014
ALTER DATABASE OPEN
Beginning crash recovery of 1 threads
Started redo scan
Completed redo scan
 read 0 KB redo, 0 data blocks need recovery
Started redo application at
 Thread 1: logseq 72, block 102, scn 1863556
Recovery of Online Redo Log: Thread 1 Group 3 Seq 72 Reading mem 0
  Mem# 0: /oracle/oradata/ORCL/onlinelog/o1_mf_3_9rpzmkg6_.log
Completed redo application of 0.00MB
Completed crash recovery at
 Thread 1: logseq 72, block 102, scn 1883557
 0 data blocks read, 0 data blocks written, 0 redo k-bytes read
Thread 1 advanced to log sequence 73 (thread open)
Thread 1 opened at log sequence 73
  Current log# 1 seq# 73 mem# 0: /oracle/oradata/ORCL/onlinelog/o1_mf_1_9rpzmfgz_.log
Successful open of redo thread 1
SMON: enabling cache recovery
Incremental checkpoint up to RBA [0x49.3.0], current log tail at RBA [0x49.11.0]
Successfully onlined Undo Tablespace 5.
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Database Characterset is ZHS16GBK
No Resource Manager plan active
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
Sat Jun 21 16:45:22 2014
QMNC started with pid=20, OS id=10262
Starting background process CJQ0
Sat Jun 21 16:45:24 2014
CJQ0 started with pid=22, OS id=10274
Completed: ALTER DATABASE OPEN

此时日志正常了:
SQL>  select segment_name from dba_segments where header_file=6 and header_block=208;

no rows selected

SQL>  select * from seg$ where file#=6 and block#=208;

no rows selected

SQL>

附dba_segments基表:
select owner, segment_name, partition_name, segment_type, tablespace_name,
       header_file, header_block,
       decode(bitand(segment_flags, 131072), 131072, blocks,
           (decode(bitand(segment_flags,1),1,
            dbms_space_admin.segment_number_blocks(tablespace_id, relative_fno,
            header_block, segment_type_id, buffer_pool_id, segment_flags,
            segment_objd, blocks), blocks)))*blocksize,
       decode(bitand(segment_flags, 131072), 131072, blocks,
           (decode(bitand(segment_flags,1),1,
            dbms_space_admin.segment_number_blocks(tablespace_id, relative_fno,
            header_block, segment_type_id, buffer_pool_id, segment_flags,
            segment_objd, blocks), blocks))),
       decode(bitand(segment_flags, 131072), 131072, extents,
           (decode(bitand(segment_flags,1),1,
           dbms_space_admin.segment_number_extents(tablespace_id, relative_fno,
           header_block, segment_type_id, buffer_pool_id, segment_flags,
           segment_objd, extents) , extents))),
       initial_extent, next_extent, min_extents, max_extents, pct_increase,
       freelists, freelist_groups, relative_fno,
       decode(buffer_pool_id, 0, ‘DEFAULT’, 1, ‘KEEP’, 2, ‘RECYCLE’, NULL)
from sys_dba_segs

select NVL(u.name, ‘SYS’), o.name, o.subname,
       so.object_type, s.type#,
       ts.ts#, ts.name, ts.blocksize,
       f.file#, s.block#,
       s.blocks * ts.blocksize, s.blocks, s.extents,
       s.iniexts * ts.blocksize,
       decode(bitand(ts.flags, 3), 1, to_number(NULL),
                                      s.extsize * ts.blocksize),
       s.minexts, s.maxexts,
       decode(bitand(ts.flags, 3), 1, to_number(NULL),
                                      s.extpct),
       decode(bitand(ts.flags, 32), 32, to_number(NULL),
              decode(s.lists, 0, 1, s.lists)),
       decode(bitand(ts.flags, 32), 32, to_number(NULL),
              decode(s.groups, 0, 1, s.groups)),
       s.file#, s.cachehint, NVL(s.spare1,0), o.dataobj#
from sys.user$ u, sys.obj$ o, sys.ts$ ts, sys.sys_objects so, sys.seg$ s,
     sys.file$ f
where s.file# = so.header_file
  and s.block# = so.header_block
  and s.ts# = so.ts_number
  and s.ts# = ts.ts#
  and o.obj# = so.object_id
  and o.owner# = u.user# (+)
  and s.type# = so.segment_type_id
  and o.type# = so.object_type_id
  and s.ts# = f.ts#
  and s.file# = f.relfile#
union all
select NVL(u.name, ‘SYS’), un.name, NULL,
       decode(s.type#, 1, ‘ROLLBACK’, 10, ‘TYPE2 UNDO’), s.type#,
       ts.ts#, ts.name, ts.blocksize, f.file#, s.block#,
       s.blocks * ts.blocksize, s.blocks, s.extents,
       s.iniexts * ts.blocksize, s.extsize * ts.blocksize, s.minexts,
       s.maxexts, s.extpct,
       decode(bitand(ts.flags, 32), 32, to_number(NULL),
         decode(s.lists, 0, 1, s.lists)),
       decode(bitand(ts.flags, 32), 32, to_number(NULL),
         decode(s.groups, 0, 1, s.groups)),
       s.file#, s.cachehint, NVL(s.spare1,0), un.us#
from sys.user$ u, sys.ts$ ts, sys.undo$ un, sys.seg$ s, sys.file$ f
where s.file# = un.file#
  and s.block# = un.block#
  and s.ts# = un.ts#
  and s.ts# = ts.ts#
  and s.user# = u.user# (+)
  and s.type# in (1, 10)
  and un.status$ != 1
  and un.ts# = f.ts#
  and un.file# = f.relfile#
union all
select NVL(u.name, ‘SYS’), to_char(f.file#) || ‘.’ || to_char(s.block#), NULL,
       decode(s.type#, 2, ‘DEFERRED ROLLBACK’, 3, ‘TEMPORARY’,
                      4, ‘CACHE’, 9, ‘SPACE HEADER’, ‘UNDEFINED’), s.type#,
       ts.ts#, ts.name, ts.blocksize,
       f.file#, s.block#,
       s.blocks * ts.blocksize, s.blocks, s.extents,
       s.iniexts * ts.blocksize,
       decode(bitand(ts.flags, 3), 1, to_number(NULL),
                                      s.extsize * ts.blocksize),
       s.minexts, s.maxexts,
       decode(bitand(ts.flags, 3), 1, to_number(NULL),
                                      s.extpct),
       decode(bitand(ts.flags, 32), 32, to_number(NULL),
         decode(s.lists, 0, 1, s.lists)),
       decode(bitand(ts.flags, 32), 32, to_number(NULL),
         decode(s.groups, 0, 1, s.groups)),
       s.file#, s.cachehint, NVL(s.spare1,0), s.hwmincr
from sys.user$ u, sys.ts$ ts, sys.seg$ s, sys.file$ f
where s.ts# = ts.ts#
  and s.user# = u.user# (+)
  and s.type# not in (1, 5, 6, 8, 10)
  and s.ts# = f.ts#
  and s.file# = f.relfile#

未经允许不得转载:SRE空间 » 记一次UNDO块损坏:ORA-01578

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

oracle