IT기술/Oracle

6 Redo Log 관리하기

dobbby 2013. 12. 4. 18:02
반응형

오라클에서는 장애가 발생했을 경우 복구를 하기 위해서 데이터에 변경이 생길 경우 변경되기 전의 내용과 변경된 후의 내용을 모두 기록해둔다.

기록되는 메모리는 Redo Log Buffer, 파일이 Redo Log File 이다. 이러한 기능이 Redo Log 이다.


1. Redo Log 의 생성 원리


* Write Log Ahead

실제 데이터를 변경하기 전에 Redo Log 에 먼저 기록한 후 데이터를 변경한다.

DBWR 이 작동하기 전에 LGWR 이 작동하는 것도 이 의미다.

오라클에서는 기본적으로 데이터를 먼저 기록하지 않고 Redo Log 부터 기록한다.


* Log force at Commit

사용자로부터 Commit 요청이 들어오면 관련된 모든 Redo Record 들을 Redo Log File 에 저장한 후 Commit 을 완료한다.

그러나 대량의 데이터 변경 후 한꺼번에 Commit 이 수행되면 성능에 악영향을 주는 경우가 발생하여

Delayed Commit (지연된 커밋) 이나 Group Commit (아주 짧은 시간 동안 모아서 한꺼번에 수행) 이란 기술이 등장한다.

LGWR 이 관련된 Redo Log 를 다 기록한 후 DBWR 이 데이터를 기록하는 동기식 커밋에서 성능 문제 때문에 비동기식 커밋이라는 기술도 나오게 된다.


Step1

사용자가 특정 데이터의 변경을 요청하는 쿼리를 수행하면 해당 SQL 을 받은 서버 프로세스는 

원하는 Block 이 Database Buffer Cache 에 있는지 확인한 후

없을 경우 해당 블록을 데이터 파일에서 찾아서 복사한 후 메모리 (Database Buffer Cache) 로 가져온다.

그 후에 해당 Block 의 해당 row 부분을 다른 사용자가 바꿀 수 없도록 해당 Block 에 Lock 을 설정한 후 (page fix)

PGA 에서 Redo Change Vector 를 생성한다.


Change Vector 란 변경된 데이터를 나중에 복구할 목적으로 Redo Iog 에 기록할 변경된 데이터에 대한 모든 정보 세트를 의미한다.


일반적으로 Redo Log 는 트랜잭션의 변경을 복구할 용도로 기록이 되는데

Commit 된 데이터를 복구할 때도 사용되지만

Rollback 데이터를 복구할 경우에도 사용된다는 뜻이다.

즉, 사용자가 Commit 한 후 아직 check point 가 발생 전에 DB 가 강제 종료되었을 때

해당 데이터를 Roll Forward 하는 내용도 저장해야 하지만

사용자가 Rollback 한 후 아직 Rollback 이 완료되지 않은 상태에서 DB 가 강제종료 되었을 경우에도

Rollback 되지 못한 데이터를 전부 Rollback 해주어야 한다.

그래서 Change Vector 에 Undo 관련내용까지 함께 저장되어 있는 것이다.


이렇게 PGA 상에서 만들어진 Change Vector 들은 Redo Record Format 으로 row 단위로 Redo Log Buffer 에 복사된다.



Step2

서버 프로세스는 PGA 에서 Change Vector 를 생성한 후 Redo Log Buffer 에서 필요한 용량을 계산한다.

그리고 PGA 에서 생성된 Change Vector 를 Redo Log Buffer 에 복사하기 위해 필요한 Latch 를 획득해야만 한다.


첫 번째로 Redo Copy Latch 를 획득해야 한다.

Redo Copy Latch 는 Change Vector 가 모두 Redo Log Buffer 에 기록될 때까지 계속 가지고 있어야 하기 때문에 여러 개가 존재한다.

Redo Copy Latch 의 수는 "_log_simultaneous_copies" 라는 히든 파라미터로 조정이 가능하다

(기본값은 CPU 개수 x 2 개이다.)


Redo Copy Latch 의 개수를 늘리는 것이 무조건 성능에 좋은 것이 아니다.

Redo Log 관련 대기현상이 많이 생기면 Latch 때문인지 Redo Log Buffer 나 Redo Log File 자체에 문제가 있는 것인지 잘 파악한 후 조치를 취해야 한다.


Step3

Redo Copy Latch 를 확보한 서버 프로세스는 Redo Log Buffer 에 내용을 기록하기 위해 다음 단계인 

