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이다.
n 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을 가진다는 것을 알 수 있다 |
l Redo log file 추가
- 아래의 그림은 2번 인스턴스를 위한 redo log 그룹을 그룹번호 4번과 5번으로2개를 추가한다
n 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 |