본문 바로가기

Oracle/admin

Redo Log File 장애 case

기본적인 대처 순서

1. Current 파일 / Current 아닌 파일 지웠는지 확인

2. 아카이브 파일 / 노 아카이브 파일을 지웠는지 확인





case1. Current 가 아닌 1개의 member 가 삭제되는 장애

얼럿로그 확인

-> 지워진 목록 drop

SYS> alter database drop logfile member '/data/backup/close/redo01_a.log';

-> 지워진 멤버 생성

SYS> alter database add logfile member '/data/backup/close/redo01_a.log' to group 1;

끝.


case2. Current 가 아닌 1개의 group 이 삭제되는 장애

얼럿로그 확인

-> 지워진 그룹 drop

SYS> alter database drop logfile group 1;

-> DB 오픈

SYS> alter database open;

-> 지워진 그룹과 멤버 생성

SYS> alter database add logfile group 1('/data/backup/close/redo01_a.log','/data/backup/close/redo01_b.log') size 50M;

끝.


(중요) case3. Current 가 아닌 그룹 중 archive 안 된 그룹이 삭제되었고 DB 상태는 Open

얼럿로그 확인

-> 장애가 발생하는 그룹 확인

-> Redo Log 초기화 및 신규생성

SYS> alter database clear unarchived logfile group 1;

끝.

※ 서버 운영 중 특정 그룹이 지워진 후 계속 log switch 가 발생하게 되면 Archive Hang 현상이 발생하여 중단되다가 강제로 비정상 종료됨. 그리고 오라클에서는 Archiving 을 순서대로 하기 때문에 한개의 그룹에서 아카이빙이 완료되지 않으면 그 다음 그룹의 로그파일 모두 아카이빙 되지 않는다. 계속 없는 그룹에 아카이빙을 시도하다보니 Hang 이 발생하게 되는 것이다. SEQ# 가장 작은 번호부터 정체가 시작.


case4. Current 가 아닌 그룹 중 archive 안 된 그룹이 삭제되었고 DB 상태는 Close

재시작시키면 에러 발생하면서 중단됨. ORA-03113 : end-of-file on communication channel

-> 얼럿로그 확인

-> 지워진 그룹 drop

SYS> alter database drop logfile group 1;

Archive 안 된 그룹은 삭제를 할 수 없다고 에러 메시지 나옴.

-> 초기화 및 재생성

SYS> alter database clear unarchived logfile group 1;

끝.


case5. Current 그룹이 삭제된 후 DB Open 상태

얼럿로그 메시지 확인해본다.

-> 삭제된 리두 로그 그룹 멤버를 찾을 수 없다는 에러 확인.

SYS> alter database clear unarchived logfile group 1;

끝.


case6. Current 그룹이 삭제된 경우 - Shutdown immediate 로 종료

Current 그룹이 삭제된 후 DB가 종료되었다면 정상 종료인지 비정상 종료인지에 따라 향후 재시작 시 심각한 문제가 될 수 있다. 먼저 shutdown immediate; 로 종료 한 경우.

-> 얼럿 로그 확인

->삭제된 그룹의 멤버를 찾을 수 없다는 에러 확인

-> 불완전 복구 후 리셋로그 옵션으로 오픈

SYS> recover database until cancel;

Media recovery complete.

SYS> alter database open resetlogs;

Database altered.

끝.

※ 원리를 아는 것이 매우 중요하다. 

 현재 상황은 Current 상태의 Redo log group 이 삭제된 후 shutdown immediate; 로 종료된 것이다. shutdown immediate; 란 DB 버퍼캐시에 있는 내용 중 commit 완료 된 내용은 데이터 파일로 전부 저장하고 commit 안 된 내용은 rollback 한 후 종료하는 것이다. 

 테스트용 테이블에 인서트 후 커밋 했기 때문에 shutdown immediate 한 순간 해당 내용은 데이터 파일에 저장 완료되었다. 그래서 사실 복구할 필요가 없다. 그런데 Current 상태의 Redo log file 이 없기때문에 Open 되지 않는다.

 이럴 때 Control File 에는 명단이 있으나 실제 파일이 없는 Redo log 를 재생성시키는 resetlogs 옵션을 사용하는 것이다. 문제는 resetlogs 옵션은 불완전 복구를 수행했을 경우만 쓸 수 있다는 점.