본문 바로가기

데이터 사이언스 DataScience/Data Base 데이터베이스

[Oracle] 데이터가 없는데 테이블스페이스가 부족할때 (ORA-01658)

* 문제상황 : 

- 솔루션 업그레이드를 위해 DB에 새로운 USER, TABLESPACE에 Migration 준비

- 새로운 USER 소유의 TABLE, INDEX만 만들고 데이터는 Migration 하기 전, 테이블 생성 진행 중 

  "ORA-01658: 테이블스페이스에 세그먼트에 대한 INITIAL 확장 영역을 작성할 수 없습니다" 에러 발생

- 테이블은 daily range partition, subpartition 등을 가진 테이블을 포함했기 때문에 Segment 개수는 많음

 

* 해결과정 : 

테이블에 데이터가 0건인데 수십 GB를 사용하고 있는 경우 둘 중에 하나를 의심해볼 수 있다.

 

- TRUNCATE가 아닌 DELETE로 데이터를 삭제해 High Water Mark가 줄지 않았거나, 

- INITIAL EXTENT가 크게 할당된 상황이다.

 

신규 테이블스페이스이므로 INITIAL EXTENT일 확률이 높아 보였다. 

이 경우에도 2가지를 의심해볼 수 있다.

 

1) DDL의 STORAGE OPTION에 INITIAL EXTENT가 과도하게 많이 잡혔을 경우

2) 테이블스페이스가 UNIFORM 형태로 많은 INITIAL EXTENT를 할당하고 있는 경우

 

이 중 2) UNIFORM 10M로 테이블스페이스가 생성되어있어 지나치게 많은 초기 EXTENT를 할당하고 있었다.

 

 

* 조치 중 참고할만한 내용 : 

- 10g 이상부터는 DMT가 아닌 LMT(Locally Managed Tablespace) 중 Uniform, Autoallocate를 사용한다.

- UNIFORM으로 관리되는 TABLESPACE의 경우 UNIFORM EXTENT의 용량을 바꿀 수 없다.  (DROP 후 재생성만 가능)

- AUTOALLOCATE의 경우 Oracle이 자체적으로 extent를 할당하는데 initial은 64K, next는 세그먼트 용량에 따라

  64K ~ 64M으로 할당하는 것으로 알려져있다. Oracle에서 명확한 공식은 공개하지 않아 버전별 차이도 있을 것으로 예상.  추가 확인은 안해봤지만 구글링 중 아래 참고자료를 비롯한 복수의 문서에서 이런 내용을 찾을 수 있었다.

IF dba_segment.bytes < 1M THEN next extent = 64K
ElSIF 1M <= dba_segment.bytes < 64M THEN next extent = 1M
ELSIF 64M <= dba_segment.bytes < 1G THEN next extent = 8M
ELSE next extent = 64M.

 

* 참고자료 : 

https://docs.oracle.com/database/121/ADMIN/tspaces.htm#ADMIN011

 

Managing Tablespaces

You must have the DROP TABLESPACE system privilege to drop a tablespace. Note: Once a tablespace has been dropped, the data in the tablespace is not recoverable. Therefore, ensure that all data contained in a tablespace to be dropped will not be required i

docs.oracle.com

https://asktom.oracle.com/pls/apex/f?p=100:11:0::::P11_QUESTION_ID:25322140091802 

 

How does "Autoallocate" allocate the extents? - Ask TOM

automatic transmission Connor, October 12, 2004 - 10:06 am UTC Yes but even with an auto car, there's a red line on the rev counter, which means no matter what gear the automatic has chosen, you always know *in advance* how hard you can push the car before

asktom.oracle.com

 

반응형