1. 언두 유지 시간 ( Undo Retention Time)

  • 언두 세그먼트의 익스텐스가 재사용되기 전까지 기존 언두 데이터를 저장하고 있는 시간
  • 언두 유지 시간은 UNDO_RETENTION 파라미터에 의해 관리된다.
  • 언두 유지 기능은 자동 언두 관리 방식을 사용할 때 사용 가능
  • 언두 테이블스페이스에 저장되는 비시스템 언두 세그먼트에만 적용

참고
언두 유지 (Undo Retention) : 자동 언두 관리 방식을 사용할 때 비시스템 언두 세그먼트의 데이터를 언두 유지 시간 설정만큼 유지하는 기능

2. 비시스템 언두 세그먼트의 익스텐스 상태

  • 만료된 익스텐트(Expired Extent)
    사용 중인 트랜잭션이 없고 언두 유지 시간도 완료되어서 언제든지 트랜잭션에 할당될 수 있는 상태
  • 만료되지 않은 익스텐트(Unexpired Extent)
    사용 중인 트랜잭션이 없으나, 언두 유지 시간이 완료되지 않아서 트랜잭션에 할당되지 않고 보존되어 있는 상태
  • 활동 중인 익스텐트 (Active Extent)
    트랜잭션에 할당되어 언두 데이터를 기록하고 있는 상태
  • 프리 익스텐트(Free Extent)
    생성 이후 트랜잭션에 한 번도 할당되지 않았거나, SMON에 의한 주기적 정리가 완료되어 있는 상태

3. 오라클 9i에서의 언두 유지 기능

3.1 익스텐트 훔치기 (Extent Stealing)
9i에서 사용하는 기능으로 사용 중인 트랜잭션이 없으나 언두 유지 시간 설정에 의해 유지되고 있는 언두 익스텐트를 재사용하는 기능
--> 이 기능으로 인해 크기가 부족한 경우 ORA-1555 snapshot too old 에러가 발생할 가능성이 높다.

4. 오라클 10g에서의 언두 유지 기능

4.1 익스텐트 훔치기 (Extent Stealing)

  • GUARANTEE 옵션으로 언두 테이블 스페이스를 생성하는 경우
    --> ORA-1555 에러 발생하지 않지만, ORA-30036이 발생할 가능성이 높아져 트랜잭션 실패 가능성이 높다.
  • NOGUARANTEE 옵션으로 언두 테이블 스페이스를 생성하는 경우
    --> ORA-1555 에러 발생률은 높아지고, ORA_30036 에러는 발생하지 않는다.

4.2 자동 언두 유지 (Automatic Undo Retention)

  • 오라클이 SQL 수행 시간을 기준으로 자동으로 언두 유지 시간을 관리하는 기능
  • _UNDO_AUTOTUNE 숨김 파라미터의 설정 값이 TRUE일 때 적용된다. 기본값은 TRUE
  • 언두 유지 시간은 V$UNDOSTAT의 TUNED_UNDORETENTION 값에 의해 결정

참고
v$UNdOSTAT에서 동적으로 변하는 언두 유지 시간 값을 확인할 수 있다. 이 뷰는 10분 간격으로 언두 세그먼트 사용 통계 수치가 표시된다.


select to_char(begin_time, 'YYYY-MM-DD HH24:MI') begin_time,
to_char(end_time, 'YYYY-MM-DD HH24:MI') end_time,
maxquerylen max_sql, tuned_undoretention
from v$undostat;

4.3 언두 테이블스페이스 생성 옵션
4.3.1. undo 영역 유지에 관련된 것

  • GUARANTEE
    언두 유지 기능을 엄격히 적용하는 옵션
  • NOGUARANTEE
    언두 유지 기능이 언두 테이블스페잉스 크기에 종송된다. 공간이 부족할 경우 언두 익스텐트 훔치기가 발생한다. 기본값이다.

--> 설정값 변경이 가능하다.


-- 개런티 모드로 생성 
create undo tablespace undotbs1
datafile '/oradata/undo/undotdbs1.dbf' size 100M
retention guarantee;

-- 노개런티로 바꿈
alter tablespace undotbs1 retention noguarantee;

-- 설정값 확인 
select tablespace_name, retention
from dba_tablespaces
where tablespce_name in ('undotbs1','undotbs2')

4.3.2 테이블 스페이스 공간 관련

  • AUTOEXTEND
    저장 공간이 부족할 때 데이터 파일을 자동으로 확장할 것인지 여부를 지정
    • ON : 데이터 파일 자동 확장을 한다.
    • OFF : 데이터 파일 자동 확장을 하지 않는다.
    • MAXSIZE : 데이터 파일이 자동으로 확장될 최대 파일 크기를 지정한다. 기본은 unlimited이다.

-- 사용 예
create undo tablespace undodtbs1
datafile '/oradata2/undotbs1.dbf' size 50M
autoextend on next 10M maxsize 500m;

-- 조회
select tablespace_name, file_name, autoextensible, maxbytes 
from dba_data_files
where tablespace_name in ('UNDOTBS1','USERS')