TM
2012.04.04 11:30

(10gR2)Full UNDO tablespace

조회 수 23831 추천 수 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 84602
160 Q&A 오라클 복구 질문 희달이 2015.05.08 973
159 TM 11G new feature SQL performance analyzer 1 file Sean 2013.01.09 14232
158 TM MEMORY TARGET 1 도로시 2013.01.03 19416
157 TM check whether crs auto start is enable or disable 담벼락 2012.10.12 26035
156 TM ARDCI file 이현정 2012.10.09 12491
» TM (10gR2)Full UNDO tablespace Tech1 2012.04.04 23831
154 TM audit 관련 2 이현정 2012.03.29 24660
153 TM 테이블과 인덱스의 관계 및 인덱스 종류 및 생성 방법. Tech1 2012.03.28 24868
152 TM windows에서 Opatch 진행시 oci.dll 에러 조치 1 이현정 2012.03.26 37051
151 TM 테이블 생성방법 및 각종옵션 Tech1 2012.03.20 19971
150 TM upgrade 시 sorting 문제 담벼락 2012.03.16 16382
149 TM 11 newfeature(Upgrade) 10.2.0.5 to 11.2.0.3 1 file 윤현 2012.01.12 18281
148 TM TDE (column, tablesapce) 1 file 윤현 2011.12.27 13195
147 TM 11g newfeature (dbca) 2 file 윤현 2011.12.27 13879
146 TM 11g 데이타베이스 에러수집방법 2 perfstat 2011.11.02 19559
145 TM long type column 1 담벼락 2011.10.11 17458
144 TM 백업이 필요없는 대용량 table skip하고 export 받기 고구마 2011.06.14 18354
143 TM TDE tablespace 1 윤현 2011.06.09 17239
142 TM openvms command perfstat 2011.05.31 17382
141 TM Oracle Silent Install Guide 3 file 송기성 2011.03.13 20107
Board Pagination Prev 1 2 3 4 5 6 7 8 Next
/ 8