Redo Allocation Latch 를 확보해야 한다.


Oracle 8i 버전까지 Redo Copy Latch 는 여러 개가 존재하지만 Redo Allocation Latch 는 1개 밖에 없어서 데이터의 변경이 많이 되는 서버일 경우에는

Redo Allocation Latch 를 확보하기 위해 많은 경합이 발생할 수 있었다. 속도저하의 원인


9i 버전부터 Redo Log Buffer 를 여러개의 공간으로 나누어 Redo Allocation Latch 를 할당해주는 Shared Redo Strand 라는 기능이 도입되었다.

Strand 란 여러개로 분할된 영역을 의미하는 것으로 LOG_PARALLELISM 파라미터 값으로 설정할 수 있다. 기본 값은 1


10g 버전 부터 LOG_PARALLELISM 파라미터가 _LOG_PARALLELISM (히든) 으로 변경되고 값을 오라클이 동적으로 관리하도록 

_LOG_PARALLELISM_DYNAMIC 파라미터가 추가되었다. 이 값을 TRUE 로 설정할 경우 오라클이 해당 Strand 개수를 자동으로 제어하도록 설정할 수 있다.

이 파라미터에 대한 오라클 권장 값은 (CPU 개수 / 8) 이다.


Redo Allocation Latch 개수 조회 방법

SQL> select count(*)

  2     from v$latch_children

  3     where name = 'redo allocation' ;


10g 버전 부터는 Shared Redo Strand 보다 더 확장된 개념인 Private Redo Strand 기능이 도입되었다.

변경이 생길 경우 Server Process 가 PGA 내부에서 Change Vector 를 생성하게 되고

그것을 Redo Log Buffer 에 기록하게 된다. 이 과정에서 각종 필요한 Latch 를 확보하기 위해 경합이 발생했고

성능에 안좋은 영향을 주게 되는데 10g 부터 각 서버 프로세스는 Shared Pool 에 자신만의 독립적인 Private Strand 공간을 만들어서

그 곳에 Change Vector 를 생성한 후 필요할 경우 LGWR 이 Redo Log File 에 바로 기록하게 된다.

Private Redo Strand 기능은 Latch 를 확보해서 Redo log Buffer 에 기록해야 하는 과정을 줄임으로써 성능을 더 향상시킬 수 있다.

이 기능을 'zero copy redo' 라고도 한다. _LOG_PRIVATE_PARALLELISM=TRUE 로 설정하면 활성화 된다. 기본값은 사용안함.


Step4

Redo Log Buffer 에 기록된 내용들 (Redo Log Buffer 에 기록된 Changed Vector를 Redo Entry 라고도 한다.) 은 특정 상황이 되면

Background Process 인 LGWR 이 일부를 Redo Log File 에 기록한 후 기록된 Redo Entries 들은 Redo Log Buffer 에서 삭제 (Flush) 한다.

정확하게 말하면

Server Process 가 아래의 상황이 되면 Redo Writing Latch 를 확보한 후 

LGWR 에게 Redo Log Buffer 에 있는 내용을 Redo Log File 에 기록하라고 요청을 하게 된다.


Redo Log Buffer 에 있는 내용들이 Redo Log File 로 기록되는 경우

1) 3초마다

LGWR 프로세스는 할일이 없을 경우 SLEEP 상태로 되었다가 

rdbms ipc message 라는 대기 이벤트의 time out 이 되는 시점인 

3초마다 한번씩 wake up 을 해서 

Redo Log Buffer 에서 Redo Log File 에 기록해야 할 내용이 있는지 찾게 된다.

기록해야 할 부분이 있으면 Redo Log File 에 기록한 후 Redo Log Buffer 에서 기록된 내용을 삭제(Flush) 한다.


2) Redo Log Buffer 의 전체 크기의 1/3 이 찼거나 1M 가 넘을 경우


3) 사용자가 Commit 또는 Rollback 을 수행할 때

사용자가 트랜잭션을 종료하게 되면 내부적인 관리번호인 SCN 이 생성되어 해당 트랜잭션이 할당되고 관리된다.


4) DBWR 이 LGWR 에게 쓰기를 요청할 때

Oracle 8i 부터는 DBWR 이 LGWR 의 on-disk RBA 값보다 큰 HIGH_RBA 값을 가진 Block 을 데이터 파일로 기록해야 할 때 

