본문 바로가기

빅데이터과정/RAC

#43_140812_RAC_REDO LOG FILE

728x90
# REDO LOG FILE











1.     노드간 select를 하는 경우의 데이터 흐름
Scott이 노드1번에 접속하고 아래와 같은 쿼리를 보냈다면 버퍼캐시에 데이터가 있으면 가져다 쓰고 아니면 디스크에서 캐시로 전달해서 쓴다
select ename,sal from emp where ename=’KING’
이 상황에서 2번 노드에서 아래와 같이 쿼리를 날린다면 1번 노드에서KING의 데이터를 조회했기 때문에 1번 노드에서 데이터를 가져온다이것은 양쪽 노드간에 interconnect가 되어있기 때문이다.
select ename, sal, from emp where ename=’KING’

2.     노드간 update 하는 경우의 데이터 흐름
만약에 아래와 같이 node1에서 업데이트를 한 상태에서 아직 commit을 안했다면 buffer cache에는 9000으로 업데이트 되어 있고 디스크에는 아직5000으로 되어있다
이 상황에서 2번 노드가 KING의 월급을 조회한다면?
이 상황이라면 아직 commit을 안했기 때문에 5000의 데이터를 읽어야 한다.이럴 때는 buffer cache에 rollback cache가 있는데 이곳에는 아직 KING의 월급이 5000으로 저장되어 있어 이 데이터를 넘겨준다.
update emp set sal 9000 where ename=’KING’;

3.     update 이후에 commit을 할 경우의 데이터 흐름
update 이후에 1번 노드가 commit을 한 상태에서 2번 노드가 KING의 월급을 조회한다면 1번 노드가 2번 노드로 데이터를 전달해준다.
이 상태에서 checkpoint가 일어난다면 1번 노드가 아니라 2번 노드의DBWR DB에 내려쓴다.
즉 최신 데이터를 가진 DBWR가 데이터를 DB에 저장한다

4.     각각의 세션은 각각의 redo log file에 나눠 저장된다

5.     checkpoint event
메모리의 변경사항을 주기적으로 자동으로 발생시키는 이벤트
이 이벤트를 발생시키는 백그라운드 프로세서는 CKPT이다.




Redo log file 조회

SQL> select group#, status, sequence#, thread# from v$log;
    GROUP# STATUS            SEQUENCE#    THREAD#
---------- ---------------- ---------- ----------
         1 INACTIVE                 13          1
         2 CURRENT                  14          1
         3 INACTIVE                 17          2
         4 CURRENT                  18          2
thread# : 몇번 인스턴스의 리두로그 그룹인지 구분해주기 위한 번호



>> 1번 인스턴스에서 로그 스위치를 발생시키면서 LGWR가 1번 인스턴스의 리두 로그 그룹들만 사용하는지 확인

SQL> alter system switch logfile;
SQL> select group#, status, sequence#, thread# from v$log;
    GROUP# STATUS            SEQUENCE#    THREAD#
---------- ---------------- ---------- ----------
         1 CURRENT                  15          1
         2 INACTIVE                 14          1
         3 INACTIVE                 17          2
         4 CURRENT                  18          2

SQL> alter system switch logfile;
SQL> select group#, status, sequence#, thread# from v$log;
    GROUP# STATUS            SEQUENCE#    THREAD#
---------- ---------------- ---------- ----------
         1 ACTIVE                   15          1
         2 CURRENT                  16          1
         3 INACTIVE                 17          2
         4 CURRENT                  18          2

SQL> alter system switch logfile;
SQL> select group#, status, sequence#, thread# from v$log;
    GROUP# STATUS            SEQUENCE#    THREAD#
---------- ---------------- ---------- ----------
         1 CURRENT                  17          1
         2 INACTIVE                 16          1
         3 INACTIVE                 17          2

logfile을 switch를 계속 하자 thread가 1번 번호인 즉 1번 노드에서만switch가 일어나는 것을 확인할 수 있다
결국 각각의 노드는 할당된 redo log file을 가진다는 것을 알 수 있다




