Oracle Undo seg

1. IT Story/DB 2012. 2. 29. 21:08


Undo Segment

   

  • Undo Segment란?

       

   

  • 세그먼트
    • Extent 다음 레벨의 논리적 데이터베이스 저장 영역으로 크게 4가지가 있다.

   

  • 데이터 세그먼트: 클러스터화되지 않은 각각의 비인덱스 구성(non-index-organized)테이블에는 데이터 세그먼트가 있다. 단, External Table, Global 임시 테이블(Temporary Table), Partition 테이블은 예외.

   

  • 인덱스 세그먼트: 각 인덱스는 해당 데이터를 모두 저장하는 인덱스 세그먼트를 가짐, Partition인덱스의 경우 각 Partition은 인덱스 세그먼트를 가짐.

   

  • 언두 세그먼트: 각 데이터베이스 Instance당 하나의 UNDO테이블스페이스가 생성됨.

테이블스페이스에는 언두 정보를 임시로 저장하기 위해 다수의 언두 세그먼트가 포함되어있음.

 

언두 세그먼트의 정보는 데이터베이스 Recovery 중 유저에게 커밋되지 않은 트랜잭션을 롤백하기 위해

읽기 일관성 데이터베이스 정보를 생성하는데 사용.

   

  • 임시 세그먼트: 임시 세그먼트는 SQL문에서 실행을 완료할 임시 작업 영역이 필요할 때 오라클 데이터베이스에 의해 생성됨.

   

  • Rollback 세그먼트와 Undo세그먼트의 관계

-Rollback과 Undo는 기본적으로 동의어임.(Rollback=Undo)

-Oracle 9i 이전에는 Rollback Segment라는 용어를 사용하다가, Oracle 9i 이후 버전부터는 Undo Segment

라는 용어를 사용.

 

-추가된 기능-

-자동관리 모드와 수동 관리 모드를 선택할 수 있음

-트랜잭션 처리를 위한 알고리즘 개선.

-생성, 할당 및 튜닝을 오라클 서버가 관리함으로, DBA는 더 이상 몇 개의 Rollback 세그먼트를 생성 할 것

인지, 크기는 어떻게 할 것이며, 트랜잭션에 따라 어떻게 할당할 것인지를 결정하지 않아도 됨.

   

   

  • Undo 세그먼트의 목적

    -Undo Segment는 Transaction Rollback. 읽기 일관성 유지(Read Consistency), Transaction Recovery를 위해 존재함.

       

    Transaction Rollback란 Oracle 서버에서 Undo Segment에 지정된 값을 이용해서 원래의 값으로 복원하는 기능을 말함.(Transaction Rollback이 실행되는 경우는 사용자가 Rollback command를 실행하거나, Transaction이 비정상 종료되어 PMON이 작동 Rollback처리하는 경우이다.)

   

읽기 일관성이란 Transaction이 진행되는 동안 Database의 다른 사용자는 이 Consistent Read에 의해 Commit되지 않은 변경 사항을 볼 수 없는 기능이다.

   

Transaction Recovery는 Transaction이 진행되는 동안 Instance가 실패한 경우 Database가 다시 열릴 때 Commit되지 않은 사항은 Rollback되어야 하는데 이때 Undo Segment정보가 사용됨(Undo Segment의 변경사항은 리두 로그 파일로 보호되므로 복구가 가능함.)

   

  • Undo 세그먼트의 종류

   

  • SYSTEM

    -시스템 테이블스페이스에 존재하는 객체에서 사용.

   

  • Non-SYSTEM

    -시스템 테이블스페이스가 아닌 테이블스페이스에 존재하는 객체에서 사용

    -Auto Mode : 지정된 Undo테이블스페이스에서 자동 생성 관리됨.

    -Manual Mode

    가)Private : 하나의 인스턴스에만 독점적으로 사용 가능

    나)Public : 다중 인스턴스 환경에서 어떤 인스턴스라도 사용가능.

   

  • Deferred

    -테이블스페이스를 offine immediate명령으로 offline시켰거나, recovery가 진행 중일 때 사용.

   

  • Undo Segment 관리

   

  • Undo 테이블스페이스 생성

  - 자동 Undo 관리에는 Undo 테이블스페이스가 필요함.

- Undo 테이블스페이스는 데이터베이스에 두 개 이상 가능하지만, 그 중에 하나만 활성화되어 있음.

  - Undo 테이블스페이스를 생성하는 방법

   

CREATE DATABASE문에 절을 추가하여 데이타베이스와 함께 생성하는 방법.

