Redo log

- DB에서 발생하는 모든 변경사항 기록하는 파일

- 장애시 복구를 위한 DML 문장 저장 (데이터 파일에 쓰여지지 않은 커밋된 데이터를 복구하기 위해서 사용)

- LGWR은 그룹 내의 모든 리두 로그 파일에 동시에 동일한 정보를 기록

- 최소 2개 이상의 리두 로그 그룹이 필요

- 리두로그 그룹내 멤버는 서로 다른 디스크에 저장 권고

- 각 그룹내 리두로그 멤버는 이중화 권고

  *리두로그 파일 그룹 크기를 증가시키거나 감소시키려면 새로운 리두로그 파일 그룹을 추가 후 이전 리두로그 파일 그룹을 삭제

 

STATUS : 로그 상태

V$LOG 에서 확인 가능

Status 설명
UNUSED  온라인 리두 로그가 기록된 적이 없음
새로 추가된 Redo log일 경우
CURRENT 현재 리두 로그
리두 로그가 활성화된 상태
ACTIVE 로그가 Active 상태지만 현재 리두로그는 아닌 상태
Check Point 이전 상태
crash recovery에 필요
블록복구에 사용 중일 수 있음
보관할 수도 있고 안할 수도 있음
CLEARING ALTER DATABASE CLEAR LOGFILE 명령문 이후에 빈 로그로 다시 생성됨
로그가 지워지면 UNUSED 상태로 변경됨
CLEARING_CURRENT 닫힌 스레드에서 현재 로그를 지우는 중인 상태
INACTIVE 인스턴스 복구에 더이상 필요 없는 상태
Check Point 완료 이후의 상태
media reovery에 사용 중일 수 있음
보관할 수도 있고 안할 수도 있음

 


Redo log 그룹 내 멤버 이중화

 

Redo log File 정보

리두로그 그룹 3개, 리두로그 파일이 그룹 내 단일 구성으로 되어있는 것을 확인

SELECT a.thread# "Thread#"			
     , a.group# "Group#"			
     , b.member "Logfile"			
     , a.bytes/1024/1024 "Size (MB)"	
     , a.status
     , a.sequence#
  FROM v$log a			
     , v$logfile b			
 WHERE a.group#=b.group#			
 ORDER BY 1, 2, 3

 

 

리두로그 멤버 추가

SQL> alter database add logfile member '/u01/app/oracle/oradata/ORCL/redo01_2.log' to group 1;

Database altered.

SQL> alter database add logfile member '/u01/app/oracle/oradata/ORCL/redo02_2.log' to group 2;

Database altered.

SQL> alter database add logfile member '/u01/app/oracle/oradata/ORCL/redo03_2.log' to group 3;

Database altered.

 

 

Redo log File 정보 재확인

SELECT a.thread# "Thread#"			
     , a.group# "Group#"			
     , b.member "Logfile"			
     , a.bytes/1024/1024 "Size (MB)"	
     , a.status
     , a.sequence#
  FROM v$log a			
     , v$logfile b			
 WHERE a.group#=b.group#			
 ORDER BY 1, 2, 3

 

 

Log switch 발생

SQL> ALTER SYSTEM SWITCH LOGFILE;

System altered.

 

Redo log File 정보 재확인

SELECT a.thread# "Thread#"			
     , a.group# "Group#"			
     , b.member "Logfile"			
     , a.bytes/1024/1024 "Size (MB)"	
     , a.status
     , a.sequence#
  FROM v$log a			
     , v$logfile b			
 WHERE a.group#=b.group#			
 ORDER BY 1, 2, 3

 

리두로그 그룹 2를 사용하고 있었는데 로그스위치로 인하여 그룹2의 상태는 ACTIVE 상태가 된다.

 

Log switch 두번 더 발생

다시 그룹2가 CURRENT 상태가 되고 나머지 그룹1, 3은 ACTIVE 상태가 된다.

 

 

Check point 발생

SQL> ALTER SYSTEM CHECKPOINT;

System altered.

 

Redo log File 정보 재확인

SELECT a.thread# "Thread#"			
     , a.group# "Group#"			
     , b.member "Logfile"			
     , a.bytes/1024/1024 "Size (MB)"	
     , a.status
     , a.sequence#
  FROM v$log a			
     , v$logfile b			
 WHERE a.group#=b.group#			
 ORDER BY 1, 2, 3

 

체크포인트 발생으로 그룹1, 3의 상태는 INACTIVE 상태가 된다.

 

+ Recent posts