비정상적인 복구를 수행하게 되는 경우(Redo log 유실, Archive log 파일 부재, Resetlog open 에러)
현업에서 일하다 보면 가끔 메인이 아닌 서서서브 DB나 테스트 DB에서 복구 불가능한 상황을 겪기도 한다.
그럴 경우 아래 복구 시나리오는 유용하게 사용될 수 있다.
하지만 이는 정상적인 복구 상황이 아님을 유의해야한다.
아래 복구 방법을 사용하게 되는 Case
1. 복구시 Redo Log 파일이 필요한데 이 Redo Log 파일의 corruption이 난 경우
2. 복구를 완료할 Archive Log 파일이 없는 경우
3. Resetlogs로 Open 하려고 할 때 ORA-01194 에러를 만나서 수행을 완료할 수 없을 경우
위와 같은 경우 복구시 아래 히든 파라미터를 사용하게 된다.
_ALLOW_RESETLOGS_CORRUPTION
_CORRUPTED_ROLLBACK_SEGMENTS
_ALLOW_ERROR_SIMULATION
_MINIMUM_GIGA_SCN
히든 파라미터에 대한 설정 내용
_ALLOW_RESETLOGS_CORRUPTION (TRUE, FALSE 값을 가진다.)
데이터 파일의 헤더에 기록되어 동기화가 필요한 정보(SCN과 같은)가 일치하지 않더라도 데이터베이스를 오픈할 수 있도록 해 준다.
즉, 복구가 필요한 데이터 파일을 resetlogs 옵션으로 open할 수 있게 해 준다. 기존의 동기화 정보는 무시하게 되며 데이터베이스를 resetlogs로 open하자마자 다음 SCN 정보로 데이터파일 헤더 정보를 갱신하고 동기화 시킨다. 그로 인해 복구가 필요한 데이터베이스에 Rolling Forward 과정이 진행되지 않아 데이터베이스가 정합성이 맞지 않은 상태에서 open된다.
_CORRUPTED_ROLLBACK_SEGMENTS (rollback segment 이름을 "," 구분해서 나열하게 된다.)
데이터베이스의 open시 Active한 rollback segment를 통해 Rolling Backward 과정을 수행하게 되는데 이 Rolling Backward 과정을 진행하지 않게 한다. 또한 active한 rollback segment와 undo tablespace를 삭제할 수 있도록 해 준다.
_ALLOW_ERROR_SIMULATION (TRUE, FALSE 값을 가지고 optional 하게 사용된다.)
오라클 내부 테스트 용도로 사용된다.
_MINIMUM_GIGA_SCN (Number 값을 가지고 optional 하게 사용된다.) => 11.2.0.2.5 부터 파라미터가 없어짐
ADJUST_SCN event와 유사한 파라미터이다. SCN의 값을 높은 값으로 점핑시키기위해 사용한다. 복구시 SCN의 값이 맞지 않는 상황에서 DB에서 백업보다 더 높은 SCN을 요구할 경우에 이를 해결하기 위해서 사용할 수 있다. 파라미터를 사용한 DB는 이후에 반드시 새로 DB 구성을 해야한다. 대개 복구시 ORA-600 [2662] 에러가 발생할 경우 사용하게 된다.
아래는 위 복구 방법을 적용한 사례이다.
※ 복구 상황
1) 대량 트랜잭션 중 전원 장애
2) NOARCHIVE 모드
3) 백업 존재하지 않음
4) Online Redo Log Corruption 상태임
1. 불완전 복구 첫 시도 후 실패하여 다시 진행하게 된 부분이다. 복구 실패하게 됨
SQL> startup mount ORACLE instance started. Total System Global Area 1610612736 bytes Fixed Size 2096632 bytes Variable Size 989856264 bytes Database Buffers 603979776 bytes Redo Buffers 14680064 bytes Database mounted. SQL> alter database open; alter database open * ERROR at line 1: ORA-01589: must use RESETLOGS or NORESETLOGS option for database open SQL> alter database open; alter database open * ERROR at line 1: ORA-01589: must use RESETLOGS or NORESETLOGS option for database open SQL> recover database; ORA-00283: recovery session canceled due to errors ORA-00314: log 1 of thread 1, expected sequence# 1201 doesn't match 1204 ORA-00312: online log 1 thread 1: '/data/app/oracle/datafile/ORCL/redo01.log' SQL> recover database until cancel ORA-00279: change 18546330 generated at 12/15/2015 10:28:15 needed for thread 1 ORA-00289: suggestion : /data/app/oracle/dbhome_1/dbs/arch1_1201_870572138.dbf ORA-00280: change 18546330 for thread 1 is in sequence #1201 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} /data/app/oracle/datafile/ORCL/redo01.log ORA-00310: archived log contains sequence 1204; sequence 1201 required ORA-00334: archived log: '/data/app/oracle/datafile/ORCL/redo01.log' 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: '/data/app/oracle/datafile/ORCL/system01.dbf' SQL> recover database until cancel ORA-00279: change 18546330 generated at 12/15/2015 10:28:15 needed for thread 1 ORA-00289: suggestion : /data/app/oracle/dbhome_1/dbs/arch1_1201_870572138.dbf ORA-00280: change 18546330 for thread 1 is in sequence #1201 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} /data/app/oracle/datafile/ORCL/redo03.log ORA-00310: archived log contains sequence 1203; sequence 1201 required ORA-00334: archived log: '/data/app/oracle/datafile/ORCL/redo03.log' 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: '/data/app/oracle/datafile/ORCL/system01.dbf' SQL> recover database until cancel ORA-00279: change 18546330 generated at 12/15/2015 10:28:15 needed for thread 1 ORA-00289: suggestion : /data/app/oracle/dbhome_1/dbs/arch1_1201_870572138.dbf ORA-00280: change 18546330 for thread 1 is in sequence #1201 Specify log: {<RET>=suggested | filename | AUTO | CANCEL} /data/app/oracle/datafile/ORCL/redo01.log ORA-00310: archived log contains sequence 1204; sequence 1201 required ORA-00334: archived log: '/data/app/oracle/datafile/ORCL/redo01.log' 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: '/data/app/oracle/datafile/ORCL/system01.dbf' SQL> alter database open resetlogs; alter database open resetlogs * ERROR at line 1: ORA-01194: file 1 needs more recovery to be consistent ORA-01110: data file 1: '/data/app/oracle/datafile/ORCL/system01.dbf'
2. 히든 파라미터 적용하여 아래와 같이 변경함
*.undo_management='MANUAL' *.undo_tablespace='UNDOTBS01' *.user_dump_dest='/data/app/oracle/admin/ORCL/udump' _ALLOW_RESETLOGS_CORRUPTION=TRUE _CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU10_1912826470$,_SYSSMU10_84651485$, _SYSSMU11_2656753586$,_SYSSMU12_2886358909$, _SYSSMU1_2986795754$,_SYSSMU13_718924942$, _SYSSMU1_4289064447$,_SYSSMU14_3114789169$, _SYSSMU15_996261396$,_SYSSMU16_1415326701$, _SYSSMU17_2055763971$,_SYSSMU18_3698054671$, _SYSSMU19_3843065260$,_SYSSMU20_4176760040$, _SYSSMU2_346913448$,_SYSSMU2_3741593945$, _SYSSMU3_219912871$,_SYSSMU3_2414309367$, _SYSSMU4_1372950691$,_SYSSMU4_2796668278$, _SYSSMU5_1189263717$,_SYSSMU5_3414239920$, _SYSSMU6_2463593703$,_SYSSMU6_3524683480$, _SYSSMU7_1565166063$,_SYSSMU7_2494227896$, _SYSSMU8_2615489449$,_SYSSMU8_625026625$, _SYSSMU9_3163463872$,_SYSSMU9_4094185854) _allow_error_simulation=true
3. 히든 파라미터를 적용하고 DB startup
SQL> shutdown immediate ORA-01109: database not open Database dismounted. ORACLE instance shut down. SQL> startup ORACLE instance started. Total System Global Area 1610612736 bytes Fixed Size 2096632 bytes Variable Size 989856264 bytes Database Buffers 603979776 bytes Redo Buffers 14680064 bytes Database mounted. ORA-01589: must use RESETLOGS or NORESETLOGS option for database open SQL> alter database open resetlogs;
4. Skip한 언두를 지우고 새로 생성하는 작업을 수행한다.
SQL> create undo tablespace UNDO2 datafile '/data/app/oracle/datafile/ORCL/undotbs02.dbf' size 2g; Tablespace created. SQL> alter tablespace UNDOTBS1 offline; Tablespace altered. SQL> drop tablespace UNDOTBS1 including contents and datafiles; Tablespace dropped. SQL> shutdown immediate Database closed. Database dismounted. ORACLE instance shut down. SQL> 파라미터 파일의 내용 중 일부를 아래와 같이 변경한다. *.undo_management='AUTO' #*.undo_management='MANUAL' *.undo_tablespace='UNDO2' #*.undo_tablespace='UNDOTBS01' *.user_dump_dest='/data/app/oracle/admin/ORCL/udump' #_ALLOW_RESETLOGS_CORRUPTION=TRUE #_CORRUPTED_ROLLBACK_SEGMENTS=(_SYSSMU10_1912826470$,_SYSSMU10_84651485$, #_SYSSMU11_2656753586$,_SYSSMU12_2886358909$, #_SYSSMU1_2986795754$,_SYSSMU13_718924942$, #_SYSSMU1_4289064447$,_SYSSMU14_3114789169$, #_SYSSMU15_996261396$,_SYSSMU16_1415326701$, #_SYSSMU17_2055763971$,_SYSSMU18_3698054671$, #_SYSSMU19_3843065260$,_SYSSMU20_4176760040$, #_SYSSMU2_346913448$,_SYSSMU2_3741593945$, #_SYSSMU3_219912871$,_SYSSMU3_2414309367$, #_SYSSMU4_1372950691$,_SYSSMU4_2796668278$, #_SYSSMU5_1189263717$,_SYSSMU5_3414239920$, #_SYSSMU6_2463593703$,_SYSSMU6_3524683480$, #_SYSSMU7_1565166063$,_SYSSMU7_2494227896$, #_SYSSMU8_2615489449$,_SYSSMU8_625026625$, #_SYSSMU9_3163463872$,_SYSSMU9_4094185854) #_allow_error_simulation=true
P.S 추가적인 히든 파라미터
_OFFLINE_ROLLBACK_SEGMENTS
P.S Undo Tablespace를 변경할 경우 SYSTEM Tablespace에 Active 한 Rollback Segment가 남을 수 있다. 이 경우 아래의 방법으로 확인할 수 있다.
strings system01.dbf | grep _SYSSMU | cut -d $ -f 1 | sort -u
출처 : http://www.acehints.com/2012/02/database-recovery-from-corrupted.html
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
9 | DB 컨트롤 파일 추가하기 | 명품관 | 2023.03.27 | 950 |
8 | data pump 모니터링 | 명품관 | 2023.01.31 | 958 |
7 | Rman 복구 중 Netbackup 이 연결이 안되는 에러 [1] | Talros | 2022.11.24 | 118 |
6 | 12C RAC, OS Fault 로 다운된 1번 Node 재구성 | Talros | 2020.08.28 | 1093 |
5 | alter database begin backup 사용을 권해 드립니다. [1] | 우뽕 | 2020.01.22 | 14299 |
4 | Rman 을 이용해 ASM 에 컨트롤 파일 복구 하기 [1] | Talros | 2019.07.16 | 2850 |
3 | Data Pump Query 파라미터 사용법 [1] | Talros | 2016.01.28 | 4484 |
2 | Data pump 사용시 Warnings Like DBMS_AW_EXP: SYS.AW$EXPRESS: OLAP not enabled | Talros | 2016.01.08 | 1955 |
» | 비정상적인 복구를 수행하게 되는 경우(Redo log 유실, Archive log 파일 부재, Resetlog open 에러) | 명품관 | 2015.12.22 | 6738 |