mingming

Oracle - Redo Log File 관리 및 장애 복구 본문

Database

Oracle - Redo Log File 관리 및 장애 복구

mingming_96 2023. 10. 27. 16:04

현재 리두 로그 상태 확인 

SQL> col member for a25

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;

    GROUP# MEMBER                            MB ARC       SEQ# STATUS
---------- ------------------------- ---------- --- ---------- ----------------
         1 /data01/ORCL/redo01.log          200 YES          1 INACTIVE
         2 /data01/ORCL/redo02.log          200 YES          2 INACTIVE
         3 /data01/ORCL/redo03.log          200 NO           3 CURRENT

- 현재 log 그룹과 member의 운영 상황을 조회한다.

- GROUP# : 그룹 번호

- MEMBER : 멤버 파일의 경로 및 파일명

- BYTES : 멤버 파일의 크기

- STATUS : 그룹의 상태 

 

UNUSED: 온라인 리두 로그 파일 그룹을 기록한 적이 없음을 나타낸다.

CURRENT :  현재 온라인 리두 로그 파일 그룹임을 나타낸다.

ACTIVE : 온라인 리두 로그 파일 그룹이 활성화되어 있으나 현재 온라인 리두 로그 파일 그룹이 아님을 나타낸다.

INACTIVE: 인스턴스 복구에 온라인 리두 로그 그룹이 더 이상 필요하지 않음을 나타낸다.

 

리두 로그 그룹 생성 및 멤버 추가 삭제

리두 로그 그룹 생성

alter database add logfile
group 4 '/data01/ORCL/redo04.log' size 200M;

 

리두 로그 그룹 멤버 추가 

alter database add logfile member '/data01/ORCL/redo04b.log' to group 4;

SQL> @log

    GROUP# MEMBER                            MB ARC       SEQ# STATUS
---------- ------------------------- ---------- --- ---------- ----------------
         1 /data01/ORCL/redo01.log          200 YES          1 INACTIVE
         2 /data01/ORCL/redo02.log          200 YES          2 INACTIVE
         3 /data01/ORCL/redo03.log          200 NO           3 CURRENT
         4 /data01/ORCL/redo04.log          200 YES          0 UNUSED
         4 /data01/ORCL/redo04b.log         200 YES          0 UNUSED

 

리두 로그 그룹 멤버 삭제

그룹에 member 가 1개일 경우 member 삭제는 불가능하며 그룹을 지워야 합니다.

SQL> alter database drop logfile member '/data01/ORCL/redo04b.log';

Database altered.

SQL> alter database drop logfile member '/data01/ORCL/redo04.log';
alter database drop logfile member '/data01/ORCL/redo04.log'
*
ERROR at line 1:
ORA-00361: cannot remove last log member /data01/ORCL/redo04.log for group 4

SQL> alter database drop logfile group 4;

Database altered.

SQL> @log

    GROUP# MEMBER                            MB ARC       SEQ# STATUS
---------- ------------------------- ---------- --- ---------- ----------------
         1 /data01/ORCL/redo01.log          200 YES          1 INACTIVE
         2 /data01/ORCL/redo02.log          200 YES          2 INACTIVE
         3 /data01/ORCL/redo03.log          200 NO           3 CURRENT

 

실제 log파일은 삭제되지 않으므로 수동으로 삭제해야 합니다.

SQL> !rm -rf /data01/ORCL/redo04*

 

리두 로그 그룹 멤버 이중화

SQL> alter database add logfile member '/data01/ORCL/redo01b.log' to group 1;

SQL> alter database add logfile member '/data01/ORCL/redo02b.log' to group 2;

SQL> alter database add logfile member '/data01/ORCL/redo03b.log' to group 3;

SQL> @log

    GROUP# MEMBER                            MB ARC       SEQ# STATUS
---------- ------------------------- ---------- --- ---------- ----------------
         1 /data01/ORCL/redo01.log          200 YES          1 INACTIVE
         1 /data01/ORCL/redo01b.log         200 YES          1 INACTIVE
         2 /data01/ORCL/redo02.log          200 YES          2 INACTIVE
         2 /data01/ORCL/redo02b.log         200 YES          2 INACTIVE
         3 /data01/ORCL/redo03.log          200 NO           3 CURRENT
         3 /data01/ORCL/redo03b.log         200 NO           3 CURRENT

6 rows selected.

 

리두 로그 파일 장애 복구

장애 상황 1 - 대기중인 멤버( STATUS : INACTIVE, ARC : YES ) 1개만 장애 발생하는 경우 

복구 방안 : 해당 member drop 후 add

 

리두 로그 그룹 1번 멤버 삭제 및 장애상황 인지 

실제 운영상의 문제는 없어 alert log 파일에만 장애를 기록하고 DB에 문제가 생기지는 않습니다. 

SQL> !rm -rf /data01/ORCL/redo01b.log 

SQL> alter system switch logfile

tail -f -n 20 /oracle/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log

Errors in file /oracle/diag/rdbms/orcl/ORCL/trace/ORCL_arc0_46748.trc:
ORA-00313: open failed for members of log group 1 of thread 1
2023-10-26T23:20:32.690375+09:00
Errors in file /oracle/diag/rdbms/orcl/ORCL/trace/ORCL_arc0_46748.trc:
ORA-00313: open failed for members of log group 1 of thread 1

 

