일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Solution Architecture
- 딥레이서
- grafana on kubernetes
- jenkins
- LoadBalancer Controller
- Prometheus install
- 딥레이서 보상함수
- kubernetes 동작 원리
- terraform
- AWS 딥레이서
- 로드밸런서 컨트롤러
- 솔데스크
- 그라파나 대시보드
- livenessPorbe
- EKS 클러스터
- Kubernets on Jenkins
- 깃허브 액션
- Kubernetes
- EFS CSI Driver
- Firelens
- 그라파나 시각화
- 쿠버네티스 컴포넌트
- blue-green
- headless service
- github action 사용법
- 쿠버네티스
- helm
- 메탈LB
- Aurora cluster
- SAA 합격 후기
mingming
Oracle - Redo Log File 관리 및 장애 복구 본문
현재 리두 로그 상태 확인
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
'Database' 카테고리의 다른 글
Oracle - 데이터파일 장애 복구 (1) | 2023.10.27 |
---|---|
Oracle - Tablespace & Datafile 관리 (1) | 2023.10.27 |
Oracle - 컨트롤파일 유실 장애 복구 시나리오 (1) | 2023.10.27 |
Current Redo Log File 유실 복구 (1) | 2023.10.24 |