해당 Block 을 Differed Write Queue 에 먼저 기록한 후 LGWR 프로세스를 먼저 수행시켜 해당 Redo Log 를 먼저 내려쓰게 만든 후

Data Block 을 기록하는 방식으로 Sync 를 맞추게 된다.


2. Redo Log File 구성 및 관리하기

Redo Log File 은 그룹과 멤버라는 개념으로 관리되는데 

그룹은 최소 3개와 각 그룹별 최소 2개 이상의 멤버로 구성하기를 권장한다.

그룹은 최소 2개 멤버는 최소 1개보다 적을 수 없다.

LGWR이 Redo Log Buffer 의 내용을 노트에 해당하는 Redo Log File 에 내려쓰다가 

해당 파일이 가득차게 되면 다음 그룹으로 자동으로 넘어가게 된다. 

이 과정을 Log Switch 라고 부르고 Log Switch 가 발생하면 Checkpoint 신호가 발생된다.

그렇게 되면 DBWR 이 해당 로그 파일에 있는 내용 중 DB Buffer Cache 에서 데이터 파일로 저장하지 못한 변경사항들을 내려쓰게 된다.


Log Switch 가 일어나는 그룹의 순서는 Oracle 이 라운드로빈 방식으로 아라서 결정하게 된다.

즉 1번 그룹 다음에 2번 그룹이고 그 다음에 3번 그룹이 아닐 수도 있다라는 의미다.

메모리에 생성되는 Redo Log Buffer 의 크기는 일반적으로 10MB~30MB 미만인 경우가 많지만 Redo Log File 크기는 각 서버의 실정에 맞게 사용해야 한다.

권장 크기가 정해져 있지 않다.

일반적으로 1시간에 Log Switch 가 2~3회 정도 발생하게 설정하는 것을 권장하지만 업무 환경에 맞게 설정하는 것이 가장 중요하다.


(2) Redo Log File 관리하기 

1) 신규 Group 생성하기

SQL> alter database add logfile group 4

  2     '/app/oracle/oradata/testdb/redo04_a.log' size 5M ;


2) Member 추가하기

SQL> alter database add logfile member

  2     '/app/oracle/oradata/testdb/redo04_b.log' to group 4 ;


3) Member 삭제하기

SQL> alter database drop logfile member

  2     '/app/oracle/oradata/testdb/redo04_b.log' ;


4) Group 삭제하기

SQL> alter database drop logfile group 4 ;


5) 강제로 Log Switch 발생시키기

SQL> alter system switch logfile ;


6) 강제로 Checkpoint 발생시키기

SQL> alter system checkpoint ;



Redo Log File 의 상태를 나타내는 것이 CURRENT / ACTIVE / INACTIVE 3가지다.

CURRENT 란 현재 LGWR 이 내용을 기록하고 있는 상태

ACTIVE 는 Redo Log File 의 내용이 아직 DB Buffer Cache 에서 Data File 로 저장이 안되어서 지워지면 안되는 상태

INACTIVE 란 Redo Log File 의 내용이 데이터 파일에도 다 저장이 되어서 삭제되어도 된다는 의미

삭제하려면 INACTIVE 상태에서 3, 4번 명령어를 수행하면 된다.

※ 주의사항은 절대 OS 명령어로 먼저 삭제하면 안된다.



실습1. Redo Log File 관리하기

현재 상태 확인하기


SYS>!vi log.sql

set line 200

col group# for 999

col mb for 999

col member for a45

col seq# for 999

col status for a8

col arc for a5


SELECT a.group#, a.member, b.bytes/1024/1024 MB, b.sequence# "SEQ#", b.status, b.archived "ARC"

FROM v$logfile a, v$log b

WHERE a.group#=b.group#

ORDER BY 1,2

/


: wq!




SYS> @log


신규 그룹(4번) / 멤버 추가하기


SYS> alter database add logfile group 4

  2  '/app/oracle/oradata/testdb/redo04_a.log' size 5M ;


SYS> alter database add logfile member

  2  '/app/oracle/oradata/testdb/redo04_b.log' to group 4 ;


SYS> alter system switch logfile ;


1번 그룹을 Active 에서 Inactive 로 변경

SYS> alter system checkpoint ;




기존 멤버 삭제 / 그룹 삭제하기 (4번 그룹)


SYS>@log

SYS>alter system switch logfile ;


SYS>alter system checkpoint ;


SYS>alter database drop logfile member '/app/oracle/oradata/testdb/redo04_b.log' ;


