=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 장애1 시작
장애 1 : 대기중인 멤버 1개만 장애 발생
 
장애발생 ----------->>>>>>>>>>>>>>>>>>
 
1. 멤버파일 1개 지워짐
SYS> !rm -f /home/oracle/oradata/testdb/redo01_a.log
SYS> !ls /home/oracle/oradata/testdb/redo01_a.log
 
SYS> alter system switch logfile;
로그스위치 일으켜도 이상 없음
SYS> /
SYS> /
SYS> /
SYS> /
 
SYS> @redo
set line 200
col group# for 999
col member for a50
col sequence# for 999
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;
 
GROUP#   MEMBER        MB   ARC  SEQ#  STATUS
------ -------------- ---- ---- ----- --------
  1     redo01_a.log    5    NO    44  CURRENT
  1     redo01_b.log    5    NO    44  CURRENT
  2     redo02_a.log    5   YES    42  INACTIVE
  2     redo02_b.log    5   YES    42  INACTIVE
  3     redo03_a.log    5   YES    43  INACTIVE
  3     redo03_b.log    5   YES    43  INACTIVE
 
 
2. 에러 확인
$ vi /home/oracle/admin/testdb/budmp/alert_testdb.log
지워진 멤버파일 redo01_a.log에 에러메시지 출력됨.
 
운영에는 문제가 없지만(ORACLE 기본 그룹최소2개, 멤버최소1개), 이후 나머지 멤버마저 지워지면 문제가 된다.
수시로 alert log 파일을 확인하여 해당 문제가 있을 시 해결해 줘야 한다.
 
에러를 발생시키는 주체 : archiver process
 : log switch 가 발생해서 archive 를 해야 하는데 해당 redo log file 이 없기에 archive를 못해서 발생하는 에러
 
 
해결 --------------->>>>>>>>>>>>>>>>>>>>
 
3. 장애 멤버 삭제 후 재생성
SYS> alter database drop logfile member '/home/oracle/oradata/testdb/redo01_a.log';
 
SYS> alter database add logfile member '/home/oracle/oradata/testdb/redo01_a.log';
 
4. 정상 작동 확인
SYS> @redo
$ vi /home/oracle/admin/testdb/budmp/alert_testdb.log
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 장애1 끝
 
 
 


 

=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 장애2 시작
장애 2 : 대기중인 그룹 중 archive 가 완료된 그룹이 지워진 경우
 : Current 아닌 하나의 그룹이 삭제, 삭제되기전에 다른 곳에 내용이 복사되었기 때문에(archive) 별 문제 없음
   Redo log file의 목적이 장애가 발생하였을때 복구하기 위함=이미 안전하게 내용을 다른곳에 복사했기때문에 큰 문제 없음
 
 
장애발생 ----------->>>>>>>>>>>>>>>>>>
 
1. 현재 상태 확인
 
SYS> @redo
GROUP#   MEMBER        MB   ARC  SEQ#  STATUS
------ -------------- ---- ---- ----- --------
  1     redo01_a.log    5    NO    44  CURRENT
  1     redo01_b.log    5    NO    44  CURRENT
  2     redo02_a.log    5   YES    42  INACTIVE
  2     redo02_b.log    5   YES    42  INACTIVE
  3     redo03_a.log    5    NO    43  ACTIVE
  3     redo03_b.log    5    NO    43  ACTIVE
 
 
2. archive 완료 된 그룹 전체 삭제
SYS> !rm -fr /home/oracle/oradata/testdb/redo02*.log
SYS> !ls /home/oracle/oradata/testdb/redo02*.log
 
SYS> shutdown abort;
SYS> startup
MOUNT까지 올라오고 에러발생
ORA-00313: open failed for members of log group 2 of thread 1
ORA-00312: online log 2 thread 1:'/dir/redo02_a.log'
ORA-00312: online log 2 thread 1:'/dir/redo02_b.log'
 
에러원인 : control file 안에는 redo log group 2번 정보가 있는데 실제 redo log group 2 파일들이 삭제되어 없기 때문
 
 
해결 --------------->>>>>>>>>>>>>>>>>>>>
 
3. 장애 생긴 그룹 삭제 후 재 생성하고 다시 open
SYS> alter database drop logfile group 2;
→ 그룹2번이 아카이브 되었기 때문에 삭제가능. NO아카이브 상태는 삭제불가.
 
SYS> alter database add logfile group 2
  2  ('/home/oracle/oradata/testdb/redo02_a.log',
  3   '/home/oracle/oradata/testdb/redo02_b.log') size 5M;
 
SYS> @redo
2번그룹 UNUSED로 새로 생성됨
 
