본문 바로가기

IT/oracle

Undo Tablespace와 관리

Undo Data란 시용자가 DML을 수행할 경우에 발생하는 원본 데이터를 말함, 즉 홍길동을 일지매로 업데이트 할 경우 홍길동을 Undo Data라고 함

이런 Undo Data만을 저장하는 Segment를 Undo Segment라고 하는데 Undo Segment를 저장하고 있는 특별한 Tablespace가 Undo Tablespace 임


1. 특징

 - Oracle Server Process는 이 Tablespace에 undo segment를 생성하고 기본적으로 각 사용자 별로 undo segment를 할당해서 undo data를 관리하면 사용자는 관여할 수 없음

 - Undo tablespace는 Instance당 여러 개가 동시에 존재 할 수 있지만 사용되는 것은 한번에 1개 뿐(단 특별한 경우 동시에 여러 개가 사용되는 경우도 있음)

 - 관리 방법은 자동 Mode와 수동 Mode가 있으며 9i 버전부터는 Automatic Undo Management 방법을 권장(AUM 이라고 함)

   AUM을 사용하려면 초기화 파라미터 파일(pfile, spfile)에 undo_management=auto로 설정하고 수동 Mode로 관리하려면 이 값을 Manual로 설정, 이 값을 설정 안하면 9i 이후부터는 자동모드가 기본미여 Manual 값은 주로 Undo 관련 장애가 발생했을 경우 복구 용도로 많이 사용. 값을 변경하면 Instance를 재시작해야 적용


2. 사용 목적

 - Transaction Rollback - 사용자가 rollback이라는 명령어를 수행할 경우에 이곳에 저장된 Undo data를 사용해서 rollback하게 됨

 - Read Consistency(읽기 일관성) - CR 작업을 통해 트랜잭션이 끝나지 않은 데이터는 변경 전 데이터를 보여줌. 


3. Undo segment 할당되는 원리

 - Undo Tablespace의 독특한 특징 중 하나는 Undo data File의 크기가 증가만 되고 줄어들지 않은다는 점


현재 Undo 조회

SQL> set line 200

SQL> col name for a10

SQL> show parameter undo;


NAME     TYPE VALUE

------------------------------------ ----------- ------------------------------

undo_management     string AUTO

undo_retention     integer 900

undo_tablespace     string UNDOTBS1


신규 undo tablespace 생성

SQL> create undo tablespace undo01

  2  datafile '/app/oracle/oradata/testdb/undo01.dbf' size 10M

  3  autoextend on;


Tablespace created.


SQL> @tablespacequery


TABLESPACE_NAME STATUS CONTENTS  EXTENT_MAN SEGMEN

--------------- -------- --------- ---------- ------

SYSTEM ONLINE PERMANENT LOCAL      MANUAL

SYSAUX ONLINE PERMANENT LOCAL      AUTO

UNDOTBS1 ONLINE UNDO   LOCAL      MANUAL

TEMP ONLINE TEMPORARY LOCAL      MANUAL

USERS ONLINE PERMANENT LOCAL      AUTO

EXAMPLE ONLINE PERMANENT LOCAL      AUTO

UNDO01 ONLINE UNDO   LOCAL      MANUAL


7 rows selected.


SQL> @tablespacesize


TABLESPACE_NAME    MB FILE_NAME

--------------- ----- --------------------------------------------------

USERS    5 /app/oracle/disk5/users01.dbf

UNDOTBS1 1145 /app/oracle/disk3/undotbs01.dbf

SYSAUX  500 /app/oracle/disk4/sysaux01.dbf

SYSTEM  680 /app/oracle/disk4/system01.dbf

EXAMPLE  100 /app/oracle/disk5/example01.dbf

UNDO01   10 /app/oracle/oradata/testdb/undo01.dbf


Undo tablespace 변경

SQL> show parameter undo;


NAME     TYPE VALUE

------------------------------------ ----------- ------------------------------

undo_management     string AUTO

undo_retention     integer 900

undo_tablespace     string UNDOTBS1

SQL> alter system set undo_tablespace=undo01;


System altered.

 -> pfile을 사용하는 경우 파라미터 파일을 변경해야 DB 재시작 후 장애 없음

SQL> show parameter undo;


NAME     TYPE VALUE

------------------------------------ ----------- ------------------------------

undo_management     string AUTO

undo_retention     integer 900

undo_tablespace     string UNDO01


각 세션 별로 사용중인 undo segment 확인

SQL> !cat undosegment.sql

select s.sid, s.serial#, s.username, r.name "ROLLBACK SEG"

from v$session s, v$transaction t, v$rollname r

where s.taddr=t.addr

and t.xidusn = r.usn;


Undo Tablespace 삭제하기

SQL>drop tablespace undotbs1;

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

Oracle FlashBack 을 이용한 데이터 복구  (0) 2015.02.03
오라클 RMAN 백업의 주요 특징  (0) 2015.02.02
아카이브 로그 모드(Archive Log Mode)란?  (0) 2015.02.02
Extent와 Segment  (0) 2015.01.30
Temporary tablespace  (0) 2015.01.30
Tablespace 관리  (0) 2015.01.30
Tablespace File 이동  (0) 2015.01.30
Tablespace의 종류  (0) 2015.01.29
Redo Log File 관리 하기  (0) 2015.01.29
Redo Log의 생성 원리  (0) 2015.01.28