Oracle 비 압축 파일 모드 Media Recovery 오류 -- ORA - 26040

Oracle 비 압축 파일 모드 Media Recovery 오류 -- ORA - 26040
시스템 환경:
운영 체제: Linux RH 55
Oracle:  Oracle 11gR2
아 날로 그 사례:
1. 데이터베이스 모드 보기
18:12:36 SYS@ prod>archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /dsk4/arch1
Oldest online log sequence     1
Current log sequence           3
2. 새로운 Tablespace 만 들 기
18:13:19 SYS@ prod>create tablespace tbs2 
18:13:30   2  datafile '/u01/app/oracle/oradata/prod/tbs2.dbf' size 10m;
Tablespace created.

3. 데이터베이스 에 대한 냉 방 준비
[oracle@rh6 ~]$ rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on Thu Jul 24 18:14:30 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
connected to target database: PROD (DBID=239333010)
RMAN> run {
2> shutdown immediate;
3> startup mount;
4> backup database format '/dsk3/bak/%s_%d.bak';
5> alter database open;
6> }

4, 백업 완료 새로운 Tablesapce 에 Object 생 성
18:19:40 SYS@ prod>conn scott/tiger
Connected.
18:30:13 SCOTT@ prod>create table t1 tablespace tbs2 as select * from emp;
Table created.
Elapsed: 00:00:01.00
18:30:45 SCOTT@ prod>select count(*) from t1;
  COUNT(*)
----------
        14
Elapsed: 00:00:00.02
18:30:56 SCOTT@ prod>insert into t1 select * from t1 where rownum=1;
1 row created.
Elapsed: 00:00:00.02
18:31:16 SCOTT@ prod>commit;
Commit complete.
Elapsed: 00:00:00.04
18:31:18 SCOTT@ prod>insert into t1 select * from t1 where rownum=1;
1 row created.
Elapsed: 00:00:00.01
18:31:23 SCOTT@ prod>select count(*) from t1;
  COUNT(*)
----------
        16

5 、 Redo Log 정보 보기
18:32:14 SYS@ prod>select group#,sequence# ,status from v$log;
    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         1          4 CURRENT
         2          2 INACTIVE
         3          3 INACTIVE
Elapsed: 00:00:00.05

6. 아 날로 그 데이터 파일 파괴
[oracle@rh6 ~]$ rm /u01/app/oracle/oradata/prod/tbs2.dbf
18:32:28 SYS@ prod>shutdown abort
ORACLE instance shut down.
Instance 를 mount 로 다시 시작 하고 redo log 를 보 며 로그 에 switch 가 발생 하지 않 았 습 니 다.
18:33:06 SYS@ prod>startup mount;
ORACLE instance started.
Total System Global Area  835104768 bytes
Fixed Size                  2217952 bytes
Variable Size             775948320 bytes
Database Buffers           54525952 bytes
Redo Buffers                2412544 bytes
Database mounted.
18:33:42 SYS@ prod>select group#,sequence# ,status from v$log;
    GROUP#  SEQUENCE# STATUS
---------- ---------- ----------------
         1          4 CURRENT
         3          3 INACTIVE
         2          2 INACTIVE

Open 데이터베이스 에서 데이터 파일 을 잃 어 버 리 는 오류 가 발생 했 습 니 다.
18:34:17 SYS@ prod>alter database open;
alter database open
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 9 - see DBWR trace file
ORA-01110: data file 9: '/u01/app/oracle/oradata/prod/tbs2.dbf'
7. Database 에 Media Recovery (로그 전환 이 없 기 때문에 complete recover)
[oracle@rh6 ~]$ rman target /
Recovery Manager: Release 11.2.0.1.0 - Production on Thu Jul 24 18:34:35 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
connected to target database: PROD (DBID=239333010, not open)
RMAN> restore datafile 9;
Starting restore at 24-JUL-14
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=18 device type=DISK
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00009 to /u01/app/oracle/oradata/prod/tbs2.dbf
channel ORA_DISK_1: reading from backup piece /dsk3/bak/34_PROD.bak
channel ORA_DISK_1: piece handle=/dsk3/bak/34_PROD.bak tag=TAG20140724T181640
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 24-JUL-14
RMAN> recover datafile 9;
Starting recover at 24-JUL-14
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:01
Finished recover at 24-JUL-14