SYS> alter database open;
 
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 장애2 끝
 
 
 




=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 장애3 시작
장애 3 : 대기중인 그룹중 archive 가 완료 안된 그룹이 지어진 경우 - DB Open 상태
 : 운영중인 서버의 redo log중 특정 그룹이 지워지고 계속 log switch가 발생하게되면
   DB 가 Hang현상이 발생하여 중단이 되다가 급기야 비정상 종료.
 : 평소 alert log 를 잘 확인하고, 이러한 장애 발생시 신속히 대처
 
 
장애발생 ----------->>>>>>>>>>>>>>>>>>
 
1. 현재 상태 확인
 
SYS> @redo
GROUP#   MEMBER        MB   ARC  SEQ#  STATUS
------ -------------- ---- ---- ----- --------
  1     redo01_a.log    5   YES    44  INACTIVE
  1     redo01_b.log    5   YES    44  INACTIVE
  2     redo02_a.log    5    NO    45  CURRENT
  2     redo02_b.log    5    NO    45  CURRENT
  3     redo03_a.log    5   YES    43  INACTIVE
  3     redo03_b.log    5   YES    43  INACTIVE
 
 
2. 그룹 삭제 - 현재 archive 완료된 1번 그룹 삭제
SYS> !rm -f /home/oracle/oradata/testdb/redo01*
SYS> !ls /home/oracle/oradata/testdb/redo01*
 
 
3. 장애확인
SYS> alter ystem switch logfile;
SYS> /
SYS> /
SYS> /
SYS> /
Hang 발생
 
SYS> @redo
GROUP#   MEMBER        MB   ARC  SEQ#  STATUS
------ -------------- ---- ---- ----- --------
  1     redo01_a.log    5    NO    44  INACTIVE
  1     redo01_b.log    5    NO    44  INACTIVE
  2     redo02_a.log    5    NO    45  INACTIVE
  2     redo02_b.log    5    NO    45  INACTIVE
  3     redo03_a.log    5    NO    43  CURRENT
  3     redo03_b.log    5    NO    43  CURRENT
 

※ ARC 부분이 전부 NO
  - 이유 : 아카이브 프로세스는 순차적으로 발생하기 때문
           (1번이 완료되어야 2번,3번그룹이 아카이빙 되는데 1번그룹이 삭제되어 아카이빙이 완료 안 되었기 때문)


 
Alert log 확인
$ vi /home/oracle/admin/testdb/budmp/alert_testdb.log
 
 
 
해결 --------------->>>>>>>>>>>>>>>>>>>>
 
4. 장애해결
 
SYS> alter database clear unarchived logfile group 1;
 : 이 명령어를 치면 컨트롤 파일의 정보를 보고 해당 그룹으 ㅣ멤버를 자동으로 삭제 후 재 생성
 : 이 명령어로 redo log group 을 재생성 하게 되면 반드시 DB전체를 Full backup 받아야 한다.
   Archive log file 이 중간에 비어버리기 때문에 그냥 넘어갔다가는 향후에 장애가 발생시켜 복구가 안됨
 
 
SYS> alter system switch logfile;
SYS> /
SYS> /
SYS> /
다시 Hang 걸림
 
$ vi /home/oracle/admin/testdb/budmp/alert_testdb.log
또 다른 에러가 발생함
 
 
- 위 명령으로 새로 생성된 그룹의 멤버 파일은 사용할 수 없다
- 문제가 되는 그룹을 수동으로 삭제하고 재 생성 해주면 해결된다.
 
SYS> alter database clear unarchived logfile group 1;
SYS> alter database drop logfile group 1;
문제가 되는 그룹 삭제
SYS> !rm -fr /home/oracle/oradata/testdb/redo01*
SYS> !ls /home/oracle/oradata/testdb/redo01*
 
 
SYS> @redo
 
GROUP#   MEMBER        MB   ARC  SEQ#  STATUS
------ -------------- ---- ---- ----- --------
  2     redo02_a.log    5    NO    53  CURRENT
  2     redo02_b.log    5    NO    53  CURRENT
  3     redo03_a.log    5    NO    52  INACTIVE
  3     redo03_b.log    5    NO    52  INACTIVE
 
 
SYS> alter database add logfile group 1
  2  ('/home/oracle/oradata/testdb/redo01_a.log',
  3   '/home/oracle/oradata/testdb/redo01_b.log') size 5M;
 
SYS> @redo
 
SYS> @redo
 
