테이블 스페이스의 여유공간이 충분한데 INSERT가 안된다.
해결방법 : 할당 가능 extent 사이즈 확인 후 테이블스페이스 사이즈 추가
오류코드
ORA-1653: unable to extend table SK.T1 by 8192 in tablespace TS01
-- 에러코드의 의미상 숫자 8192는 8K의 용량이 아니라 BLOCK의 개수를 의미함
-- 8192 * 8K = 64MB로 만약에 테이블스페이스의 여유공간이 크더라도, 할당 가능한 extent 크기가 64MB 보다 작으면 에러 발생(extent 는 연속된 블록의 집합)
테이블스페이스의 할당 (ALLOCATION)은 옵션에 따라 두 가지 종류로 나뉜다.
- AUTOALLOCATE : 오라클 내부 로직에 의해 64KB / 1MB / 8MB/ 64MB 로 ALLOCATION이 발생한다. 소량의 INSERT가 예상될 경우 64KB를 ALLOCATION, 대량의 INSERT가 예상될 경우 64MB를 ALLOCATION해 효율을 높이는 방식이다.
- UNIFORM : 테이블스페이스를 할당할때 무조건 정해진 용량을 할당하는 방식이다. DEFAULT SIZE는 1MB이며, 다른 크기로도 설정이 가능하다.
할당 가능한 최대 extent 사이즈 조회
-- MAX_ALOC_EXT_MB 값이 필요 사이즈 보다 작으면 문제발생
SELECT
TABLESPACE_NAME,
SUM(BYTES / 1024 / 1024) TOT_MB,
MAX(BYTES / 1024 / 1024) MAX_ALOC_EXT_MB,
MAX(BLOCKS) MAX_ALOC_EXT_BLOCKS
FROM DBA_FREE_SPACE
WHERE 1=1
--AND FILE_ID = 5
AND TABLESPACE_NAME = 'TS01'
GROUP BY TABLESPACE_NAME
;
-- next_extent 값은 autoallocate 방식에서는 무의미 하다. alter table 로 변경은 되지만 동작하지 않음
NEXT
Specify in bytes the size of the next extent to be allocated to the object. Refer to size_clause for information on that clause.
In locally managed tablespaces, the size of the NEXT is determined by Oracle if the tablespace is set for autoallocate extent management. In UNIFORM tablespaces, the size of NEXT is the uniform extent size specified at tablespace creation time.
In dictionary-managed tablespaces, the default value is the size of 5 data blocks. The minimum value is the size of 1 data block. The maximum value depends on your operating system. Oracle rounds values up to the next multiple of the data block size for values less than 5 data blocks. For values greater than 5 data blocks, Oracle rounds up to a value that minimizes fragmentation.
'DBMS > ORACLE' 카테고리의 다른 글
APPEND 사용 시 logging / nologging 에 따른 로그 사용량 변화 (0) | 2022.02.27 |
---|---|
테이블 조회 시 다른 세션에서도 uncommit block 을 읽을까? (0) | 2022.02.25 |
oracle index 사이즈 증가 테스트 (0) | 2022.02.16 |
ORACLE EOS 확인 (0) | 2022.02.16 |
oracle 테이블 변경(alter table) 후 트리거 invalid 상태 변화 (0) | 2022.02.16 |
댓글