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 |