새소식

Oracle 10g

[ORACLE] UNDO 와 REDO 그리고 차이점

  • -
1-1. UNDO Segement란?
 - Rollback과 Undo는 기본적으로는 동의어 입니다.
 - Oracle 9i 이전엔 Rollback Segement라는 용어를 사용했는데, Oracle 9i 이후버전 부터는 Undo Segment라는 용어를 사용합니다.
 - Rollback(Oracle 9i 이전 버전) = Undo(Oracle 9i 이후 버전)
 - Undo 세그먼트는 관리 방식에 있어서 9i 이후 버전에서 자동 관리 모드와 수동 관리 모드를 선택 할 수 있는 기능이 추가 되었고, 트랜잭션 처리를 위한 알고리즘이 개선되었습니다.
 - Undo 세그먼트는 생성, 할당 및 튜닝을 오라클 서버가 관리하므로 DBA는 더 이상 몇개의 Rollback 세그먼트를 생성 할 것인지, 크기는 어떻게 할 것인지, 트랜잭션에 따라 어떻게 할당할 것인지를 결정하지 않아도 됩니다. 


1-2. Undo Segement 목적
- Undo Segments는 Transaction Rollback, 일기 일관성 유지(Read Consistency), Transaction Recovery를 위해 존재 합니다.
- Transaction Rollback란 Oracle 서버에서 Undo Segment에 저장된 값을 이용해서 원래의 값으로 복원하는 기능을 말합니다. Transaction Rollback이 실행되는 경우는 사용자가 Rollback command를 실행하거나, Transaction이 비정상 종료되어 PMON이 자동 Rollback 처리하는 경우 입니다. 
- 읽기 일관성이란 Transaction이 진행되는 동안 Database의 다른 사용자는 이 Consistent Read에 의해 Commit되지 않은 변경 사항을 볼 수 없는 기능 입니다.
- SET TRANSACTION READ ONLY : 읽기 전용
- SET TRANSACTION ISOLATION LEVEL SERIALIZABLE; 모든 트렌젝션이 하나로 보고 undo세그먼트로 모두 기록 됩니다.
- Transaction Recovery는 Transaction이 진행되는 동안 Instance가 실패한 경우 Database가 다시 열릴 때 Commit되지 않은 사항은 Rollback되어야 하는데 이때 Undo Segment정보가 사용 됩니다. 
- Undo Segment의 변경사항은 리두로그 파일로 보호되므로 복구가 가능 합니다.


1-3. Undo 세그먼트의 종류 
- SYSTEM : 시스템 테이블스페이스에 존재하는 객체에서 사용
- Non-SYSTEM: 시스템 테이블스페이가 아닌 다른 테이블스페이스에 존재하는 객체에서 사용
    -> Auto Mode : 지정된 Undo 테이블스페이스에서 자동 생성 관리됨
    -> Manual Mode
      가) Private : 하나의 인스턴스에만 독점적으로 사용 가능
      나) Public : 다중 인스턴스환경에서 어떤 인스턴스라도 사용 가능(OPS 또는 RAC 환경)
-Deferred: 테이블스페이스를 offline immediate 명령으로 offline 시켰거나, recovery가 진행 중일 때 사용



2.. REDO LOG 란?
- 리두 로그 버퍼는 데이터베이스에서 일어난 모든 변화를 저장하는 메모리 공간 입니다. 
- 리두 로그 버퍼에 저장된 리두 항목들은 LGWR에 의해 데이터베이스 복구에 사용되는 온라인 리두 로그 파일에 저장됩니다.
- LOG_BUFFER 파라미터로 Redo Log Buffer의 크기를 결정 합니다. 
- 리두 정보는 항상 실제 변경작업보다 먼저 보관되어야 어떤 상황에서도 복구가 가능해집니다. 따라서 트랜잭션을 수행하는(데이터베이스 블록에 변경을 가하는) 프로세스는 우선 자신의 메모리 영역 내에서 수행하고자 하는 작업에 대한 리두 레코드를 만들며, 이를 먼저 로그버퍼에 기록하고 난 후에 실제 버퍼블록에도 리두 레코드에 담긴 내용을 따라 적용하게 됩니다. 또한 같은 이유로 오라클은 변경된 버퍼 캐쉬 블록을 디스크에 기록하기 전에 먼저 관련된 로그버퍼를 로그파일에 기록하는 작업을 처리하게 된됩니다.


※ 출처 : 오라클클럽(www.oracleclub.com)


3. UNDO, REDO 차이점

undo와 redo의 차이점은 
비슷하지만 전혀 다른 두가자의 개념이다. 

기본적으로 

Redo는 re+do으 합성어 일듯하고  뜻풀이는 " 다시하다 " 
Undo는 un+do의 합성어 일듯하고 뜻풀이는 "원상태로 돌리다." 

그러니깐 뜻에서 풍겨나오는 의미로는 

redo는 무언가를 다시하는것!
undo는 무언가를 되돌리는것!

redo는 오라클에서 무슨 역활을 하는가?
기본적으로 복구의 역활을한다. 오라클 서버에 무슨작업을 하든지 모두 리두에 기록이된다.

undo는 오라클에서 무슨 역활을 하는가?
작업 롤백, 읽기 일관성, 복구를 한다.
 

이렇게 봣을때 둘의 같은점은 복구를 한다는것 
하지만 둘의 복구는 차이가 있다. 

redo는 복구할때 사용자가 했던 작업을 그대로 다시 하지만
undo는 사용자가 햇던 작업을 반대로한다. 즉 사용자가 작업을 원상태로 돌린다.

예를 들어서 아래와같은 작업햇을때 세션이 비정상 종료가 되엇다고 가정하자

update t1
set no = no+1
where id = 1;

세션이 복구되는 과정에서 SMON이 redo를 이용해서 아래의 작업을 한다

update t1
set no = no+1
where id =1;

하지만 만일 세션이 비정상 종료가 되기전에 commit하지않는다면
undo를 이용해서 아래와같은 작업을 이어서한다.

update t1
set no = no-1
where id = 1;


이렇게 되면 마치 다시하지 않는것 처럼된다.
간단히 말하자면 복구와 되돌리기인 것이다.

 

          undo                                    redo

되돌리기위한 변화                     재생하기 위한변화
롤백, 읽기 일관성                      복구
언두 세그먼트                           리두로그파일
읽기 일관성을 보호                    데이터 손실을 방지 

 
 
[출처] 오라클 - (admin) undo와 redo의 차이점 |작성자 qoalskdhk

















Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.