로그파일장애
운영중 Current가 아닌 logfile 그룹이 삭제되고, 삭제된 걸 모른체 계속 운영중 Hang이 걸려버린 상태
1. 상황확인
2. 장애발생을 모르고 계속 DB를 운영
3. 다른 접속으로 접속해서 사태파악
4-1. 문제해결(일단 DB에 걸린 Hang 해결)
4-2. 문제해결(문제를 원천적으로 해결)
5. 이후 DB는 정상적으로 운영이 가능합니다.
완료!
6. 이후 꼭 백업을 받으세요!!
http://blog.naver.com/chosuky?Redirect=Log&logNo=100092132337 유사한 포스팅
GROUP# MEMBER SEQUENCE# ARC STATUS ---------- --------------------------------------------- ---------- --- ---------------- 1 /home/oracle/oradata/testdb/redo01_a.log 24 NO CURRENT 1 /home/oracle/oradata/testdb/redo01_b.log 24 NO CURRENT 2 /home/oracle/oradata/testdb/redo02_a.log 23 YES INACTIVE 2 /home/oracle/oradata/testdb/redo02_b.log 23 YES INACTIVE 3 /home/oracle/oradata/testdb/redo03.log 22 YES INACTIVE 3 /home/oracle/oradata/testdb/redo03_b.log 22 YES INACTIVE SQL> !rm -v /home/oracle/oradata/testdb/redo03* removed `/home/oracle/oradata/testdb/redo03.log' removed `/home/oracle/oradata/testdb/redo03_b.log' *************장애발생*************
2. 장애발생을 모르고 계속 DB를 운영
SQL> insert into scott.test01(no) values(1); 1 row created. SQL> insert into scott.test01 2 select * from scott.test01; 1 row created. SQL> / 2 rows created. SQL> / 4 rows created. SQL> / 8 rows created. SQL> / 16 rows created. .... 생략 .... SQL> / / 16384 rows created. SQL> 32768 rows created. SQL> / 65536 rows created. SQL> / 131072 rows created. SQL> 262144 rows created. SQL> / 524288 rows created. SQL> / 1048576 rows created. SQL> / 아무리 기다려도 insert가 되지 않습니다. **************************HANG 발생**********************************
3. 다른 접속으로 접속해서 사태파악
SQL> conn scott/tiger ERROR: ORA-00257: 아카이버 오류. 공간이 확보되기 전에는 내부 접속만 가능. Warning: You are no longer connected to ORACLE. SQL> SQL> conn / as sysdba Connected. SQL> @log GROUP# MEMBER SEQUENCE# ARC STATUS ---------- --------------------------------------------- ---------- --- ---------------- 1 /home/oracle/oradata/testdb/redo01_a.log 27 NO CURRENT 1 /home/oracle/oradata/testdb/redo01_b.log 27 NO CURRENT 2 /home/oracle/oradata/testdb/redo02_a.log 26 NO ACTIVE 2 /home/oracle/oradata/testdb/redo02_b.log 26 NO ACTIVE 3 /home/oracle/oradata/testdb/redo03.log 25 NO INACTIVE 3 /home/oracle/oradata/testdb/redo03_b.log 25 NO INACTIVE 6 rows selected.
문제발견 및 해결
모든 log들이 archiving이 되지 못하고 있고, seq#가 제일 낮은 group 3에 문제가 있다는 것을 발견
일단 hang을 풀어주기 위해 clear unarchived logfile group 3실행
4-1. 문제해결(일단 DB에 걸린 Hang 해결)
SQL> alter database clear unarchived logfile group 3; Database altered. (원래 창 SQL> / 2097152 rows created. << Hang 이 풀렸다는 것을 알 수 있습니다. ) SQL> @log GROUP# MEMBER SEQUENCE# ARC STATUS ---------- --------------------------------------------- ---------- --- ---------------- 1 /home/oracle/oradata/testdb/redo01_a.log 27 YES ACTIVE 1 /home/oracle/oradata/testdb/redo01_b.log 27 YES ACTIVE 2 /home/oracle/oradata/testdb/redo02_a.log 26 YES INACTIVE 2 /home/oracle/oradata/testdb/redo02_b.log 26 YES INACTIVE 3 /home/oracle/oradata/testdb/redo03.log 28 NO CURRENT 3 /home/oracle/oradata/testdb/redo03_b.log 28 NO CURRENT 6 rows selected.
그룹 3번은 DB운영중 clear unarchived logfile로 임시로 생성된 logfile 이므로, drop 하고 다시 만들어줘야합니다.
하지만, Current그룹이라 drop 할 수가 없습니다. (이렇게 하지 않으면, 계속해서 group 3때문에 Hang이 걸립니다.)
이떄는, log switch 를 한번 일으켜주고, 다시 clear unarchived logfile group 3을 실행하면 됩니다.
4-2. 문제해결(문제를 원천적으로 해결)
SQL> alter system switch logfile; System altered. SQL> @log GROUP# MEMBER SEQUENCE# ARC STATUS ---------- --------------------------------------------- ---------- --- ---------------- 1 /home/oracle/oradata/testdb/redo01_a.log 27 YES ACTIVE 1 /home/oracle/oradata/testdb/redo01_b.log 27 YES ACTIVE 2 /home/oracle/oradata/testdb/redo02_a.log 29 NO CURRENT 2 /home/oracle/oradata/testdb/redo02_b.log 29 NO CURRENT 3 /home/oracle/oradata/testdb/redo03.log 28 NO ACTIVE 3 /home/oracle/oradata/testdb/redo03_b.log 28 NO ACTIVE 6 rows selected. SQL> alter database clear unarchived logfile group 3; Database altered. SQL> @log GROUP# MEMBER SEQUENCE# ARC STATUS ---------- --------------------------------------------- ---------- --- ---------------- 1 /home/oracle/oradata/testdb/redo01_a.log 27 YES INACTIVE 1 /home/oracle/oradata/testdb/redo01_b.log 27 YES INACTIVE 2 /home/oracle/oradata/testdb/redo02_a.log 29 NO CURRENT 2 /home/oracle/oradata/testdb/redo02_b.log 29 NO CURRENT 3 /home/oracle/oradata/testdb/redo03.log 0 YES UNUSED 3 /home/oracle/oradata/testdb/redo03_b.log 0 YES UNUSED 6 rows selected. 문제가 있는 그룹3을 drop하고 파일까지 지운후, 다시 재생성 SQL> alter database drop logfile group 3; Database altered. SQL> !rm -v /home/oracle/oradata/testdb/redo03* removed `/home/oracle/oradata/testdb/redo03.log' removed `/home/oracle/oradata/testdb/redo03_b.log' SQL> alter database add logfile group 3( 2 '/home/oracle/oradata/testdb/redo03_a.log','/home/oracle/oradata/testdb/redo03_b.log') 3 size 10M; Database altered. SQL> @log GROUP# MEMBER SEQUENCE# ARC STATUS ---------- --------------------------------------------- ---------- --- ---------------- 1 /home/oracle/oradata/testdb/redo01_a.log 27 YES INACTIVE 1 /home/oracle/oradata/testdb/redo01_b.log 27 YES INACTIVE 2 /home/oracle/oradata/testdb/redo02_a.log 29 NO CURRENT 2 /home/oracle/oradata/testdb/redo02_b.log 29 NO CURRENT 3 /home/oracle/oradata/testdb/redo03_a.log 0 YES UNUSED 3 /home/oracle/oradata/testdb/redo03_b.log 0 YES UNUSED 6 rows selected.
5. 이후 DB는 정상적으로 운영이 가능합니다.
SQL> insert into scott.test01 select * from scott.test01; 4194304 rows created. << Hang이 걸리지 않고 정상적으로 운영됨
완료!
6. 이후 꼭 백업을 받으세요!!
http://blog.naver.com/chosuky?Redirect=Log&logNo=100092132337 유사한 포스팅