REDO, UNDO가 궁금해서 먼저 살펴봅니다.

 

9.1 REDO, UNDO를 왜 알아야 합니까?

- 트랜젝션에서는 ACID라는 특성이 있음

- 이 구성을 위해서는 REDO, UNDO는 꼭 알아야 함

Atomicity : 원자성 : 수행 중인 트랜잭션에서 데이터를 일부만 변경하고 나머지는 수행되지 않을 채 커밋 불가

Consistency : 일관성 : 트랜잭션에 의해 데이터 간의 일관성이 어긋나면 안 됨

Isolation : 고립성 : 트랜잭션끼리는 고립되고 독립되어야 함

Durability : 지속성 : 트랜잭션은 장애가 발생해도 데이터는 반드시 복구되어야 함

 

=> 장비가 꺼져도 커밋한 데이터는 반드시 복구 가능

=> 어중간한 데이터 변경 불가

=> 트랜잭션 단위로 변경/롤백되어야 함

=> 다른 트랜잭션과 동시에 실행하든 단독으로 실행하든 결과는 같아야 함

 

9.2 지속성 구현

- 커밋한 데이터는 지킨다.

- 데이터에 변경이 일어나면 이를 디스크에 기록하면 되는데, 디스크 I/O는 시간이 많이 걸린다.

- 대량이 데이터를 변경하면 커밋을 하는데 시간이 너무 많이 걸림 => 상용 DBMS에서는 변경 로그를 사용하여 성능과 지속성을 구현함

- 오라클은 REDO로그를 사용하여 성능, 지속성 확보 : REDO로그에 데이터는 한꺼번에 기록하여 I/O의 횟수가 줄어들고, 시퀀셜 액세스를 해서 I/O소요 시간을 줄임

=> REDO 없이 변경내용을 실제 디스크의 변경점에 직접 기록하지 않고, 여러 변경점들을 REDO로그에만 기록해서 I/O횟수, 시간 줄임

 

9.3 REDO와 UNDO의 개념

Q) 정보가 손상되면, 과거로 돌아가야 하는데, 과거로 돌아가기 위해서 필요한 정보는? 

A) 정보가 손상된 시점에서 최신 상태까지 복구하기 위한 정보가 필요함

=> 1) 변경 정보

=> 2) 어떤 시점의 데이터 상태

- 두 정보를 알면, 어떤 과거의 시점으로부터 어떤 변경이 일어났는지 알 수 있음

 

REDO : 누가 무엇을 한 정보 = 변경 정보, REDO로그를 이용해서 과거의 데이터를 최신 데이터 쪽으로 흐르게 할 수 있음(롤 포워드)

UNDO : UNDO로그를 사용해서 변경을 취소할 수 있음(롤백)

=> UNDO로 과거의 어떤 시점으로 돌아간 뒤, REDO로 최신의 데이터로 변경함

 

9.4 REDO 구조

- 데이터의 변경은 버퍼 캐시에서 일어나고, 그때 REDO로그가 생성됨(커밋이 일어나기 전에)

 

EX.

1) UPDATE문

2) 서버 프로세스가 REDO, UNDO를 로그 버퍼에 기록 + 캐시에 있는 블록의 데이터 변경

3) UNDATE완료 통보

 

- 오라클은 REDO로그를 커밋이 발생하기 전에 디스크에 기록함

- 공유 메모리에 REDO로그 버퍼가 있음

- REDO로그를 디스크에 REDO로그 파일로 기록하는 일은 LGWR라는 백그라운드 프로세스가 수행함

- REDO로그 파일은 개수가 한정되어있고, 크기 제한도 있어서 계속 보관을 불가능해서, 아카이브 REDO로그 파일이라는 오랫동안 REDO로그를 보관하기 위한 파일이 존재

- REDO로그 파일은 REDO로그의 일시적인 보관소이고, 아카이브 REDO로그 파일이 오랜 시간 보관할 수 있는 본격적인 보관소

 

1) 서버 프로세스가 공유 메모리 상의 REDO 로그 버퍼에 REDO로그 기록 (커밋 전)

2) LGWR은 서버 프로세스가 커밋하면 혹은, 자발적으로 REDO로그를 REDO로그 버퍼에서 REDO로그 파일에 기록하고 기록이 끝났다고 서버 프로세스에 통보

3) 서버 프로세스는 커밋이 끝난 것을 클라이언트에 통보

4) ARCH가 REDO로그 파일을 아카이브 REDO로그 파일에 옮김

 

- REDO로그 파일은 중요한 파일이므로 반드시 다중화해야 함, 일반적으로 REDO로그 그룹을 여러 개 세트로 만들고, 그룹 안에 새로운 REDO로그 파일을 추가

 

- LGWR은 여러 개의 서버 프로세스의 REDO로그를 한꺼번에 기록하므로 높은 처리량을 구현

- 커밋할 때 블록을 디스크가 아닌 REDO로그에 기록해서 빠른 커밋 구현

- 장비 장애가 발생해서 DBWR이 데이터를 기록할 틈에 없었더라고, REDO로그와 데이터 파일에 있는 과거 데이터로 데이터 복구(롤 포워드)가 가능

 

 

작성 중...

'DATABASE > oracle' 카테고리의 다른 글

Oracle 메모리 (undo, redo, archive)  (0) 2023.06.04
Parallel Processing  (0) 2023.06.04
[Oracle] 3. 캐시와 공유 메모리  (0) 2021.07.12
[Oracle] 2. 오라클의 여러 프로세스  (0) 2021.07.12
[Oracle] 1. I/O와 디스크의 관계  (0) 2021.07.12