장애 조치 - 삭제된 멤버 drop 후 add 

SQL> alter database drop logfile member '/data01/ORCL/redo01b.log';

SQL> alter database add logfile member '/data01/ORCL/redo01b.log' to group 1

SQL> @log

    GROUP# MEMBER                            MB ARC       SEQ# STATUS
---------- ------------------------- ---------- --- ---------- ----------------
         1 /data01/ORCL/redo01.log          200 YES          4 INACTIVE
         1 /data01/ORCL/redo01b.log         200 YES          4 INACTIVE
         2 /data01/ORCL/redo02.log          200 YES          5 INACTIVE
         2 /data01/ORCL/redo02b.log         200 YES          5 INACTIVE
         3 /data01/ORCL/redo03.log          200 NO           6 CURRENT
         3 /data01/ORCL/redo03b.log         200 NO           6 CURRENT

 

장애 상황 2 - 대기중인 그룹 중 archive가 완료된 그룹이 지워진 경우 - DB open 상태 

복구 방안 :  redo log group 초기화

 

리두 로그 그룹 확인 

SQL> @log
    GROUP# MEMBER                            MB ARC       SEQ# STATUS
---------- ------------------------- ---------- --- ---------- ----------------
         1 /data01/ORCL/redo01.log          200 YES          4 INACTIVE
         1 /data01/ORCL/redo01b.log         200 YES          4 INACTIVE
         2 /data01/ORCL/redo02.log          200 YES          5 INACTIVE
         2 /data01/ORCL/redo02b.log         200 YES          5 INACTIVE
         3 /data01/ORCL/redo03.log          200 NO           6 CURRENT
         3 /data01/ORCL/redo03b.log         200 NO           6 CURRENT

 

리두 로그 그룹 2번 삭제 및 로그 스위치 

로그 파일 삭제 후 로그 스위치를 반복하면 프롬프트 행이 걸립니다. 빠르게 Ctrl + c로 프롬프트를 빠져 나옵니다.

SQL> !rm -rf /data01/ORCL/redo02*

SQL> alter system switch logfile;

System altered.

SQL> /
^Calter system switch logfile
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation

SQL> @log

    GROUP# MEMBER                            MB ARC       SEQ# STATUS
---------- ------------------------- ---------- --- ---------- ----------------
         1 /data01/ORCL/redo01.log          200 NO          10 CURRENT
         1 /data01/ORCL/redo01b.log         200 NO          10 CURRENT
         2 /data01/ORCL/redo02.log          200 NO           8 INACTIVE
         2 /data01/ORCL/redo02b.log         200 NO           8 INACTIVE
         3 /data01/ORCL/redo03.log          200 NO           9 INACTIVE
         3 /data01/ORCL/redo03b.log         200 NO           9 INACTIVE

모든 리두 로그 그룹이 아카이브 되어 있지 않은 이유는 아카이브 프로세스가 순차적으로 발생되기 때문입니다. 

2번 그룹이 아카이브 되어야 다음 차례인 3번 1번이 아카이브 되는데 2번 그룹을 삭제해 아카이브 되지 않아 3번과 1번 모두 아카이브 되지 못한 상황입니다. 

로그 그룹 2번의 시퀀스 넘버가 가장 작은 것을 확인할 수 있습니다. 2번 그룹 이후로 아카이빙이 진행되지 않았다는 의미입니다. 

 

 

alert log 확인

[ORCL]/home/oracle> tail -f -n 20 /oracle/diag/rdbms/orcl/ORCL/trace/alert_ORCL.log
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: '/data01/ORCL/redo02b.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
ORA-00312: online log 2 thread 1: '/data01/ORCL/redo02.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
2023-10-26T23:39:48.146496+09:00
Errors in file /oracle/diag/rdbms/orcl/ORCL/trace/ORCL_mz00_48169.trc:
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1: '/data01/ORCL/redo02b.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7
ORA-00312: online log 2 thread 1: '/data01/ORCL/redo02.log'
ORA-27037: unable to obtain file status
Linux-x86_64 Error: 2: No such file or directory
Additional information: 7

 

장애 조치 - 리두 로그 그룹 초기화

리두 로그 파일을 drop 하고 신규로 add 해주는 명령어 입니다. 리두 로그 그룹에 장애가 발생했을 때 리두 로그 그룹을 초기화 시켜 DB 중단 없이 서비스를 제공할 수 있습니다. 해당 작업 후에 아카이브 로그 파일이 비어버리기 때문에 데이터베이스 full backup이 필요합니다. 

SQL> alter  database clear unarchived logfile group 2;

Database altered.

SQL> @log

    GROUP# MEMBER                            MB ARC       SEQ# STATUS
---------- ------------------------- ---------- --- ---------- ----------------
         1 /data01/ORCL/redo01.log          200 NO          10 CURRENT
         1 /data01/ORCL/redo01b.log         200 NO          10 CURRENT
         2 /data01/ORCL/redo02.log          200 YES          0 UNUSED
         2 /data01/ORCL/redo02b.log         200 YES          0 UNUSED
         3 /data01/ORCL/redo03.log          200 YES          9 INACTIVE
         3 /data01/ORCL/redo03b.log         200 YES          9 INACTIVE