위에서 삭제 했지만 여전히 파일이 남아있음
SYS>!ls /app/oracle/oradata/testdb/redo04_b.log

수동으로 삭제해준다.
SYS>!rm -fr /app/oracle/oradata/testdb/redo04_b.log
SYS>!ls /app/oracle/oradata/testdb/redo04_b.log

그룹에 멤버가 최소 1개 이상이 있어야 하기 때문에 삭제가 되지 않는다. 그룹을 삭제해야 한다.

SYS>alter database drop logfile member '/app/oracle/oradata/testdb/redo04_a.log';

SYS>alter database drop logfile group 4 ;


삭제하였으나 여전히 파일이 남아있다.

SYS>!ls /app/oracle/oradata/testdb/redo04_a.log


수동으로 삭제해준다.

SYS>!rm -fr /app/oracle/oradata/testdb/redo04_a.log

SYS>!ls /app/oracle/oradata/testdb/redo04_a.log




연습문제1. spfile 을 사용하여 아래와 같이 구성하세요.

/data/disk1/control01.ctl, redo01_a.log, redo02_a.log, redo03_a.log

         disk2/control02.ctl, redo01_b.log, redo02_b.log, redo03_b.log

         disk3/control03.ctl


각 그룹번호는 1,2,3 으로 하고 각 멤버의 크기는 10M 로 하세요.


1. control file 수정

SYS> show parameter spfile ;

현재 Control File 조회하기

SYS> select name from v$controlfile ;

Spfile 의 내용을 변경한 후 Instance 를 종료한다.

SYS> alter system set control_files='/home/oracle/data/disk1/control01.ctl', 

  '/home/oracle/data/disk2/control02.ctl', 

  '/home/oracle/data/disk3/control03.ctl' scope=spfile ;

SYS> shutdown immediate ;


대상 디렉토리를 생성하고 파일을 복사한다.

SYS> !

cd /home/oracle

mkdir disk1 disk2

cp /app/oracle/oradata/testdb/control01.ctl /home/oracle/data/disk1/control01.ctl

cp /app/oracle/oradata/testdb/control01.ctl /home/oracle/data/disk2/control02.ctl

cp /app/oracle/oradata/testdb/control01.ctl /home/oracle/data/disk3/control03.ctl

exit


정상적으로  startup 시켜서 확인한다.

SYS> startup

SYS> select name from v$controlfile ;




2. Redo Log File 관리


그룹 1,2,3 을 사용하기 위해 기존 1,2,3 을 지워야 하는데

그룹 최소 갯수는 2개 이기 때문에

임의의 그룹 2개를 생성한다.

SYS>alter database add logfile group 4 '/app/oracle/oradata/testdb/redo04.log' size 10M ;

SYS>alter database add logfile group 5 '/app/oracle/oradata/testdb/redo05.log' size 10M ;


SYS>alter system switch logfile ;

SYS>alter system checkpoint ;


기존 그룹 1,2,3 을 삭제한다.

SYS>alter database drop logfile group 1 ;

SYS>alter database drop logfile group 2 ;

SYS>alter database drop logfile group 3 ;


파일까지 삭제한다.

SYS> !rm -fr /app/oracle/oradata/testdb/redo01.log

SYS> !rm -fr /app/oracle/oradata/testdb/redo02.log

SYS> !rm -fr /app/oracle/oradata/testdb/redo03.log


1, 2, 3번을 생성한다.

SYS>alter database add logfile group 1 '/home/oracle/data/disk1/redo01_a.log' size 10M ;

SYS>alter database add logfile member '/home/oracle/data/disk1/redo01_b.log' to group 1 ;


SYS>alter database add logfile group 2 '/home/oracle/data/disk2/redo02_a.log' size 10M ;

SYS>alter database add logfile member '/home/oracle/data/disk2/redo02_b.log' to group 2 ;


SYS>alter database add logfile group 3 '/home/oracle/data/disk3/redo03_a.log' size 10M ;

SYS>alter database add logfile member '/home/oracle/data/disk3/redo03_b.log' to group 3 ;


SYS>alter system switch logfile ;

SYS>alter system checkpoint ;


4, 5번을 삭제한다.

SYS>alter database drop logfile group 4 ;

SYS>alter database drop logfile group 5 ;


SYS> !rm -fr /app/oracle/oradata/testdb/redo04.log

SYS> !rm -fr /app/oracle/oradata/testdb/redo05.log






