9i 에서의 언두세그먼트 관리
2010.05.12 08:20
원문 : http://www.ischo.net -- 조인상 // 시스템 엔지니어
Writer : http://www.ischo.net -- ischo // System Engineer in Replubic Of Korea
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
본문 : http://www.ischo.net -- 조인상 //시스템 엔지니어
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
No. 12183
[ORACLE9I]AUM (AUTOMATIC UNDO MANAGEMENT)에서의 ROLLBACK/UNDO SEGMENT
=====================================================================
PURPOSE
---------
이 문서는 Oracle 9i new featuer인 Automatic Undo Managemet (AUM)을
어떻게 사용하는지를 설명하고, 일반적인 rollback segment와 관련된
Manual Undo Management와의 차이점을 간략히 설명한다.
Explanation
-----------
1.AUM 환경에서 Rollback/Undo Segment 관리
AUM은 9i new feature로 undo segment에 대한 관리를 자동화, 단순화시켜 준다.
DBA는 Oracle 7, Oracle 8, Oracle 8i에서와 같이 직접 rollback segment를
관리해 줄 수도 있고, DBMS가 자동으로 관리하도록 할 수도 있다.
Rollback segment 관리와 사용에는 두가지 모드가 있다.
* AUTOMATIC
* MANUAL
두 종류의 segment를 구분하기 위해, AUM이 enable 되었을 경우
ROLLBACK segment를 UNDO segment라고 부른다.
어느 경우이거나, rollback/undo segment는 트랜잭션이 실행되고
종료되는 데 반드시 필요하다. 이것은 어떤 방식이건 간에
rollback/undo segment가 디스크 상 및 데이터베이스 상에
존재하여야 한다는 것을 의미한다.
2. initSID.ora 파라미터
1) 데이터베이스가 undo segment를 자동으로 관리하도록 하기 위해서는
UNDO_MANAGEMENT 값을 AUTO로 지정
a. UNDO 테이블스페이스를 만들 경우, 데이터베이스에서 undo segment를
자동으로 생성 관리
b. UNDO 테이블스페이스를 ONLINE/OFFLINE으로 바꿀 경우, 해당
테이블스페이스 내의 undo segment도 자동으로 ONLINE/OFFLINE으로
변환
c. UNDO 테이블스페이스를 drop 할 경우, 해당 테이블스페이스 내의
undo segment도 자동 drop
참고: UNDO 테이블스페이스에도 rollback segment를 만들 수는 있으나
그렇게 하지 않는 것이 권고사항임.
UNDO_MANAGEMENT 값을 MANUAL로 지정할 경우 rollback segment를
수동으로 관리
2) AUM을 사용하기 위해서는 데이터베이스에 최소한 한개의 UNDO 테이블
스페이스를 만들어 undo segment가 자동으로 만들어지도록 하여야 한다.
필요 시 한개 이상의 UNDO 테이블스페이스를 만들 수 있으며, 이 경우,
어떤 UNDO 테이블스페이스를 사용할지를 지정해 주어야 한다.
UNDO_TABLESPACE=rbs
SQL> select name,value from v$parameter
where name in ('undo_management','undo_tablespace');
NAME VALUE
---------- ------------------
undo_management AUTO
undo_tablespace RBS
하나 이상의 UNDO 테이블스페이스를 사용할 경우, 작업
특성에 따라 원하는 storage parameter로 테이블스페이스를 만들어
사용할 수 있다. 예를 들어 OLTP 용 UNDO 테이블스페이스와 BATCH 용
UNDO 테이블스페이스를 만들어, 필요 시 선택하여 사용하도록 할 수
있다.
3. UNDO 테이블스페이스 생성
1) 데이터베이스 생성 시 UNDO 테이블스페이스 생성 가능
<bulletin :12184> 참조.
2) 데이터베이스 생성 후 추가 방법
SQL> create undo tablespace UNDO_RBS1
datafile 'undorbs1.dbf' size 100m;
Tablespace created.
4. UNDO 테이블스페이스 특성
1) 시스템 extent 할당 방식으로 local에서 관리
SQL> select TABLESPACE_NAME, CONTENTS,
EXTENT_MANAGEMENT, ALLOCATION_TYPE,
SEGMENT_SPACE_MANAGEMENT
from dba_tablespaces where contents='UNDO';
TABLESPACE_NAME CONTENTS EXTENT_MAN ALLOCATION SEGMENT
------------------------------ --------- ---------- ---------- -------
RBS UNDO LOCAL SYSTEM MANUAL
UNDO_RBS1 UNDO LOCAL SYSTEM MANUAL
2) UNDO 테이블스페이스를 다른 목적 (일반 데이터 저장) 등의 목적
으로 사용할 수 없으며, system이 생성한 undo segment를 제어할 수 없다.
SQL> create table T (c number) tablespace undo_rbs1;
create table T (c number) tablespace undo_rbs1
*
ERROR at line 1:
ORA-30022: Cannot create segments in undo tablespace
SQL> create rollback segment undo_rs1 tablespace undo_rbs1;
create rollback segment undo_rs1 tablespace undo_rbs1
*
ERROR at line 1:
ORA-30019: RBU Rollback Segment operation not supported in SMU mode
참고 : UNDO 테이블스페이스에 rollback segment를 manual mode에서
만들 수는 있으나, AUM 모드에서는 수동으로 만든 rollback
segment를 사용할 수 없다.
3) 하나의 인스턴스는 한 시점에 하나의 UNDO 테이블 스페이스만 사용 가능
=> initSID.ora 파일에서 UNDO_TABLESPACE=rbs 지정 후 인스턴스 기동
=> SQL 문장으로 사용할 UNDO 테이블스페이스 지정
SQL> alter system set undo_tablespace=undo_rbs1;
System altered.
5. Rollback Segment 와 UNDO Segment 비교
1) UNDO 테이블스페이스 생성 시 생성되는 undo segment
a. n undo segments ( SESSIONS 값으로 n 개의 undo segment 생성)
b. undo segment의 이름은 _SYSSMUn$
c. undo segment의 소유자는 PUBLIC (OPS 구성 시 유용)
d. 수동으로 관리 불가
SQL> select owner,segment_name,tablespace_name
from dba_rollback_segs order by 3;
OWNER SEGMENT_NAME TABLESPACE_NAME
------ ------------------------------------------------------------
PUBLIC _SYSSMU1$ RBS
PUBLIC _SYSSMU2$ RBS
PUBLIC _SYSSMU3$ RBS
PUBLIC _SYSSMU5$ RBS
PUBLIC _SYSSMU7$ RBS
PUBLIC _SYSSMU9$ RBS
PUBLIC _SYSSMU10$ RBS
PUBLIC _SYSSMU8$ RBS
PUBLIC _SYSSMU6$ RBS
PUBLIC _SYSSMU4$ RBS
SYS SYSTEM SYSTEM
PUBLIC _SYSSMU11$ UNDO_RBS1
PUBLIC _SYSSMU12$ UNDO_RBS1
PUBLIC _SYSSMU13$ UNDO_RBS1
PUBLIC _SYSSMU14$ UNDO_RBS1
PUBLIC _SYSSMU15$ UNDO_RBS1
PUBLIC _SYSSMU16$ UNDO_RBS1
PUBLIC _SYSSMU17$ UNDO_RBS1
PUBLIC _SYSSMU18$ UNDO_RBS1
PUBLIC _SYSSMU19$ UNDO_RBS1
PUBLIC _SYSSMU20$ UNDO_RBS1
2) AUM 모드에서는 undo segment와 rollback segment 모두 제어
할 수 없다. rollback segment가 UNDO 테이블스페이스가 아닌
다른 테이블스페이스에 존재한다고 해도 제어할 수 없다.
SQL> create public rollback segment rs1 tablespace system;
create public rollback segment rs1 tablespace system
*
ERROR at line 1:
ORA-30019: Illegal rollback Segment operation in Automatic Undo mode
3) UNDO 테이블스페이스의 undo segment와 SYSTEM rollback segment만
ONLINE 상태 유지. 나머지 rollback segment와 OFFLINE 상태의
UNDO 테이블스페이스에 존재하는 undo segment는 OFFLINE 상태.
하지만, ONLINE 상태의 UNDO 테이블스페이스에 있는 모든 undo segment가
ONLINE 상태를 유지하지는 않는다. 예를 들어, 10개의 undo segment가
있다고 할지라도, SESSIONS 파라미터 값이 작다면, 적은 갯수의 undo
segment가 online 상태로 구동이 되며, 트랜잭션 갯수가 늘어남에 따라
필요한 undo segment가 자동으로 online 상태로 전환됨.
6. AUM과 Real Application Cluster
undo space 관리 기능은 Real Application Cluster 환경에도 유용하다.
1) Real Application Cluster 내의 모든 인스턴스는 동일한 undo mode에서
운영되어야 한다.
2) global parameter에 UNDO_MANAGEMENT 값을 AUTO로 지정하거나
모든 client-side parameter file에 UNDO_MANAGEMENT 값을 동일하게
지정한다.
3) 각각의 인스턴스에 대해 별개의 UNDO_TABLESPACE를 각각 지정한다.
각 인스턴스는 개별 UNDO 테이블스페이스를 필요로 한다.
만약 UNDO_TABLESPACE 파라미터를 지정하지 않을 경우, 각 인스턴스는
가용한 첫번째 UNDO 테이블스페이스를 사용한다.
7. 참고
1) UNDO_SUPPRESS_ERRORS 파라미터
값을 TRUE로 지정할 경우, AUTO 모드에서 manual로 관리하는
작업에 대해 에러메시지를 발생시키지 않으므로, 주의해서
사용하여야 한다.
SQL> alter rollback segment "_SYSSMU1$" online;
Rollback segment altered.
SQL> alter rollback segment "_SYSSMU13$" offline;
Rollback segment altered.
SQL> alter rollback segment rs1 online;
Rollback segment altered.
위 3개의 문장은 모두 성공한 것 처럼 보이지만, 실제로는 아무 작업도
수행되지 않는다.
2) 수동으로 drop된 rollback segment의 경우와 마찬가지로, drop 된
UNDO 테이블스페이스의 undo 정보를 참조하여야 하는 트랜잭션에서는
다음과 같은 에러가 발생한다.
ORA-01555 "snapshot too old (rollback segment too small)"
-> snapshot이 DROP된 UNDO 테이블스페이스의 DROP-SCN보다 더 오래될 경
우 발생
Reference Documents
-------------------
<note:135090.1
+++++++++++++++++++++++++++++++++++++++++++++++++++++++
No. 12183
[ORACLE9I]AUM (AUTOMATIC UNDO MANAGEMENT)에서의 ROLLBACK/UNDO SEGMENT
=====================================================================
PURPOSE
---------
이 문서는 Oracle 9i new featuer인 Automatic Undo Managemet (AUM)을
어떻게 사용하는지를 설명하고, 일반적인 rollback segment와 관련된
Manual Undo Management와의 차이점을 간략히 설명한다.
Explanation
-----------
1.AUM 환경에서 Rollback/Undo Segment 관리
AUM은 9i new feature로 undo segment에 대한 관리를 자동화, 단순화시켜 준다.
DBA는 Oracle 7, Oracle 8, Oracle 8i에서와 같이 직접 rollback segment를
관리해 줄 수도 있고, DBMS가 자동으로 관리하도록 할 수도 있다.
Rollback segment 관리와 사용에는 두가지 모드가 있다.
* AUTOMATIC
* MANUAL
두 종류의 segment를 구분하기 위해, AUM이 enable 되었을 경우
ROLLBACK segment를 UNDO segment라고 부른다.
어느 경우이거나, rollback/undo segment는 트랜잭션이 실행되고
종료되는 데 반드시 필요하다. 이것은 어떤 방식이건 간에
rollback/undo segment가 디스크 상 및 데이터베이스 상에
존재하여야 한다는 것을 의미한다.
2. initSID.ora 파라미터
1) 데이터베이스가 undo segment를 자동으로 관리하도록 하기 위해서는
UNDO_MANAGEMENT 값을 AUTO로 지정
a. UNDO 테이블스페이스를 만들 경우, 데이터베이스에서 undo segment를
자동으로 생성 관리
b. UNDO 테이블스페이스를 ONLINE/OFFLINE으로 바꿀 경우, 해당
테이블스페이스 내의 undo segment도 자동으로 ONLINE/OFFLINE으로
변환
c. UNDO 테이블스페이스를 drop 할 경우, 해당 테이블스페이스 내의
undo segment도 자동 drop
참고: UNDO 테이블스페이스에도 rollback segment를 만들 수는 있으나
그렇게 하지 않는 것이 권고사항임.
UNDO_MANAGEMENT 값을 MANUAL로 지정할 경우 rollback segment를
수동으로 관리
2) AUM을 사용하기 위해서는 데이터베이스에 최소한 한개의 UNDO 테이블
스페이스를 만들어 undo segment가 자동으로 만들어지도록 하여야 한다.
필요 시 한개 이상의 UNDO 테이블스페이스를 만들 수 있으며, 이 경우,
어떤 UNDO 테이블스페이스를 사용할지를 지정해 주어야 한다.
UNDO_TABLESPACE=rbs
SQL> select name,value from v$parameter
where name in ('undo_management','undo_tablespace');
NAME VALUE
---------- ------------------
undo_management AUTO
undo_tablespace RBS
하나 이상의 UNDO 테이블스페이스를 사용할 경우, 작업
특성에 따라 원하는 storage parameter로 테이블스페이스를 만들어
사용할 수 있다. 예를 들어 OLTP 용 UNDO 테이블스페이스와 BATCH 용
UNDO 테이블스페이스를 만들어, 필요 시 선택하여 사용하도록 할 수
있다.
3. UNDO 테이블스페이스 생성
1) 데이터베이스 생성 시 UNDO 테이블스페이스 생성 가능
<bulletin :12184> 참조.
2) 데이터베이스 생성 후 추가 방법
SQL> create undo tablespace UNDO_RBS1
datafile 'undorbs1.dbf' size 100m;
Tablespace created.
4. UNDO 테이블스페이스 특성
1) 시스템 extent 할당 방식으로 local에서 관리
SQL> select TABLESPACE_NAME, CONTENTS,
EXTENT_MANAGEMENT, ALLOCATION_TYPE,
SEGMENT_SPACE_MANAGEMENT
from dba_tablespaces where contents='UNDO';
TABLESPACE_NAME CONTENTS EXTENT_MAN ALLOCATION SEGMENT
------------------------------ --------- ---------- ---------- -------
RBS UNDO LOCAL SYSTEM MANUAL
UNDO_RBS1 UNDO LOCAL SYSTEM MANUAL
2) UNDO 테이블스페이스를 다른 목적 (일반 데이터 저장) 등의 목적
으로 사용할 수 없으며, system이 생성한 undo segment를 제어할 수 없다.
SQL> create table T (c number) tablespace undo_rbs1;
create table T (c number) tablespace undo_rbs1
*
ERROR at line 1:
ORA-30022: Cannot create segments in undo tablespace
SQL> create rollback segment undo_rs1 tablespace undo_rbs1;
create rollback segment undo_rs1 tablespace undo_rbs1
*
ERROR at line 1:
ORA-30019: RBU Rollback Segment operation not supported in SMU mode
참고 : UNDO 테이블스페이스에 rollback segment를 manual mode에서
만들 수는 있으나, AUM 모드에서는 수동으로 만든 rollback
segment를 사용할 수 없다.
3) 하나의 인스턴스는 한 시점에 하나의 UNDO 테이블 스페이스만 사용 가능
=> initSID.ora 파일에서 UNDO_TABLESPACE=rbs 지정 후 인스턴스 기동
=> SQL 문장으로 사용할 UNDO 테이블스페이스 지정
SQL> alter system set undo_tablespace=undo_rbs1;
System altered.
5. Rollback Segment 와 UNDO Segment 비교
1) UNDO 테이블스페이스 생성 시 생성되는 undo segment
a. n undo segments ( SESSIONS 값으로 n 개의 undo segment 생성)
b. undo segment의 이름은 _SYSSMUn$
c. undo segment의 소유자는 PUBLIC (OPS 구성 시 유용)
d. 수동으로 관리 불가
SQL> select owner,segment_name,tablespace_name
from dba_rollback_segs order by 3;
OWNER SEGMENT_NAME TABLESPACE_NAME
------ ------------------------------------------------------------
PUBLIC _SYSSMU1$ RBS
PUBLIC _SYSSMU2$ RBS
PUBLIC _SYSSMU3$ RBS
PUBLIC _SYSSMU5$ RBS
PUBLIC _SYSSMU7$ RBS
PUBLIC _SYSSMU9$ RBS
PUBLIC _SYSSMU10$ RBS
PUBLIC _SYSSMU8$ RBS
PUBLIC _SYSSMU6$ RBS
PUBLIC _SYSSMU4$ RBS
SYS SYSTEM SYSTEM
PUBLIC _SYSSMU11$ UNDO_RBS1
PUBLIC _SYSSMU12$ UNDO_RBS1
PUBLIC _SYSSMU13$ UNDO_RBS1
PUBLIC _SYSSMU14$ UNDO_RBS1
PUBLIC _SYSSMU15$ UNDO_RBS1
PUBLIC _SYSSMU16$ UNDO_RBS1
PUBLIC _SYSSMU17$ UNDO_RBS1
PUBLIC _SYSSMU18$ UNDO_RBS1
PUBLIC _SYSSMU19$ UNDO_RBS1
PUBLIC _SYSSMU20$ UNDO_RBS1
2) AUM 모드에서는 undo segment와 rollback segment 모두 제어
할 수 없다. rollback segment가 UNDO 테이블스페이스가 아닌
다른 테이블스페이스에 존재한다고 해도 제어할 수 없다.
SQL> create public rollback segment rs1 tablespace system;
create public rollback segment rs1 tablespace system
*
ERROR at line 1:
ORA-30019: Illegal rollback Segment operation in Automatic Undo mode
3) UNDO 테이블스페이스의 undo segment와 SYSTEM rollback segment만
ONLINE 상태 유지. 나머지 rollback segment와 OFFLINE 상태의
UNDO 테이블스페이스에 존재하는 undo segment는 OFFLINE 상태.
하지만, ONLINE 상태의 UNDO 테이블스페이스에 있는 모든 undo segment가
ONLINE 상태를 유지하지는 않는다. 예를 들어, 10개의 undo segment가
있다고 할지라도, SESSIONS 파라미터 값이 작다면, 적은 갯수의 undo
segment가 online 상태로 구동이 되며, 트랜잭션 갯수가 늘어남에 따라
필요한 undo segment가 자동으로 online 상태로 전환됨.
6. AUM과 Real Application Cluster
undo space 관리 기능은 Real Application Cluster 환경에도 유용하다.
1) Real Application Cluster 내의 모든 인스턴스는 동일한 undo mode에서
운영되어야 한다.
2) global parameter에 UNDO_MANAGEMENT 값을 AUTO로 지정하거나
모든 client-side parameter file에 UNDO_MANAGEMENT 값을 동일하게
지정한다.
3) 각각의 인스턴스에 대해 별개의 UNDO_TABLESPACE를 각각 지정한다.
각 인스턴스는 개별 UNDO 테이블스페이스를 필요로 한다.
만약 UNDO_TABLESPACE 파라미터를 지정하지 않을 경우, 각 인스턴스는
가용한 첫번째 UNDO 테이블스페이스를 사용한다.
7. 참고
1) UNDO_SUPPRESS_ERRORS 파라미터
값을 TRUE로 지정할 경우, AUTO 모드에서 manual로 관리하는
작업에 대해 에러메시지를 발생시키지 않으므로, 주의해서
사용하여야 한다.
SQL> alter rollback segment "_SYSSMU1$" online;
Rollback segment altered.
SQL> alter rollback segment "_SYSSMU13$" offline;
Rollback segment altered.
SQL> alter rollback segment rs1 online;
Rollback segment altered.
위 3개의 문장은 모두 성공한 것 처럼 보이지만, 실제로는 아무 작업도
수행되지 않는다.
2) 수동으로 drop된 rollback segment의 경우와 마찬가지로, drop 된
UNDO 테이블스페이스의 undo 정보를 참조하여야 하는 트랜잭션에서는
다음과 같은 에러가 발생한다.
ORA-01555 "snapshot too old (rollback segment too small)"
-> snapshot이 DROP된 UNDO 테이블스페이스의 DROP-SCN보다 더 오래될 경
우 발생
Reference Documents
-------------------
<note:135090.1
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
15 | 처음 오라클 설치시 SGA 영역크기 정하는 규칙 | 조인상 | 2010.05.12 | 8402 |
14 | 64비트 Solaris에 오라클 9.2.0 설치 하기 | 조인상 | 2010.05.12 | 10562 |
13 | 온라인 백업방법 begin~end backup | 조인상 | 2010.05.12 | 20726 |
12 | control file 재생성하기 | 조인상 | 2010.05.12 | 11710 |
11 | 오라클 패치 후 export가 안된다! [1] | 조인상 | 2010.05.12 | 10891 |
10 | 아카이브 로그 강제로 생성하는 명령어 | 조인상 | 2010.05.12 | 10948 |
9 | 오라클 버전업 후 exp할때 ORA-00904에러 | 조인상 | 2010.05.12 | 10477 |
8 | 오라클 재시작시에 롤백세그먼트 OFFLINE | 조인상 | 2010.05.12 | 5815 |
» | 9i 에서의 언두세그먼트 관리 | 조인상 | 2010.05.12 | 7371 |
6 | 오라클 뷰들... | 조인상 | 2010.05.12 | 5934 |
5 | 필수로 암기해야 할 view 들... | 조인상 | 2010.05.12 | 5781 |
4 | 백업에 관한 조언 | 조인상 | 2010.05.12 | 5214 |
3 | OS재설치 후 오라클 복구(솔라리스) | 조인상 | 2010.05.12 | 6822 |
2 | 아카이브 모드로 변환하기 | 조인상 | 2010.05.12 | 12818 |
1 | 온라인 백업/리스토어 (imp/exp) | 조인상 | 2010.05.09 | 12817 |