경고 로그 보기:
Thu Jul 24 18:34:49 2014
Full restore complete of datafile 9 /u01/app/oracle/oradata/prod/tbs2.dbf.  Elapsed time: 0:00:00 
  checkpoint is 2168258
Thu Jul 24 18:34:57 2014
alter database recover datafile list clear
Completed: alter database recover datafile list clear
alter database recover if needed
 datafile 9
Media Recovery Start
Serial Media Recovery started
Recovery of Online Redo Log: Thread 1 Group 3 Seq 3 Reading mem 0
  Mem# 0: /dsk1/oradata/prod/redo03a.log
  Mem# 1: /dsk2/oradata/prod/redo03b.log
Recovery of Online Redo Log: Thread 1 Group 1 Seq 4 Reading mem 0
  Mem# 0: /dsk1/oradata/prod/redo01a.log
  Mem# 1: /dsk2/oradata/prod/redo01b.log
Media Recovery Complete (prod)
Completed: alter database recover if needed
 datafile 9
group 1 과 3 을 통 해 media recovery 를 진행 하 였 습 니 다!
8. 데이터베이스 open, T1 에 접근 할 수 없 음 발견 (출현: ORA - 26040)
18:35:36 SYS@ prod>alter database open;
Database altered.
18:35:49 SYS@ prod>select count(*) from scott.t1;
select count(*) from scott.t1
*
ERROR at line 1:
ORA-01578: ORACLE data block corrupted (file # 9, block # 131)
ORA-01110: data file 9: '/u01/app/oracle/oradata/prod/tbs2.dbf'
ORA-26040: Data block was loaded using the NOLOGGING option
경고 로그 보기:
alter database open
Beginning crash recovery of 1 threads
Started redo scan
Completed redo scan
 read 83 KB redo, 26 data blocks need recovery
Started redo application at
 Thread 1: logseq 4, block 117
Recovery of Online Redo Log: Thread 1 Group 1 Seq 4 Reading mem 0
  Mem# 0: /dsk1/oradata/prod/redo01a.log
  Mem# 1: /dsk2/oradata/prod/redo01b.log
Completed redo application of 0.02MB
Completed crash recovery at
 Thread 1: logseq 4, block 284, scn 2208986
 26 data blocks read, 26 data blocks written, 83 redo k-bytes read
Thu Jul 24 18:35:45 2014
Thread 1 advanced to log sequence 5 (thread open)
Thread 1 opened at log sequence 5
  Current log# 2 seq# 5 mem# 0: /dsk1/oradata/prod/redo02a.log
  Current log# 2 seq# 5 mem# 1: /dsk2/oradata/prod/redo02b.log
Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Thu Jul 24 18:35:45 2014
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
Database Characterset is ZHS16GBK
No Resource Manager plan active
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
Thu Jul 24 18:35:48 2014
QMNC started with pid=20, OS id=13934 
Completed: alter database open
Thu Jul 24 18:35:54 2014
Starting background process CJQ0
Thu Jul 24 18:35:54 2014
CJQ0 started with pid=23, OS id=13946 
Thu Jul 24 18:36:06 2014
Errors in file /u01/app/oracle/diag/rdbms/prod/prod/trace/prod_ora_13932.trc  (incident=139383):
ORA-01578: ORACLE data block corrupted (file # 9, block # 131)
ORA-01110: data file 9: '/u01/app/oracle/oradata/prod/tbs2.dbf'
ORA-26040: Data block was loaded using the NOLOGGING option
Incident details in: /u01/app/oracle/diag/rdbms/prod/prod/incident/incdir_139383/prod_ora_13932_i139383.trc
Errors in file /u01/app/oracle/diag/rdbms/prod/prod/trace/prod_ora_13932.trc  (incident=139384):
ORA-01578: ORACLE data block corrupted (file # 9, block # 131)
ORA-01110: data file 9: '/u01/app/oracle/oradata/prod/tbs2.dbf'
ORA-26040: Data block was loaded using the NOLOGGING option
Incident details in: /u01/app/oracle/diag/rdbms/prod/prod/incident/incdir_139384/prod_ora_13932_i139384.trc
Thu Jul 24 18:36:13 2014
Trace dumping is performing id=[cdmp_20140724183613]
Thu Jul 24 18:36:14 2014
Sweep [inc][139384]: completed
Sweep [inc][139383]: completed
Sweep [inc2][139383]: completed
Trace dumping is performing id=[cdmp_20140724183617]
Thu Jul 24 18:37:14 2014
Sweep [inc2][139384]: completed

9. DBV 를 통 해 데이터 파일 검증
[oracle@rh6 ~]$ dbv file=/u01/app/oracle/oradata/prod/tbs2.dbf blocksize=8192
DBVERIFY: Release 11.2.0.1.0 - Production on Thu Jul 24 18:45:59 2014
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.
DBVERIFY - Verification starting : FILE = /u01/app/oracle/oradata/prod/tbs2.dbf
DBV-00201: Block, DBA 37748867, marked corrupt for invalid redo application
DBVERIFY - Verification complete
Total Pages Examined         : 1280
Total Pages Processed (Data) : 4
Total Pages Failing   (Data) : 0
Total Pages Processed (Index): 0
Total Pages Failing   (Index): 0
Total Pages Processed (Other): 1274
Total Pages Processed (Seg)  : 0
Total Pages Failing   (Seg)  : 0
Total Pages Empty            : 2
Total Pages Marked Corrupt   : 1
Total Pages Influx           : 0
Total Pages Encrypted        : 0
Highest block SCN            : 2188961 (0.2188961)

데이터 파일 9 에 논리 적 불량 블록 이 나 타 났 습 니 다!
10. 덤 프 데이터 블록
14:35:48 SYS@ prod>alter system dump datafile 9 block 131;                   
System altered.
데이터 블록 덤 프 정보:
[oracle@rh6 ~]$ cat /u01/app/oracle/diag/rdbms/prod/prod/trace/prod_ora_2822.trc|more
Trace file /u01/app/oracle/diag/rdbms/prod/prod/trace/prod_ora_2822.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 = /u01/app/oracle/product/11.2.0/db_1
System name:    Linux
Node name:      rh6
Release:        2.6.32-358.el6.x86_64
Version:        #1 SMP Tue Jan 29 11:47:41 EST 2013
Machine:        x86_64
Instance name: prod
Redo thread mounted by this instance: 1
Oracle process number: 29
Unix process pid: 2822, p_w_picpath: oracle@rh6 (TNS V1-V3)
*** 2014-07-25 14:37:54.634
*** SESSION ID:(28.16) 2014-07-25 14:37:54.634
*** CLIENT ID:() 2014-07-25 14:37:54.634
*** SERVICE NAME:(SYS$USERS) 2014-07-25 14:37:54.634
*** MODULE NAME:(sqlplus@rh6 (TNS V1-V3)) 2014-07-25 14:37:54.634
*** ACTION NAME:() 2014-07-25 14:37:54.634

Start dump data blocks tsn: 9 file#:9 minblk 131 maxblk 131
Block dump from cache:
Dump of buffer cache at level 4 for tsn=9, rdba=37748867
Block dump from disk:
buffer tsn: 9 rdba: 0x02400083 (9/131)
scn: 0x0000.00216666 seq: 0xff flg: 0x04 tail: 0x666600ff
frmt: 0x02 chkval: 0xa4e2 type: 0x00=unknown
Hex dump of block: st=0, typ_found=0
Dump of memory from 0x00007FDEF186CA00 to 0x00007FDEF186EA00
7FDEF186CA00 0000A200 02400083 00216666 04FF0000  [[email protected]!.....]
7FDEF186CA10 0000A4E2 FFFFFFFF FFFFFFFF FFFFFFFF  [................]
7FDEF186CA20 FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF  [................]
        Repeat 508 times
7FDEF186E9F0 FFFFFFFF FFFFFFFF FFFFFFFF 666600FF  [..............ff]
End dump data blocks tsn: 9 file#: 9 minblk 131 maxblk 131
- block 131 은 머리 정 보 를 제외 하고 나머지 는 모두 'FFFFFF' 인 것 을 알 수 있 습 니 다. 논리 적 인 나 쁜 블록 이 어야 합 니 다!
11. 덤 프 에 대응 하 는 logfile
14:35:48 SYS@ prod>alter system dump logfile '/dsk1/oradata/prod/redo01a.log';
System altered.
14:35:53 SYS@ prod>alter system dump logfile '/dsk1/oradata/prod/redo03a.log';
System altered.
[oracle@rh6 ~]$ cat /u01/app/oracle/diag/rdbms/prod/prod/trace/prod_ora_2406.trc
DUMP OF REDO FROM FILE '/dsk1/oradata/prod/redo01a.log'
 Opcodes *.*
 RBAs: 0x000000.00000000.0000 thru 0xffffffff.ffffffff.ffff
 SCNs: scn: 0x0000.00000000 thru scn: 0xffff.ffffffff
 Times: creation thru eternity
 FILE HEADER:
        Compatibility Vsn = 186646528=0xb200000
        Db ID=239333010=0xe43ee92, Db Name='PROD'
        Activation ID=264808982=0xfc8aa16
        Control Seq=2747=0xabb, File size=102400=0x19000
        File Number=1, Blksiz=512, File Type=2 LOG
 descrip:"Thread 0001, Seq# 0000000004, SCN 0x000000216562-0x00000021b4dc"
 thread: 1 nab: 0x11c seq: 0x00000004 hws: 0x6 eot: 0 dis: 0
 resetlogs count: 0x32d7d50e scn: 0x0000.00206c24 (2124836)
 prev resetlogs count: 0x32d7cc14 scn: 0x0000.0020680f (2123791)
 Low  scn: 0x0000.00216562 (2188642) 07/24/2014 18:27:42
 Next scn: 0x0000.0021b4dc (2208988) 07/24/2014 18:35:45
 Enabled scn: 0x0000.00206c24 (2124836) 07/15/2014 17:59:42
 Thread closed scn: 0x0000.0021b4da (2208986) 07/24/2014 18:33:04
 Disk cksum: 0x1af0 Calc cksum: 0x1af0
 Terminal recovery stop scn: 0x0000.00000000
 Terminal recovery  01/01/1988 00:00:00
 Most recent redo scn: 0x0000.00000000
 Largest LWN: 0 blocks
 End-of-redo stream : No
 Unprotected mode
 Miscellaneous flags: 0x800000
 Thread internal enable indicator: thr: 0, seq: 0 scn: 0x0000.00000000

REDO RECORD - Thread:1 RBA: 0x000004.000000c6.0198 LEN: 0x0034 VLD: 0x01
SCN: 0x0000.00216666 SUBSCN:  1 07/24/2014 18:30:45
CHANGE #1 INVLD AFN:9 DBA:0x02400083 BLKS:0x0001 OBJ:75139 SCN:0x0000.00216666 SEQ:1 OP:19.2 ENC:0
Direct Loader invalidate block range redo entry
REDO RECORD - Thread:1 RBA: 0x000006.000007b6.0110 LEN: 0x0034 VLD: 0x01
SCN: 0x0000.00220ad0 SUBSCN:  1 07/25/2014 14:22:51
CHANGE #1 INVLD AFN:2 DBA:0x0080f09c BLKS:0x0001 OBJ:6214 SCN:0x0000.00220ad0 SEQ:1 OP:19.2 ENC:0
Direct Loader invalidate block range redo entry
- redo 로그 에 "Direct Loader" 동작 을 기록 했다 (OBJ: 75139, OBJ: 6214)
대응 하 는 대상 보기:
14:29:23 SYS@ prod>select owner,object_id,object_name from dba_objects
15:18:47   2  where object_id=75139;
OWNER                           OBJECT_ID OBJECT_NAME
------------------------------ ---------- --------------------
SCOTT                               75139 T1
Elapsed: 00:00:00.04

15:18:51 SYS@ prod>select owner,object_id,object_name from dba_objects
15:18:58   2  where object_id=6214;
OWNER                           OBJECT_ID OBJECT_NAME
------------------------------ ---------- --------------------
SYS                                  6214 SYS_LOB0000006213C00
                                          038$$
Elapsed: 00:00:00.05
15:19:07 SYS@ prod>

   이상 에서 정 보 를 보면 미디어 Recover 단계 에서 create table T1 as select * from 은 'Direct Loader' 를 사 용 했 고 압축 파일 이 아 닌 'nologging' 방식 을 사 용 했 을 것 입 니 다. 그래서 후속 적 인 Insert 데 이 터 는 redo log 를 통 해 복구 되 지 못 해 논리 적 인 나 쁜 블록 이 생 겼 습 니 다!
비고: (Maclean Liu 블 로그 관점 참조)
http://www.askmaclean.com/archives/nologging-unrecoverable.html
[데이터 복구] NOLOGGING UNRECOVERABLE ORA - 26040 분석
SQL> select count(*) from abc;select count(*) from abc*  1      :ORA-01578: ORACLE       (    17,    131)ORA-01110:      17:‘C:\APP\XIANGBLI\ORADATA\MACLEAN\DATAFILE\O1_MF_NLOGGING_9475OCS5_.DBF’ORA-26040:        NOLOGGING      
 SQL> select UNRECOVERABLE_CHANGE# , UNRECOVERABLE_time from v$datafile where file#=17;
UNRECOVERABLE_CHANGE# UNRECOVERABLE_——————— ————–6486756 26-9  -13
 
  (    17,    131) dump     
 
 
*** 2013-09-26 10:07:46.584Start dump data blocks tsn: 17 file#:17 minblk 131 maxblk 131Block dump from cache:Dump of buffer cache at level 4 for pdb=0 tsn=17 rdba=71303299Block dump from disk:buffer tsn: 17 rdba: 0×04400083 (17/131)scn: 0×0.62faac seq: 0xff flg: 0×04 tail: 0xfaac00fffrmt: 0×02 chkval: 0xa2a1 type: 0×00=unknownHex dump of block: st=0, typ_found=0Dump of memory from 0x000000000BFF2200 to 0x000000000BFF420000BFF2200 0000A200 04400083 0062FAAC 04FF0000 [[email protected].....]00BFF2210 0000A2A1 FFFFFFFF FFFFFFFF FFFFFFFF [................]00BFF2220 FFFFFFFF FFFFFFFF FFFFFFFF FFFFFFFF [................]Repeat 508 times00BFF41F0 FFFFFFFF FFFFFFFF FFFFFFFF FAAC00FF [................]End dump data blocks tsn: 17 file#: 17 minblk 131 maxblk 131
 
scn: 0×0.62faac seq: 0xff
==》    SCN 6486700,                0XFF
 
dump   redo logfile     
REDO RECORD – Thread:1 RBA: 0×000074.00015418.0078 LEN: 0x003c VLD: 0×01 CON_UID: 0SCN: 0×0000.0062faac SUBSCN: 1 09/26/2013 10:04:39CHANGE #1 INVLD CON_ID:0 AFN:17 DBA:0×04400083 BLKS:0x000d OBJ:123054 SCN:0×0000.0062faac SEQ:1 OP:19.2 ENC:0Direct Loader invalidate block range redo entry
 
OP:19.2=》Layer 19 : Direct Loader Log Blocks – KCOCODLB Opcode 2 : Invalidate range – KCBLCOIR
==》   redo                   , redo logfile dump           
 
  recover   redo,  “Direct Loader invalidate block range redo entry”   ,             kcbh        0XFF
 Oracle               SOFT Corrupt ,   nologging   。
Block is marked as SOFT Corrupt and has 0xff along the block. This is theformat used by Oracle to mark a block as corrupt due to redo invalidation(NOLOGGING).NOLOGGING OPERATION in redo:

좋은 웹페이지 즐겨찾기