②데이터베이스가 생성된 후에도 CREATE UNDO TABLESPACE 명령을 사용하여 생성 가능.

   

  • 데이터베이스 생성시 지정방법

       

    Sql> Create database db01 (데이터베이스 생성시)

    …….

    Undo Tablespace (이름명)

    Datafile '파일 위치/ 파일명' Size (크기지정)

    Autoextend (옵션 선택);

       

    (데이터 베이스 생성 방법에 대한 부분에 대해서 부족한 점이 있어 실습은 하지 못함.)

   

  • 데이터베이스 생성 후 별도 생성.

       

    Create Undo Tablespace (이름명)

    Datafile '파일 위치/ 파일명'

    Size (크기기정);

 

   

  • Undo 테이블스페이스 변경

   

  • Undo 테이블스페이스 전환

- 현재 사용하고 있는 Undo 테이블스페이스를 다른 테이블스페이스로 변경 할 수 있음.

(활성 Undo 테이블스페이스에 있는 Undo 세그먼트를 오프라인 상태로 변경할 수는 없다.)

  - 인스턴스당 하나의 Undo 테이블스페이스만 활성 Undo 테이블스페이스로 지정 가능.

  - ALTER SYSTEM 명령을 이용하면 됩니다

   

SQL> ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS2

   

- Undo 테이블스페이스를 전환하면 새로운 트랜잭션은 새로 지정한 UNDO 테이블스페이스를 사용.

  - 하지만 모든 현재 트랜잭션, 즉 이미 존재하던 UNDO 테이블스페이스에 할당된 트랜잭션은 완료될 때까지

계속해서 기존의 Undo 테이블스페이스를 사용.

   

  • Undo 테이블스페이스 삭제

       

    - UNDO 테이블스페이스 삭제는 인스턴스에서 현재 사용되지 않을 때 , 커밋되지 않은 트랜잭션이 포함되어 있지 않아야 가능.

 - 삭제하려는 UNDO 테이블스페이스가 데이터베이스의 현재 Active한 UNDO 테이블스페이스인 경우는 먼저 새 UNDO 테이블스페이스를 설정해야 함.

- UNDO 테이블스페이스를 삭제하려면, 테이블스페이스내의 모든 트랜잭션이 완료되어야 함.

   

   

※ 쿼리 결과 만약 PENDING OFFLINE 상태의 Undo 세그먼트가 존재한다면 이 UNDO 세그먼트에는 Active 트랜잭션이 아직 포함되어 있는 것입니다. 

   

   

   

  • Undo 테이블스페이스 크기 결정

   

  • Undo 세그먼트 통계조회

- V$UNDOSTAT 뷰를 사용하여 Undo에 대한 공간 할당과 사용을 모니터함.

(각 행은 10분 간격으로 인스턴스에서 수집된 통계가 저장됩니다. 시간 간격은 10분이라고 하였지만 10분 미만의 시간이 반환 될 때도 있습니다. )

- 이 뷰를 사용하면 현재 작업 로드에 필요한 Undo 공간의 크기를 예측할 수 있으며 Undo 사용을 튜닝 할 수 있다.

(자동 모드와 수동 모드에서 모두 사용할 수 있습니다.)

   

Undo 세그먼트 통계

   

   

  • 크기 결정에 필요한 정보

 

-UNDO 테이블스페이스의 크기를 조정 하려면 세 가지 가 필요 합니다.

  -두 가지는 초기화 파일에서 얻을 수 있는 UNDO_RETENTION DB_BLOCK_SIZE이며, 세 번째는 초당 생성되는 Undo block의 수를 V$UNDOSTAT에서 얻을 수 있습니다.

   

※ (UR) UNDO_RETENTION (초)

※ (UPS) 초당 생성되는 Undo 데이터 블록 수

※ (DBS) 익스텐트 및 파일크기에 따라 달라지는 오버헤드 (DB_BLOCK_SIZE)

   

(크기를 결정하는 SQL문장에 대한 이해 부족으로 인하여 아직 실습을 하지 못하였습니다;;;)

   

  • Undo 세그먼트 정보 조회

   

   

   

   

   

<참고문헌>

Oracle Database 11g : Adminstration Workshop

Oracle Database 11g Documentation Library

Oracle Database 10g Documentation Library

원본 위치 <http://www.oracleclub.com>

원본 위치 <http://www.dbguide.net/db.db?cmd=view&boardUid=12906&boardConfigUid=9&boardIdx=49&boardStep=1>

   

   

'1. IT Story > DB' 카테고리의 다른 글

Oracle SQL INDEX(기초)  (0) 2012.02.29
Oracle SQL Trace[기초]  (0) 2012.02.29
아카이브 로그 모드 Archive Log Mode  (0) 2012.02.29
Oracle TableSpace  (0) 2012.02.29
Oracle Redo Log  (0) 2012.02.29
Oracle Net  (0) 2012.02.29
Oracle Instance 시작과 종료  (0) 2012.02.29
Oracle Parameter file(spfile/pfile)  (0) 2012.02.29
블로그 이미지

운명을바꾸는자

IT와 함께 살아가는 삶

,