TM
2012.04.04 11:30

(10gR2)Full UNDO tablespace

조회 수 23729 추천 수 0 댓글 0

(10gR2)Full UNDO tablespace
============================

PURPOSE

 

--------------------------------------------------------------------------------
10gR2 에서 UNDO tablespace 을 NO AUTOEXTEND로 생성한 경우 ,
transaction 이 실행중인 database 에서는 UNDO tablespace 가
FULL인 현상을 보게 됩니다.
이는 10gR2 에서 max retention 을 보장하는 undo retention 의
메카니즘이 소개되어 autoextend off 인 경우의 UNDO tablespace
에서 나타나는 현상입니다.
dba_undo_extents 에서 많은 UNEXPIRED undo segment 가 보이는 것이
확인되고 UNDO tablespace 가 100% full 인것처럼 나타나는 현상을 볼 수
있으며 그럼에도 불구하고 ORA-1555 나 ORA-30036 에러는 발생하지 않습니다.

Explanation


--------------------------------------------------------------------------------
다음과 같이 많은 UNEXPIRED undo segment 가 조회됩니다.

SQL> select count(status) from dba_undo_extents where status = 'UNEXPIRED';

COUNT(STATUS)
--------------------------------------------------------------------------------
 
463

SQL> select count(status) from dba_undo_extents where status = 'EXPIRED';

COUNT(STATUS)
--------------------------------------------------------------------------------
 
20

SQL> select count(status) from dba_undo_extents where status = 'ACTIVE';

COUNT(STATUS)
--------------------------------------------------------------------------------
 
21

dba_free_space 을 조회 결과 UNDO tablespace 의 free space 가 존재합니다.

SUM(BYTES)/(1024*1024) TABLESPACE_NAME


--------------------------------------------------------------------------------
---------------------
3 UNDOTBS1
58.4375 SYSAUX
3 USERS3
4.3125 SYSTEM
103.9375 USERS04

Transaction 이 실행되면 UNDO tablespace 에 free space 가 조회되지 않는
FULL 인것처럼 보입니다.

SUM(BYTES)/(1024*1024) TABLESPACE_NAME
--------------------------------------------------------------------------------
 ----------------
58.25 SYSAUX
98 USERS3
4.3125 SYSTEM
87.9375 USERS04


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
다음은 AUM 에서의 Undo Block 할당 알고리즘은 다음과 같습니다.

1. current extent 에 free block 이 있으면 다음 free block 이 할당됩니다.
2. 그러나, free block 이 없으면, next extent 가 expired 되었다면 next extent 을
   warp 한후 그 next extent 의 처음 block 을 return 합니다.
3. 만약 next extent 가 expired 되지 않았다면 UNDO tablespace 로부터 먼저 space 을 찾습니다.
   이때 free extent 가 존재한다면 이를 transaction table 에 할당하고 해당 next extent 의 첫번째 block 을 return 합니다.
4. 만약 UNDO tablespace 에 free extent 가 없다면 offline 된 transaction table 에서 steal 합니다.
   offline 된 transaction table 에서 extent 을 deallocate 한후 이를
   current transaction table 에 add한후 그 add 한 extent 의 첫번째 free block 을 return 합니다.
5. offline 된 transaction table 에서 찾을수 없으면 , online 되어 있는
   transaction table 에서 steal 합니다. offline 된 transaction table 에서 extent 을
   deallocate 한후 이를 current transaction table 에 add한후 , 그 add 한 extent 의 첫번째 free block 을 return 합니다.
6. 1번~5번 까지 하여도 free block 을 얻지 못하면 이제 UNDO tablespace 의 file 을 extend 합니다.
   file 이 extend 된다면 이후 current transaction table 에 extent 을 add 한후 , 그 extent 의 첫번째 free block 을 return 합니다.
7. 6번 에서 UNDO tablespace 의 file 을 extend 하지 못했다면 , 자기의 transaction table
   에서 unexpired 된 extent 을 재사용합니다. 그런데 이때 모든 extent 가 busy 하다면
   즉 모두 uncommitted 된 정보라면 8번으로 갑니다. 아니라면 wrap 하여 unexpired 된 extent 을 사용합니다.
8. offline 된 transaction table 에서 unexpired 된 extent 을 steal 합니다. 이것이
   실패한다면 online 된 transaction table 에서 unexpired 된 extent 을 steal 합니다.
9. 8 번까지 수행하고도 free block 을 얻지 못하면 이때서야 오라클에서는
   "ORA-30036 unable to extend segment by %s in undo tablespace '%s' " 에러를 뿌리며 실패합니다.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


fixed size UNDO tablespace 라 함은 autoextend 가 off 라 datafile 을 자동으로
더 이상 확장할 수 없음을 말합니다.
autoextend 가 off 인 경우 10.2 부터는 max retention 이 36 시간 입니다.
undo_retention 을 900 초(15 분) 으로 설정을 한다고 해도 10gR2 에서는
max retention 이 36 시간이라 이에 해당하는 undo extent 을 UNEXPIRED 으로 만듭니다.
그러나 이것이 가용한 undo extent 가 없다는 것이 아니고 , transaction 이 실행되게 되면
UNEXPIRED undo segment 을 재사용하게 됩니다.

TAG •

List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 Q&A Oracle관련 게시물만 Sean 2014.04.09 84475
160 Q&A 오라클 복구 질문 희달이 2015.05.08 784
159 TM 11G new feature SQL performance analyzer file Sean 2013.01.09 14179
158 TM MEMORY TARGET 도로시 2013.01.03 19241
157 TM check whether crs auto start is enable or disable 담벼락 2012.10.12 25841
156 TM ARDCI file 이현정 2012.10.09 12447
» TM (10gR2)Full UNDO tablespace Tech1 2012.04.04 23729
154 TM audit 관련 2 이현정 2012.03.29 23775
153 TM 테이블과 인덱스의 관계 및 인덱스 종류 및 생성 방법. Tech1 2012.03.28 23676
152 TM windows에서 Opatch 진행시 oci.dll 에러 조치 1 이현정 2012.03.26 36767
151 TM 테이블 생성방법 및 각종옵션 Tech1 2012.03.20 19626
150 TM upgrade 시 sorting 문제 담벼락 2012.03.16 16299
149 TM 11 newfeature(Upgrade) 10.2.0.5 to 11.2.0.3 1 file 윤현 2012.01.12 18248
148 TM TDE (column, tablesapce) 1 file 윤현 2011.12.27 13165
147 TM 11g newfeature (dbca) 2 file 윤현 2011.12.27 13846
146 TM 11g 데이타베이스 에러수집방법 2 perfstat 2011.11.02 19257
145 TM long type column 1 담벼락 2011.10.11 17396
144 TM 백업이 필요없는 대용량 table skip하고 export 받기 고구마 2011.06.14 18181
143 TM TDE tablespace 1 윤현 2011.06.09 17199
142 TM openvms command perfstat 2011.05.31 17123
141 TM Oracle Silent Install Guide 3 file 송기성 2011.03.13 20036
Board Pagination Prev 1 2 3 4 5 6 7 8 Next
/ 8