Oracle/백업&복구

Redolog file 장애시나리오 (운영중인 DB에 Current가 아닌, 다른 로그 그룹의 멤버들이 모두 삭제됨) ; alter database clear unarchived logfile group ; 사용예제

에몽이ㅋ 2012. 2. 13. 10:07
로그파일장애

운영중 Current가 아닌 logfile 그룹이 삭제되고, 삭제된 걸 모른체 계속 운영중 Hang이 걸려버린 상태

1. 상황확인
    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  유사한 포스팅