Redo log file 추가
아래의 그림은 2번 인스턴스를 위한 redo log 그룹을 그룹번호 4번과 5번으로2개를 추가한다




Redo log file 추가

>> 1번 인스턴스를 위한 Redo log group을 6번으로 해서 추가

SQL#1> alter database add logfile thread 1 group 6;
SQL#1> select group#, status, sequence#, thread# from v$log;
SQL#1> alter database add logfile thread 2 group 5;

    GROUP# STATUS            SEQUENCE#    THREAD#
---------- ---------------- ---------- ----------
         1 CURRENT                  17          1
         2 INACTIVE                 16          1
         3 CURRENT                  19          2
         4 INACTIVE                 18          2
         5 UNUSED                    0          2
         6 UNUSED                    0          1

>> 로그 스위치를 일으키고 로그 그룹의 상태가 current인지active 인지 확인

# 1번 Session

SQL#1> select group#, status, sequence#, thread# from v$log;

    GROUP# STATUS            SEQUENCE#    THREAD#
---------- ---------------- ---------- ----------
         1 CURRENT                  17          1
         2 INACTIVE                 16          1
         3 CURRENT                  19          2
         4 INACTIVE                 18          2
         5 UNUSED                    0          2
         6 UNUSED                    0          1

SQL#1> alter system switch logfile;
SQL#1> alter system switch logfile;
SQL#1> select group#, status, sequence#, thread# from v$log;
    GROUP# STATUS            SEQUENCE#    THREAD#
---------- ---------------- ---------- ----------
         1 ACTIVE                   17          1
         2 CURRENT                  19          1
         3 CURRENT                  19          2
         4 INACTIVE                 18          2
         5 UNUSED                    0          2
         6 ACTIVE                   18          1


# 2번 Session

SQL#1> select group#, status, sequence#, thread# from v$log;
    GROUP# STATUS            SEQUENCE#    THREAD#
---------- ---------------- ---------- ----------
         1 ACTIVE                   17          1
         2 CURRENT                  19          1
         3 CURRENT                  19          2
         4 INACTIVE                 18          2
         5 UNUSED                    0          2
         6 ACTIVE                   18          1

SQL#2> alter system switch logfile;
SQL#2> select group#, status, sequence#, thread# from v$log;
    GROUP# STATUS            SEQUENCE#    THREAD#
---------- ---------------- ---------- ----------
         1 ACTIVE                   17          1
         2 CURRENT                  19          1
         3 ACTIVE                   19          2
         4 INACTIVE                 18          2
         5 CURRENT                  20          2
         6 ACTIVE                   18          1

SQL#2> alter system switch logfile;
SQL#2> select group#, status, sequence#, thread# from v$log;
    GROUP# STATUS            SEQUENCE#    THREAD#
---------- ---------------- ---------- ----------
         1 INACTIVE                 17          1
         2 CURRENT                  19          1
         3 ACTIVE                   19          2
         4 CURRENT                  21          2
         5 ACTIVE                   20          2
         6 ACTIVE                   18          1


>> 방금 추가한 그룹 5번과 그룹 6번은 redo log group을 삭제

SQL#1> select group#, status, sequence#, thread# from v$log;
    GROUP# STATUS            SEQUENCE#    THREAD#
---------- ---------------- ---------- ----------
         1 CURRENT                  20          1
         2 ACTIVE                   19          1
         3 CURRENT                  22          2
         4 ACTIVE                   21          2
         5 INACTIVE                 20          2
6 INACTIVE                 18          1

SQL#1> alter database drop logfile group 5;
SQL#1> alter database drop logfile group 6;
drop 하기전에 switch를 일으켜서 inactive 상태로 만들어야 한다
참고적으로 unused 상태일 경우에도 가능하다





'빅데이터과정 > RAC' 카테고리의 다른 글

#44_140813_RAC_DATAFILE 복구  (0) 2014.08.13
#43_140812_RAC_전자지갑  (0) 2014.08.12
#43_140812_RAC_INSTANCE STOP START  (0) 2014.08.12
#43_140812_RAC_UNDO TABLESPACE  (0) 2014.08.12
#44_140811_RAC_환경구성  (0) 2014.08.11