오라클] 리두 로그 파일(Redo Log File)

2017.07.18 07:00


 리두 로그 파일(Redo Log File)



리두 로그 파일이란


리두 로그 파일은 오라클이 데이터베이스에서 발생한 모든 변경사항을 기록하는 파일이다. 


오라클에서 데이터의 변경이 발생하면 실제 데이터를 변경시키는 DBWR(Database Writer)이 작동하기 전에 LGWR(Redo Log Writer)이 먼저 리두 로그 버퍼 캐시에 리두 로그를 작성한다. 

(리두 로그 버퍼가 일정 수준 채워지면 디스크의 리두 로그 파일로 저장)





리두 로그 파일이 장애발생시 복구를 위해 매우 중요하기 때문에 복사본을 가지고있다. (리두 로그 파일 멤버)


동일한 내용을 갖고 있는 멤버들의 집합을 리두 로그 그룹이라고 한다. 


첫번째 리두 로그 그룹에 있는 멤버 파일에 리두 로그 내용을 기록하고, 해당 파일이 가득차면 다음 그룹으로 넘어가고(이를 로그 스위치(log switch)라고 한다) 모든 그룹의 파일이 다 기록되면 첫번째 그룹으로 다시 순환된다.



오라클에서는 최소 그룹 갯수는 2, 각 그룹별로 최소 멤버는 1개를 갖도록 규정했지만 실제 운영에 있어서는 그룹 갯수는 3, 각 그룹별로 최소 2개 이상의 멤버를 갖도록 권장된다. 




리두 로그 파일 조회



select * from v$logfile;


select group#, sequence#, members, status from v$log;



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
SQL> col member for a30
SQL> select * from v$logfile;
 
    GROUP# STATUS  TYPE    MEMBER              IS_
---------- ------- ------- ------------------------------ ---
     3       ONLINE  /ora_data/OELORA/redo03.log      NO
     2       ONLINE  /ora_data/OELORA/redo02.log      NO
     1       ONLINE  /ora_data/OELORA/redo01.log      NO
 
 
SQL> select group#, sequence#, members, status from v$log;
 
    GROUP#  SEQUENCE#     MEMBERS STATUS
---------- ---------- ---------- ----------------
     1       10           1 INACTIVE
     2       11           1 CURRENT
     3        9           1 INACTIVE
cs





리두 로그 그룹 추가


alter database add logfile group 4 '리두로그파일' size 파일크기;


1
2
3
4
5
6
7
8
9
10
11
12
SQL> alter database add logfile group 4 '/ora_data/redo04_01.log' size 5M;
 
Database altered.
 
SQL> select * from v$logfile;
 
    GROUP# STATUS  TYPE    MEMBER              IS_
---------- ------- ------- ------------------------------ ---
     3       ONLINE  /ora_data/OELORA/redo03.log      NO
     2       ONLINE  /ora_data/OELORA/redo02.log      NO
     1       ONLINE  /ora_data/OELORA/redo01.log      NO
     4       ONLINE  /ora_data/redo04_01.log       NO
cs





리두 로그 멤버 추가


alter database add logfile member '리두로그파일' to group 번호;

-- 리두 로그 멤버는 기존 맴버와 동일한 용량의 파일로 만들기 때문에 별도 파일 크기에 대한 지정이 필요없음



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
-- 로그파일 그룹에 로그파일 멤버 추가
 
SQL> alter database add logfile member '/ora_data/rodo04_02.log' to group 4;
 
Database altered.
 
SQL> select * from v$logfile;
 
    GROUP# STATUS  TYPE    MEMBER              IS_
---------- ------- ------- ------------------------------ ---
     3       ONLINE  /ora_data/OELORA/redo03.log      NO
     2       ONLINE  /ora_data/OELORA/redo02.log      NO
     1       ONLINE  /ora_data/OELORA/redo01.log      NO
     4       ONLINE  /ora_data/redo04_01.log      NO
     4 INVALID ONLINE  /ora_data/rodo04_02.log      NO
 
cs



- 리두로그 파일을 만든 후 한 번도 사용하지 않았으면 INVALID로 나온다. 

- 아래에 나오는 예를 보면 alter system switch logfile 명령어로 강제로 로그 스위치(log switch)가 일어나도록하면 INVALID는 없어진다. 




로그 스위치(Log Switch)



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
-- 강제로 로그 스위치
SQL> alter system switch logfile;
System altered.
 
SQL> select group#, sequence#, members, status from v$log;
    GROUP#  SEQUENCE#     MEMBERS STATUS
---------- ---------- ---------- ----------------
     1       10           1 INACTIVE
     2       11           1 INACTIVE
     3       12           1 ACTIVE
     4       13           2 CURRENT
 
SQL> alter system checkpoint;
System altered.
 
SQL> select group#, sequence#, members, status from v$log;
    GROUP#  SEQUENCE#     MEMBERS STATUS
---------- ---------- ---------- ----------------
     1       10           1 INACTIVE
     2       11           1 INACTIVE
     3       12           1 INACTIVE
     4       13           2 CURRENT
 
SQL> select * from v$logfile;
    GROUP# STATUS  TYPE    MEMBER              IS_
---------- ------- ------- ------------------------------ ---
     3       ONLINE  /ora_data/OELORA/redo03.log      NO
     2       ONLINE  /ora_data/OELORA/redo02.log      NO
     1       ONLINE  /ora_data/OELORA/redo01.log      NO
     4       ONLINE  /ora_data/redo04_01.log      NO
     4       ONLINE  /ora_data/rodo04_02.log      NO
cs


- 리두 로그 파일이 상태(Status)가 Active인 것은 로그 스위치는 일어났지만 리두 로그 내용을 Data File에 아직 내려쓰지 못한 상태이다. 이 때는 alter system checkpoint 명령으로 강제로 checkpoint를 발생시키면  DB Buffer Cache에 있는 내용을 데이터 파일에 저장하고 리두 로그 파일을 Inactive 상태로 만든다. 

(리두 로그 파일의 삭제같은 명령은 리두 로그 파일이 inactive 상태일 때만 가능하다)




리두 로그 파일 크기


리두 로그 파일의 크기가 너무 작으면 로그 스위치가 너무 자주 발생하기 때문에 성능 저하의 문제 생김.

리두 로그 파일의 크기가 너무 크면 파일이 손상되었을 때 복구에 문제가 생길 수 있다.


일반적으로 1시간에 로그 스위치가 2~3회 정도 발생하게 설정하는 것을 권장


Alert log file에 checkpoint not completed 라는 메시지가 나오는 것은 로그 스위치가 발생하고 리두 로그 파일의 내용을 데이터 파일에 기록하는 중에 다시 로그 스위치가 발생하면서 checkpoint 신호가 들어올 경우 발생하는 로그 메시지임. 이럴 때는 맴버 크기를 크게 만들거나 그룹을 더 만들어주는 것을 권장한다.

저작자 표시 비영리 변경 금지
신고

또루아빠 SQL(오라클,mysql) , , , , , , ,

티스토리 툴바