본문 바로가기

카테고리 없음

ORACLE 11g Testing about log_archive_dest_n v1.0

ORACLE 11g Testing about log_archive_dest_n v1.0

 

Date

Ver

Etc.

 12.09.17

 v1.0

 

 

 

 

 

 

 

 

 

1.    log_archive_dest_n

log_archive_dest_n 에는 다양한 옵션을 사용할 수 있다.

 

이 문서에서는 MANDATORY, OPTIONAL 에 대해

간단한 예제를 통해 확인하려 한다.

 

2.    SCENARIO

A.   하나의 OPTIONAL 경로가 사용불가능해 지는 경우

log_archive_dest_1

value : LOCATION=/backup1 OPTIONAL

 

l  Destination 사용이 불가능한 상태에서 언제까지 switching 이 가능한가

 

가상머신에서 해당 디스크를 –f 옵션으로 umount 하려 했으나 계속 디바이스 사용 상태인지라, 대신

/backup1 의 소유권을 root 로 수정했다.

 

SQL> select group#, thread#, sequence#, status

  2  from v$log;

 

    GROUP#    THREAD#  SEQUENCE# STATUS

---------- ---------- ---------- ----------------

         1          1       1591 INACTIVE

         2          1       1592 INACTIVE

         3          1       1593 CURRENT

 

SQL> save log

Created file log.sql

SQL> alter system switch logfile;

 

System altered.

 

SQL> @dst

 

   DEST_ID STATUS

---------- ---------

ERROR

-----------------------------------------------------------------

         1 ERROR

ORA-19504: "" 파일을 작성하는데 실패했습니다

 

 

SQL> @log

 

    GROUP#    THREAD#  SEQUENCE# STATUS

---------- ---------- ---------- ----------------

         1          1       1594 CURRENT

         2          1       1592 INACTIVE

         3          1       1593 ACTIVE

 

SQL> alter system switch logfile;

 

System altered.

 

SQL> @log

 

    GROUP#    THREAD#  SEQUENCE# STATUS

---------- ---------- ---------- ----------------

         1          1       1594 ACTIVE

         2          1       1595 CURRENT

         3          1       1593 ACTIVE

 

SQL> alter system switch logfile;

 

switch logfile 을 세번째 진행할 때 세션은 대기상태에 빠진다. 타 세션을 열어 대기 이벤트를 확인해보면 ’switch logfile command’ 를 대기하고 있다. 그룹이 3개인 상황에서 최초 사용하고 있던 redo log file switching 이 일어나자 ACTIVE (archiving 대상) 상태가 되었고 이 파일들에 대해 archiver 가 복제하지 못하는 상황이기에 v$archive_dest.error 에 에러메시지가 남았다. 이러한 상황에서 switching 이 두번 더 발생했을 때 최초 사용하고 있던 파일이 아카이빙 되지 않은 상황이기에 시스템에 행이 발생한다.

 

위와 같은 행동은 MANDATORY 옵션에서 나타난다. 하지만 OPTIONAL 임에도 불구하고 발생한 이유는 아래의 log_archive_min_succeed_dest  파라미터 때문이다.

 

SQL> show parameter log_archive_min_succeed_dest;

 

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

log_archive_min_succeed_dest         integer     1

SQL> alter system set log_archive_min_succeed_dest=0 scope=both;

alter system set log_archive_min_succeed_dest=0 scope=both

*

ERROR at line 1:

ORA-00068: 0 값은 log_archive_min_succeed_dest 매개변수에 부적당하며, 1 31 사이의 값이어야 합니다

 

 

해당 파라미터는 log_archive_dest 에 대해 최소 성공해야 할 경로 수이다.

1로 되어 있다는 것은 최소한 하나의 경로는 아카이빙을 성공해야 한다는 의미이고, 이로인해 optional 속성이지만 mandatory 와 같이 행동하게 된다.

 

추가로 이 파라미터는 기본값이 1이며 0으로 수정이 불가능하다.

 

이 후 /backup1 에 대해 소유권을 원복시키고 일정 시간이 지나자 ACTIVE 였던 모든 redo log file 에 대해 archiving 이 완료되었다. 디렉토리를 확인 한 결과 3개의 아카이브 파일이 생성 되었다.

 