GROUP#   MEMBER        MB   ARC  SEQ#  STATUS
------ -------------- ---- ---- ----- --------
  1     redo01_a.log    5    NO     0  UNUSED
  1     redo01_b.log    5    NO     0  UNUSED
  2     redo02_a.log    5    NO    53  CURRENT
  2     redo02_b.log    5    NO    53  CURRENT
  3     redo03_a.log    5    NO    52  INACTIVE
  3     redo03_b.log    5    NO    52  INACTIVE
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 장애3 끝
 
 






=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 장애4 시작
장애 4 : 대기중인 그룹 중 archive 가 완료 안된 그룹이 지워진 경우 - DB Close
 : 그룹 하나가 지워진 후 DB가 종료된 경우.
   정상 or 비정상 종료 상관없이 DB가 종료된 후 open을 시도하게되면 open되지 않고 장애 발생함.
   Archive가 완료 되었다면 그냥 drop 하고 open 하면 되지만, archive가 안되어서 drop명령어로 삭제되지 않는다.
 
 
 
 
장애발생 ----------->>>>>>>>>>>>>>>>>>
 
 
1. 현재 상태 확인
 
SYS> @redo
GROUP#   MEMBER        MB   ARC  SEQ#  STATUS
------ -------------- ---- ---- ----- --------
  1     redo01_a.log    5   YES    54  ACTIVE
  1     redo01_b.log    5   YES    54  ACTIVE
  2     redo02_a.log    5    NO    56  CURRENT
  2     redo02_b.log    5    NO    56  CURRENT
  3     redo03_a.log    5   YES    55  ACTIVE
  3     redo03_b.log    5   YES    55  ACTIVE
 
 
2. 장애발생 시키기
SYS> !rm -fr /home/oracle/oradata/testdb/redo01_a.log /home/oracle/oradata/testdb/redo01_b.log
SYS> !ls /home/oracle/oradata/testdb/redo01*
 
SYS> alter system switch logfile;
SYS> /
SYS> /
SYS> /
Hang 발생
 
※ Hang이 발생한 상태. 다른 터미널에서 일반 계정이 접속을 시도한다면?
$ sqlplus scott/tiger
에러
ORA-00257 : archiver error. Connect internal only, until freed.
의미 : archiver error가 발생하여 일반계정은 접속불가. 관리자 계정으로 접속해서 장애 해결 GOGO~
 
 
해결 --------------->>>>>>>>>>>>>>>>>>>>
 
Hang 발생터미널 Ctrl + C 로 취소
 
SYS> shutdown abort;
 
 
3. DB재시작시키면 에러 발생하며 중단됨
SYS> startup
MOUNT 까지 올라옴
ORA-00313: open failed for members of log group 1 of thread 1
ORA-00312: online log 1 thread 1:'/home/oracle/oradata/testdb/redo01_a.log'
ORA-00312: online log 1 thread 1:'/home/oracle/oradata/testdb/redo01_b.log'
 
SYS> @redo
GROUP#   MEMBER        MB   ARC  SEQ#  STATUS
------ -------------- ---- ---- ----- --------
  1     redo01_a.log    5    NO    73  INACTIVE
  1     redo01_b.log    5    NO    73  INACTIVE
  2     redo02_a.log    5    NO    74  INACTIVE
  2     redo02_b.log    5    NO    74  INACTIVE
  3     redo03_a.log    5    NO    75  CURRENT
  3     redo03_b.log    5    NO    75  CURRENT
 
 
그룹1의 SEQ# 번호가 가장작다. 즉, 1번그룹에서 아카이빙이 안되어 나머지도 다 안됨.
 
SYS> alter database drop logfile group 1;
에러
ORA-00350: log 1 of instance testdb (thread 1) needs to be archived
ORA-00312: online log 1 thread 1:'/home/oracle/oradata/testdb/redo01_a.log'
ORA-00312: online log 1 thread 1:'/home/oracle/oradata/testdb/redo01_b.log'
삭제되지 않는다 : archive log mode 인 DB는 redo가 archive 완료 되기 전에는 절대로 삭제 or 덮어쓰지 않기 때문.
 
SYS> alter database clear unarchived logfile group 1;
삭제후 자동생성 명령
 
SYS> @redo
1번그룹 UNUSED로 새로 생성됨
 
SYS> alter database open;
 
 
 
4. log switch 를 발생시켜 문제 여부 확인 - 정상작동
SYS> alter system switch logfile;
SYS> /
SYS> /
SYS> /
SYS> /
 
 
※ DB open 상태에서 hang이 발생할때 사용했던 alter database clear unarchived logfile group N; 명령어 사용은 동일
 - DB open 상태일때 : 재생성된 redo log file 수동으로 삭제후 다시 만들어 주기
 - DB close 상태일때 : 재생성된 redo log file 그냥 사용 가능
 
 
=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=- 장애4 끝
 

Posted by 딩구르
,