2010. 9. 27. 17:48

오라클 리두 로그 파일 관리

리두로그 파일은 DB에 가해지는 모든 트랜젝션(수정사항)을 시간 순으로 기록하는 파일이다.

1. 리두로그 파일 상태 확인
SQL> select a.group#, a.member, b.bytes, b.status, b.sequence# from v$logfile a, v$log b where a.group# = b.group# order by 1;
GROUP#               MEMBER                                      BYTES           STATUS       SEQUENCE#
--------- ---------------------------------------- ------------ --------------   ----------
  1           /data1/ora9i/oradata/DB09/redo01.log          5242880           INACTIVE          18
  1           /data2/ora9i/oradata/DB09/redo01.log          5242880           INACTIVE          18
  2           /data1/ora9i/oradata/DB09/redo02.log          5242880           CURRENT          19
  2           /data2/ora9i/oradata/DB09/redo02.log          5242880           CURRENT          19
  3           /data1/ora9i/oradata/DB09/redo03.log          5242880           UNUSED            0
  3           /data2/ora9i/oradata/DB09/redo03.log          5242880           UNUSED            0

6 rows selected.

STATUS 의 내용은 다음과 같다.
current    :    LGRW가 현재 해당 그룹에 로그 정보를 기록중이다.
active     :    기록중인 상태는 아니지만 기록된 로그 정보를 해당하는 dirty block이 아직 데이터베이스 버퍼캐시에 남아
                  있으므로 해당 로그 그룹을 current 에 준해서 관리한다.
inactive  :    사용 대기 상태의 그룹으로서 모든 물리적인 관리 작업이 가능하다.
unused   :    관리상 inactive 와 물리적으로 동일한 상태로서, 한번도 사용된적이 없는 그룹이다.

 * 기본적인 로그의 위치는 $ORACLE_BASE/oradata/$SID/ 디렉토리에 redo01.log 형태로 저장되어 있다.

2. 로그 스위치와 체크포인트
SQL> alter system switch logfile;
SQL> alter system checkpoint;

로그 스위치는 리두로그 파일을 다음 로그파일로 기록하게 하는 명령어 이다.
이 명령어를 사용하면 기존에 사용중이던 리두로그 파일은 active 상태로 변경된다.

로그 스위치후 active 상태로 변경된 기존 로그파일을 inactive 상태로 변경시키는 것이 체크포인트 명령어이다.

* 참고로 LGWR가 리두로그 버퍼의 리두엔트리를 로그파일에 쓰게 되는 상황 4가지 이다.
  1) 트랜잭션이 커밋될때
  2) 리두 로그 버퍼가 1/3 이상 채워졌을때
  3) 리두 로그 버퍼에서 변경된 레코드의 크기가 1M를 넘기는 경우
  4) DBWR가 dirty block 을 데이터 파일에 저장하기 직전

* 체크포인트의 간격을 log_checkpoint_interval 이나 log_checkpoing_timeout 와 같은 직접적인 방법으로 조절했으나
  이제는 fast_start_mttr_target 파라미터를 이용해서 간접적으로 관리한다.
  (fast_start_mttr_target 파라미터에 설정된 값은 인스턴스 장애시 허용되는 복구 시간을 의미한다.)

3. 리두 로그 그룹의 추가 와 삭제
SQL> alter database drop logfile group [그룹 넘버];
SQL> alter database add logfle group [그룹 넘버] ('맴버파일1','맴버파일2',...) size [파일크기];
 * 리두 로그 그룹을 삭제 하였을 경우 설정만 삭제되는것이므로, OS 상에서 실질적인 파일 삭제명령어를 따로 해줘야 한다.
 * 리두 로그 그룹을 삭제시 active 상태나 currert 상태에서는 삭제가 되지 않는다.
 * 리두 로그 그룹 추가시에는 자동적으로 파일이 생성된다.

4. 리두 로그 맴버의 추가 와 삭제
SQL> alter database drop logfile member '맴버파일1','맴버파일2';
SQL> alter database add logfile member '맴버파일' to group [그룹넘버];
 * 리두 로그 맴버 삭제 하였을 경우 설정만 삭제되는것이므로, OS 상에서 실질적인 파일 삭제명령어를 따로 해줘야 한다.
 * 리두 로그 맴버 삭제시 active 상태나 currert 상태에서는 삭제가 되지 않는다.
 * 리두 로그 맴버 추가시에는 자동적으로 파일이 생성된다.

'4 Jobs > Oracle' 카테고리의 다른 글

오라클 DB Link 설정  (0) 2012.05.18
ORACLE|ORA-02085: database link AAAA connects to BBBB (DB Link 오류)  (0) 2012.05.18
ORA-03135  (0) 2011.11.24
DB Link 생성  (0) 2011.10.13