연습문제2.

pfile 을 사용하여 아래와 같이 구성하세요. 


cd /app/oracle

mkdir data1 data2 data3


/app/oracle/data1/control01.ctl, redo01_a.rdo, redo02_a.rdo, redo03_a.rdo

data2/control02.ctl, redo01_b.rdo, redo02_b.rdo, redo03_b.rdo

data3/control03.ctl, redo01_c.rdo, redo02_c.rdo, redo03_c.rdo


1. spfile  을 pfile 로

SYS> show parameter pfile ;


spfile 로 pfile 을 만든다.

SYS> create pfile from spfile ;

SYS> !ls $ORACLE_HOME/dbs


spfile 삭제한다.

SYS> !rm -f $ORACLE_HOME/dbs/spfiletest.ora

SYS> !ls $ORACLE_HOME/dbs


재기동

SYS> shutdown immediate ;

SYS> startup


value 값이 없는 걸 보고 pfile 인걸 확인

SYS> show parameter pfile ; 




2. control file 수정

SYS> select name from v$controlfile ;


controlfile 정보를 수정하기 위해 shutdown

SYS> shutdown immediate ;




열어서 수정한다.

SYS> !vi $ORACLE_HOME/dbs/inittestdb.ora

control_files='/app/oracle/data1/control01.ctl',

'/app/oracle/data2/control02.ctl',

'/app/oracle/data3/control03.ctl'




SYS> !

$ cd /app/oracle


디렉토리 생성

$ mkdir data1 data2 data3


$ cp /home/oracle/data/disk1/control01.ctl /app/oracle/data1/control01.ctl

cp /home/oracle/data/disk1/control01.ctl /app/oracle/data2/control02.ctl

cp /home/oracle/data/disk1/control01.ctl /app/oracle/data3/control03.ctl

$ exit


SYS> startup


controlfile 확인

SYS> select name from v$controlfile ;





3. redo log file 

그룹 1, 2, 3 번 삭제하기 위해 최소 그룹 2개 생성

SYS> alter database add logfile group 4 '/app/oracle/oradata/testdb/redo04.log' size 10M ;

SYS> alter database add logfile group 5 '/app/oracle/oradata/testdb/redo05.log' size 10M ;


SYS> alter system switch logfile ;

SYS> alter system checkpoint ;




SYS> alter system switch logfile ;


그룹 1, 2, 3 삭제

SYS> alter database drop logfile group 1 ;

SYS> alter database drop logfile group 2 ;

SYS> alter database drop logfile group 3 ;


실제 파일 삭제

SYS> !rm -fr /home/oracle/data/disk1/redo01_a.log

SYS> !rm -fr /home/oracle/data/disk1/redo01_b.log

SYS> !rm -fr /home/oracle/data/disk2/redo02_a.log

SYS> !rm -fr /home/oracle/data/disk2/redo02_b.log

SYS> !rm -fr /home/oracle/data/disk3/redo03_a.log

SYS> !rm -fr /home/oracle/data/disk3/redo03_b.log




생성

SYS> alter database add logfile group 1 '/app/oracle/data1/redo01_a.rdo' size 10M ;

SYS> alter database add logfile member '/app/oracle/data1/redo02_a.rdo' to group 1 ;

SYS> alter database add logfile member '/app/oracle/data1/redo03_a.rdo' to group 1 ;


SYS> alter database add logfile group 2 '/app/oracle/data2/redo01_b.rdo' size 10M ;

SYS> alter database add logfile member '/app/oracle/data2/redo02_b.rdo' to group 2 ;

SYS> alter database add logfile member '/app/oracle/data2/redo03_b.rdo' to group 2 ;


SYS> alter database add logfile group 3 '/app/oracle/data3/redo01_c.rdo' size 10M ;

SYS> alter database add logfile member '/app/oracle/data3/redo02_c.rdo' to group 3 ;

SYS> alter database add logfile member '/app/oracle/data3/redo03_c.rdo' to group 3 ;




그룹 4, 5번 삭제

SYS> alter system swtich logfile ;

SYS> alter system checkpoint ;


SYS> alter database drop logfile group 4 ;

SYS> alter database drop logfile group 5 ;


SYS> !rm -f /app/oracle/oradata/testdb/redo04.log

SYS> !rm -f /app/oracle/oradata/testdb/redo05.log






3. 심화학습 SCN 과 Checkpoint 


(1) SCN (System Commit Number)