B.   하나의 MANDATORY 경로가 사용불가능해 지는 경우

 

‘A’ 의 경우와 결과가 동일하다.

 

log_archive_dest_1

value : LOCATION=/backup1 MANDATORY

 

A 와 동일하게 세 번째 switch logfile 에서 대기하게 된다.

 

C.   하나의 MANDATORY 와 하나의 OPTIONAL MANDATORY 경로가 사용 불가능해 지는 경우

log_archive_dest_1

LOCATION=/backup1 MANDATORY

 

log_archive_dest_2

LOCATION=/u01/app/oracle/oradata/ogg1/arc OPTIONAL

 

‘A’ 에서 진행했던 내용과 동일하게 /backup1 영역에 대해 권한을 바꿔 확인하였다.

 

결과적으로 ‘A’ 케이스와 동일한 결과를 얻었다.

 

SQL> @dst

 

   DEST_ID STATUS    ERROR

---------- --------- --------------------------------------------------

         1 ERROR     ORA-19504: "" 파일을 작성하는데 실패했습니다.

         2 VALID

 

첫번째 SWITCH LOGFILE 에서 MANDATORY 로 지정했던 1번에 대해서 파일 작성을 실패하였고,

세번째 SWITCH LOGFILE 에서 DB가 행상태가 되었다.

 

MANDATORY 경로에 대해서는 ACTIVE 상태의 REDO LOG FILE 에 대해서 반드시 ARCHIVE 되어야 함을 알 수 있었다.

 

쓰기 권한을 원복하자 1,2 모두 같은 아카이브 로그를 갖게 되었다.

 

D.   하나의 MANDATORY 와 하나의 OPTIONAL OPTIONAL 경로가 사용 불가능해 지는 경우

log_archive_dest_1

LOCATION=/backup1 OPTIONAL

 

log_archive_dest_2

LOCATION=/u01/app/oracle/oradata/ogg1/arc MANDATORY

 

위 경우에는 쓰기실패 할 경로가 dest_1 이다. 다만 이 경로는 OPTIONAL dest_1 에 대해 쓰기 실패를 하지만 switch logfile 에 아무런 문제가 없다.

 

쓰기권한을 원복한 이후 일정시간이 지나면 /backup1 영역에 아카이브 로그를 쌓는데, dest_2 의 로그를 1로 복사하거나 하진 않는다. dest_1 archive log 를 확인해 보면 쓰기가 실패한 구간의 로그는 그대로 비어있다.

 

위 경우에서 log_archive_min_succeed_dest 2로 수정하게 되면 1,2 두 경로 모두 아카이빙이

성공해야 된다.

 

실제로도 세번째 switch logfile 에 행상태가 된다.

 

E.   두개의 OPTIONAL 중 하나의 OPTIONAL 경로가 사용 불가능해 지는 경우

 

log_archive_dest_1

LOCATION=/backup1 OPTIONAL

 

log_archive_dest_2

LOCATION=/u01/app/oracle/oradata/ogg1/arc OPTIONAL

 

하나의 경로가 파일 작성에 실패해도 switching log file 에 아무런 문제가 없었다. 다만 이상한 점으로 log_archive_min_succeed_dest 에 대해 2로 설정했음에도 불구하고 switching logfile 에 아무런 장애가 없었다는 점이다. (DB 가 행 걸리는 상황을 예상했다.)

 

F.    DG PRIMARY DB 에서 MANDATORY 를 사용하는데 이 경로가 사용 불가능해 지는 경우

 

log_archive_dest_2

AFFIRM SYNC SERVICE=DG2 VALID_FOR=(ALL_LOGFILES, PRIMARY_ROLE) DB_UNIQUE_NAME=dg2 MANDATORY

 

테스트는 타겟이 되는 DG2 의 리스너를 셧다운하여 LOG SWITCHING 을 하였다. 위와같이 지정해 사용하는 경우 LOCAL 경로에 MANDATORY 지정해 사용하는 경우와 동일하게 current redo log file 에 도달하면서 DB 행상태가 되었다.