추가 확인 필요사항 

  • 장애발생한 logfile이 해당 시점에 current/inactive/active 유추 가능한가?
    • 책의 저자의 case 3~5에서 장애발생원인 파일을 찾는 것과 current를 찾는 근거가 똑같음
  • unarchived clear -> Drop&Create하면 , 최초 Drop전에 발생된 데이터변경은..? (current/active의..)

 

case 1. 대기중인 그룹의 멤버가 1개만 장애 발생할 경우

설명

  • 문제는 발생하지 않음 (오라클 권장사항 : 그룹 최소 2개, 그룹별 멤버 1개).
  • 다만 최소조건 불충족에 의한 장애를 방지위해 alertlog를 확인하고 조치를 해야함
    • Errors in file /data/arc1/1_36_1072647549.arc:
      ORA-00313: open failed for member of log group 1 of thread 1
      ORA-00312: online log 1 thread 1: 'oradata/EHR/redo01_a.log'
      ORA-27037: unable to obtail file status 

스크립트

  • 상태조회
select a.group#,a.member,b.bytes/1024/1024 MB,b.archived,b.sequence# "SEQ#",b.status
from v$logfile a, v$log b
where a.group#=b.group#
order by 1,2;
  • 멤버 재생성
alter database drop logfile memeber '/oradata/EHR/redo01_a.log';
alter database add logfile member '/oradata/EHR/redo01_a.log' to group 1;

 

case 2. 대기중인 그룹 중 archive가 완료된 그룹이 지워진 경우

설명

  • 재기동(Startup시 mount가 됨) 혹은 archivelog내 아래 메시지 발생 및 삭제된 대상 조회시 ARC=YES일 경우
    그룹 삭제 후 재생성
    • ORA-00313: open failed for member of log group 2 of thread 1
      ORA-00312: online log 2 thread 1: 'oradata/EHR/redo02_a.log' 
      ORA-00312: online log 2 thread 1: 'oradata/EHR/redo02_b.log'

스크립트

  • 그룹 삭제 후 재생성
alter database drop logfile group 2; 
alter database add logfile group 2
('/oradata/EHR/redo02_a.log','/oradata/EHR/redo02_b.log') size 5M;

 

case 3.  대기중인 그룹 중 archive가 완료 안된 그룹이 지워진 경우 - DB Open/close

              + Current그룹이 삭제된 경우 -  DB open   

              + 전체 redo log가 삭제된 경우 - db open

공통

  • 삭제된 파일은 controlfile내 redolog정보를 통해 복구가 가능하며,
    archivelog가 없기 때문에 unarchived clear를 수행.

대기중인 그룹 중 archive가 완료 안된 그룹이 지워진 경우 - DB Open 와
Current그룹이 삭제된 경우 -  DB open

  • unarchived clear 수행후 logswitch중 하단의 alertlog 발생
    • alertlog : ORA-00314: log ? of thead ?,expected sequence# ? doesn't match 0
  • 조치 방법 
    • 해당 group에 대한 unarchived clear 재수행 (파일 삭제시도시 archive가 안된 그룹 삭제 불가) → 
         group 삭제 및 생성 진행

전체 redo log가 삭제된 경우 - db open

  • 조치 방법  
    • logswitch (에러발생시까지) -> 가장 SEQ#가 낮은 것부터 하나씩 unarchived clear -> Drop group -> Create group -> logswitch (에러발생시까지) -> ..반복

대기중인 그룹 중 archive가 완료 안된 그룹이 지워진 경우 - DB close의 경우

  • redolog에 대한 오라클 권장사항이 충족되지 않는 상태가 장기 지속될 경우 DB가 비정상 종료됨
      (logswitch발생시 아카이빙이 되지 않고 hang발생 -> DB비정상종료)
  • 조치방법
    • startup 실행시 mount상태가 되며, redolog상태 조회를 통해 문제원인 그룹 확인 가능 (SEQ#최소값)
       해당 group에 대한 unarchived clear 재수행 (삭제 불필요)

 

case4.  Current그룹이 삭제된 경우 - Shutdown immediate 

설명

  • commit된 데이터가 모두 데이터파일에 정상 저장되어 데이터의 소실은 발생하지 않는다.  

조치 방법

  • Startup(mount) -> recovery databse until cancel -> alter database open resetlogs; 

스크립트 

  • unarchived clear를 통한 멤버재생성
alter databse clear unarchived logfile group 1;

 


case5.  Current그룹이 삭제된 경우 - Shutdown abort로 종료 -  backup 존재 
            +전체 redo log가 삭제된 경우 - db close 상태 -백업 존재 

 설명

  • 삭제된 redolog 그룹이 current상태일때 발생된 scn(변경이력)은 복구 불가 
     그 전까지 복구 가능

조치 방법

  • 삭제된 redolog의 sequence 번호 조회 (해당 시퀀스에서 cancel 필요) ->  shutdown abort 
       -> 모든 데이터파일 복원 -> start mount -> recover database until cancel 
       -> ORA-00280: ...in sequence ($해당 시퀀스) : cancel-> alter database open resetlogs;

 

case6. Current그룹이 삭제된 경우 - Shutdown abort로 종료 -  backup/archivelog 미존재

          +전체 redo log가 삭제된 경우 - db close 상태 -백업 미존재

  • 복구 성공 가능성이 낮으므로 아카이브로그와 백업을 잘 받아야함 
     

 

참고사이트

  • 테스트 이력 소실되었고, 이해가 되지 않는 부분이 있어 아래 사이트를 통해 추가정보는 확인

redolog 장애처리 순서도

테스트 내용

+ Recent posts