ORACLE 11g Testing about log_archive_dest_n v1.0
12.09.17 |
v1.0 |
|
|
|
|
|
|
|
1. log_archive_dest_n
log_archive_dest_n 에는 다양한 옵션을 사용할 수 있다.
이 문서에서는 MANDATORY, OPTIONAL 에 대해
간단한 예제를 통해 확인하려 한다.
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 행상태가 되었다.