티스토리 뷰
언두 세그먼트 UNDO SEGMENT
언두 세그먼트(UNDO SEGMENT) 할당 원리 :
- 서버프로세스(SERVER PROCESS)가 사용자별로 언두 테이블스페이스(UNDO TABLESPACE) 를 할당하게 되는데,
특징은 언두 데이터 파일의 크기는 증가만되고 줄어 들지 않는다.
크기가 줄어들지 않는 이유? :
데이터 파일(DATA FILE) 저장범위
- 덮어쓰거나 새로 세그먼트를 추가하는 방식으로 언두 세그먼트(UNDO SEGMENT)는 데이터파일에 저장된다.
그러다 데이터파일에 범위가 넘어가게 되어 더이상 저장공간이 없게되면, 하나의 세그먼트에 두개 세션(SESSION) 이상의
언두 데이터(UNDO DATA)를 함께 기록하게 된다.
그러다 그조차 없을 경우 해당 트랜잭션은 에러가 나게 된다.
언두 세그먼트(UNDO SEGMENT) 할당 방식의 담점
- 늘어난 언두 테이블스페이스의 크기는 줄어들지 않는다. 예를 들어 어제까지 사용량이 10G 였던 언두데이터(UNDO DATA)가 오늘사용량이 급격히 줄어서 1G를 사용한다고 해서, 10G 용량이 1G 로 줄어들지 않는다는 얘기이다.
이유는 할당된 세그먼트는 커밋(COMMIT) 이나 롤백(ROLLBACK)후 다른 사용자로부터 덮어쓰기가 되지만 안에 있는 언두데이터(UNDO DATA)
는 지워지지 않고 그대로 남아있거나 덮어써서 새로운 언두 데이터(UNDO DATA)가 들어오기 때문이다.
용량을 줄이고 싶다면 원하는 용량의 언두 테이블스페이스(UNDO TABLESPACE) 생성후 기존에것과 변환해주고 기존것은 삭제해주면 된다
언두 세그먼트(UNDO SEGMENT) 사용내역
SQL> set line 200
> col username for a10
> select a.sid, a.serial#, a.username, b.used_urec, b.used_ublk
2 from v$session a, v$transaction b
3 where a.saddr=b.ses_addr;
언두(UNDO) 관련 주요 파라미터(PARAMETER)
UNDO_RETENTION :
- 언두 세그먼트 여분이 있을 경우 사용
- 커밋(COMMIT)/ 롤백(ROLLBACK) 후 (트랜잭션 완료) 언두 세그먼트에 언두 데이터를 다른 서버 프로세스가 덮어쓰지 못하게 막아주는 시간
- 이부분에 문제가 생기면 'ORA-01555 : SNAPSHOT TOO OLD' 라는 에러 발생
UNDO_RETENTION_GUARANTEE :
- 언두 세그먼트 (UNDO SEGMENT) 덮어쓰기 안되게 설정
언두 리텐션 (UNDO RETENTION) 조회
SQL> select tablespace_name, retention from dba_tablespaces;
언두 파라미터 (UNDO PARAMETER) 조회
SQL> show parameter undo;
언두 리텐션 파라미터(UNDO RETENTION PARAMETER) 설정 및 취소
SQL> alter tablespace undo retention gurantee; (설정)
> alter tablespace undo retention noguarantee; (취소)
언두 테이블스페이스(UNDO TABLESPACE) 삭제
SQL> drop tablespace undo01;
- 사용중이 않은것만 가능
- 사용중이지 않은데, 가끔 삭제 안되는 경우 _offline_rollback_segments (히든 파라미터) 사용해서 강제 오프라인(offline) 시킨후 삭제
'ORACLE DB > Oracle DB Admin' 카테고리의 다른 글
SYSTEM TABLESPACE & DATA DICTIONARY (0) | 2013.03.06 |
---|---|
언두 테이블스페이스 UNDO TABLESPACE (0) | 2013.03.05 |
TEMPORARY TABLESPACE (0) | 2013.03.05 |
GROUP TEMPORARY TABLESPACE (0) | 2013.03.05 |
일반 테이블스페이스(TABLESPACE) & 온라인/오프라인(ONLINE/OFFLINE) (1) | 2013.03.05 |