2014년 12월 16일 화요일

ORA-600 [3020] [4097] [4553] [12700]

1. 정전에 의한 서버다운. 서버 기동시  DB Open 불가.
  ORA-01122: database file 1 failed verification check
  ORA-01207: file is more recent than control file - old control file

2. Mount  단계에서 Controlfile을 Trace 파일로 내린 후 Nomount 단계로 재기동
  SQL> alter database backup controlfile to trace;
  SQL> shutdown immediate;
  SQL> startup nomount;

3. Controlfile trace 를 이용하여 Controlfile 재생성
  SVRMGRL> CREATE CONTROLFILE REUSE DATABASE "TBILL" NORESETLOGS NOARCHIVELOG
  2)   MAXLOGFILES 32
  3)   MAXLOGMEMBERS 2
  4)   MAXDATAFILES 254
  5)   MAXINSTANCES 8
  6)   MAXLOGHISTORY 36874 …(생략)

4. Recover 수행하였으나 ORA-00600 [3020] 발생
 SVRMGRL> recover database;
 Wed Dec 17 01:24:18 2014
 Errors in file /home/oracle/admin/tbill/udump/tbill_ora_16624.trc: 
 ORA-00600: internal error code, arguments: [3020], [12593026], [1], [264959], [3], [240], [], []
 Media Recovery failed with error 600

5. 이후 until cancel, control file 재생성을 resettles 로 해서 수행하였으나 마찬가지로 같은 ORA - 600 발생함.
 ** ORA - 00600 [3020] 은 Redo log file 손실로 인함. Redo 정보와 Database block 정보의 불일치로 인해 발생.

6. init 파라메터에 히든 파라메터 “_corrupt_blocks_on_stuck_recovery=12593026” 적용하고 Noresetlogs 로 콘트롤 파일 재생성 후  DB mount 로 재기동

7. Recover 수행. 
 SVRMGRL>  ALTER DATABASE RECOVER;           // 실패
  — Alertlog — 
   Media Recovery Start
   Media Recovery failed with error 1610
   ORA-283 signalled during: ALTER DATABASE RECOVER   database  ...
   
 SVRMGRL> ALTER DATABASE RECOVER   database using backup controlfile until cancel;    //실패
  — Alertlog —
   Wed Dec 17 01:53:57 2014
   Media Recovery Start
   WARNING! Recovering data file 1 from a fuzzy file. If not the current file
   it might be an online backup taken without entering the begin backup command.
   W ARNING! Recovering data file 2 from a fuzzy file. If not the current file 
                    …. (중략) …
   WARNING! Recovering data file 115 from a fuzzy file. If not the current file
   it might be an online backup taken without entering the begin backup command.
   WARNING! Recovering data file 116 from a fuzzy file. If not the current file
   it might be an online backup taken without entering the begin backup command.
   
8. Controlfile  을 Resetlog 재생성 하고 아래 히든 파라미터를 init 파일에 추가한 후 mount 로 재기동
 _allow_resetlogs_corruption= TRUE   // 추가
 _corrupt_blocks_on_stuck_recovery   // 제거

9. Recover 수행
 SVRMGRL> ALTER DATABASE RECOVER CANCEL;
                      CANCEL
 SVRMGRL> ALTER DATABASE OPEN RESETLOGS;
 — Alertlog —
  Wed Dec 17 02:03:21 2014
  Errors in file /home/oracle/admin/tbill/udump/tbill_ora_16858.trc:
  ORA-00600: internal error code, arguments: [4000], [5], [], [], [], [], [], []

  SVRMGRL> alter session set events ‘10015 trace name adjust_scn level 1’;
  SVRMGRL> alter database open resetlogs;  // 실패

11. 아래 히든 파라메터 적용하여 Mount 수행

  _allow_resetlogs_corruption= TRUE
  _offline_rollback_segments= RBS0, RBS1, RBS2, RBS3, RBS4, RBS5, RBS6, ABAXRB
  _corrupted_rollback_segments= RBS0, RBS1, RBS2, RBS3, RBS4, RBS5, RBS6, ABAXRB

12. 복구 수행
 SVRMGRL> alter database recover;
 SVRMGRL> alter database open resetlogs;  
 Wed Dec 17 02:29:02 2014
 Errors in file /home/oracle/admin/tbill/udump/tbill_ora_16941.trc: 
 ORA-00600: internal error code, arguments: [2256], [0], [1073741824], [0], [2408695099], [], [], []

13. 초기화 파라메터의 히든 파라메터 및 이벤트 삭제하고 DB 재기동
 — Alertlog — 
  Wed Dec 17 02:30:40 2014
  Errors in file /home/oracle/admin/tbill/udump/tbill_ora_17011.trc:
  ORA-00600: internal error code, arguments: [3668], [1], [2], [134494], [134494], [4], [], []
  ORA-600 signalled during: alter database open ...

14. 히든 파라메터 재 적용하고 Mount
 _allow_resetlogs_corruption= TRUE
 _offline_rollback_segments= RBS0, RBS1, RBS2, RBS3, RBS4, RBS5, RBS6, ABAXRB
 _corrupted_rollback_segments= RBS0, RBS1, RBS2, RBS3, RBS4, RBS5, RBS6, ABAXRB