Commit 이 발생하게 되면 해당 트랜잭션은 고유한 번호를 부여받아서 관리한다.

SCN 번호는 DML 문장단위로 할당되는 것이 아니라 트랜잭션 단위로 할당된다.


SCN 은 크게 SCN base (4bytes) + SCN Wrap (2bytes) 으로 구성되어 있고,

초당 16,384 회를 발생시켜도 약 534년 쓸 수 있는 양 (281,474,976,710,656) 이 제공된다.

SCN Base 값이 전부 다 사용되게 되면 SCN Wrap 값이 하나씩 증가되어 사용되게 되며

만약의 경우 이 SCN 이 모두 다 사용되게 되면 0 으로 reset 된 후 새로운 Incrnation 으로 할당되어 다시 시작된다.

Incarnation 이란 마치 외국 드라마에서 시즌별로 구분하는 것과 비슷한 개념이다.

즉, 시즌 1에 몇 편 방영하고 끝나면 시즌 2로 넘어가는 것과 비슷한 개념이다.


SCN 은  Sequence 에서 발생시키는 것이 아니라 steve adams 가 개발한 "kcmgas" 라는 function 으로 구현된다.

SCN 은 아래처럼  여러 곳에 기록된다.


1. Control File Header - Checkpoint 발생 때

 - Resetlogs 발생 때

 - Incomplete Recovery 수행 때

2. Data Block (cache layer) - Block Cleanout 시 마지막 SCN 을 각 Block 에 기록한다.

3. Data Block (ITL entries) - Data Block 의 Transaction Layer 안에 있는 ITL (Interested Transaction List) Entries 에 Commit 된 SCN 정보를 기록하고 있다.

(Delayed Block Cleanout).

4. Data File Headers - 모든 데이터 파일 헤더에 아래의 경우에 SCN 을 기록한다.

                             - 마지막 Checkpoint 발생 때

- Begin Backup 수행 때

- 복구가 되었다면 사용된 마지막 SCN 을 기록한다.

5. Redo Records / Log Buffer

- Commit 이 수행되면 Commit Record 에 SCN 을 포함하여 저장하게 된다.

6. 그 외 Rollback Segment (Undo segment) 와 Tablespace Headers 에도 기록된다.


10g R2 버전 기준

SQL> show parameter commit ;


Commit 과 관련된 파라미터

- commit_point_strength : 분산 데이터 베이스 환경에서 2-Pharse commit 에 사용한다.

- commit_write : 사용자가 commit 을 하게 되면 LGWR 이 해당 트랜잭션을 Redo Log File 에 기록하게 된다.


4가지 방식

1. WAIT : 변경된 트랜잭션이 Redo log file 에 기록될 때까지 기다린다.

2. NOWAIT : 변경된 트랜잭션이 Redo log file 에 기록될 때까지 기다리지 않는다.

3. IMMEDIATE :Commit 요청이 들어오면 즉시 Redo Log File 에 기록하기 시작한다.

4. BATCH : Commit 요청이 들어오더라도 일정 시간 동안 모아서 한꺼번에 기록한다.


비동기식 커밋: Redo Log Buffer 의 내용이 아직 Redo Log File 에 기록이 완료되지 않아도 다른 작업을 할 수 있도록 성능을 높이는 방식

동기식 커밋: Server Process 가 Commit 요청을 수행할 때 LGWR 이 Redo Log Buffer 의 내용을 Redo Log File 에 기록을 완료한 후에 후속 작업을 할 수 있는 방식


1, 3 동기식 커밋 - 안정성은 좋지만 성능이 떨어진다.

2, 4 비동기식 커밋 - 그 반대, 트랜잭션이 많은 OLTP 환경이라면 조심해야 한다.


11g R2 버전

SQL> show parameter commit ;


SQL> alter system set commit_logging = immediate ;


SQL> alter system set commit_wait = nowait ;


SQL> alter system set commit_write = immediate, nowait ;


SQL> show parameter commit ;


- max_commit_propagation_delay

RAC 환경에서

Oracle 에서는 noad1 에서 발생한 정보를 node2 에


(2) System Change Number

SCN 의 또 다른 이름으로 Data File, Redo Log File, Control File 간의 동기화 정보를 맞추기 위해 사용

Data block Header, Redo records, Segment Header 에 기록된다.


(3) Checkpoint 

Commit 된 데이터를 어디까지 저장했는지 확인하기 위해 만들어 놓은 개념



반응형