15. CANCEL 을 이용하여 복구 수행

 SVRMGRL> alter session set event = "10013 trace name context forever, level 10"
      <==    Instance Recovery Disable !!
SVRMGRL> alter session set event = "10015 trace name context forever, level 10"
      <==   Undo Segment Recovery Disable !!
 SVRMGRL> recover database until cancel;
  cancel;
 SVRMGRL> alter database open resetlogs;
 — Alertlog —
  Wed Dec 17 02:34:54 2014
  alter database open resetlogs
  RESETLOGS is being done without consistancy checks. This may result
  in a corrupted database. The database should be recreated.
  RESETLOGS after incomplete recovery UNTIL CHANGE 2408695098
       … (중략) ...
  Wed Dec 17 02:35:57 2014
  Dictionary check beginning
  Tablespace 'TEMP' #3 found in data dictionary,
  but not in the controlfile. Adding to controlfile.
  Dictionary check complete
  Wed Dec 17 02:35:58 2014
  SMON: enabling tx recovery
  SMON: about to recover undo segment 1
  SMON: mark undo segment 1 as needs recovery
      … (중략) ...
  SMON: mark undo segment 7 as needs recovery
  SMON: about to recover undo segment 8
  SMON: mark undo segment 8 as needs recovery
  Wed Dec 17 02:36:06 2014
  Completed: alter database open resetlogs

16. Shutdown immediate 후, 아래 히든 파라메터만 남기고 재기동
 _offline_rollback_segments= (RBS0, RBS1, RBS2, RBS3, RBS4, RBS5, RBS6, ABAXRB)

17. TEMP 추가.
 SVRMGRL> ALTER TABLESPACE TEMP ADD TEMPFILE '/EPOST1_DB1/sysdata/temp_01.dbf’ REUSE;

18. 일정 시간이 지나면 아래 ORA - 00600 떨어지면서 SMON Terminate  됨.
 — Alertlog — 
  Wed Dec 17 02:42:06 2014
  Errors in file /home/oracle/admin/tbill/bdump/tbill_smon_17075.trc:
  ORA-00600: internal error code, arguments: [4097], [], [], [], [], [], [], []
  SMON: terminating instance due to error 600
  Instance terminated by SMON, pid = 17075

 * 해당 ORA - 600 [4097] 은 PK 사용 불가능일때 발생하는 에러. 사용자 세그먼트에서 발생할 경우는 상관 없지만 해당 에러가
   딕셔니리 세그먼트에 대해 발생하여 DB 가 죽음.

19. 재기동
 SVRMGRL> startup;

 * 정상적으로 기동이 되나, 여깃 잠시 후 ORA - 00600 발생하며 DB 죽음.

20. DB가 죽기 직전까지의 시간을 이용하여 RBS Status 가 5 인 Rollback segment 를 Drop & Recreate. 
  (참조뷰 : DBA_ROLLBACK_SEGS, UNDO$ )
 Drop Syntax)
  DROP ROLLBACK SEGMENT <Segment_name> ;
 Create Syntax)
  CREATE ROLLBACK SEGMENT <Segment_name> STORAGE(INITIAL 5242880 NEXT 5242880 MAXSIZE UNLIMITED);
  
21. Shutdowns 후 _offline_rollback_segments 파라미터 삭제 후 재기동
 - 이후 System table 에 대하여 ORA - 00600 [4097] 에러는 더이상 발생하지 않음.

22. 이후 업무 테스트 중 아래와 같은 에러 계속 발생
 — Alertlog — 
  Errors in file /home/oracle/admin/tbill/udump/tbill_ora_19204.trc:
  ORA-00600: 내부 오류 코드, 인수 : [4553], [2], [0], [], [], [], [], []

  Wed Dec 17 04:11:07 2014
  Errors in file /home/oracle/admin/tbill/udump/tbill_ora_17750.trc:
  ORA-00600: 내부 오류 코드, 인수 : [12700], [1554581], [482615984], [19], [], [], [], []

23. ORA - 00600 [12700] 처리
 두번째 인자가 OBJECT 번호이므로 해당 OBJECT 번호를 통해 오브젝트 확인
 SQL> SELECT OWNER, OBJECT_NAME, OBJECT_TYPE FROM DBA_OBJECTS WHERE OBJECT_ID = 12700

 해당 Object 를 Rebuild  하였으나 지속적인 발생. (Status 는 Valid 였음)
 해당 Object 와 관련된 모든 테이블, 인덱스를 move/rebuild 수행하니 더이상 발생하지 않음.
 SQL> ALTER TABLE <tbl_name> MOVE;
 SQL> ALTER INDEX <ind_name> REBUILD;

24. ORA - 00600 [4553] 처리
 트레이트 파일을 열어 참조하는 OBJECT 확인함. 트레이스 파일의 CURRENT_SQL 부분을 참 조하여 해당 오브젝트 및 연관된 인덱스를 모두 리빌드 수행하여 줌.  

더이상 에러 발생하지 않음.

댓글 없음:

댓글 쓰기