ORA-1547 에러
ORA-1547 에러 발생의 원인으로는, TABLESPACE가 에러에 명시된 만큼의 연속된 ORACLE BLOCK 수의 FREE SPACE를 갖고있지 못해서 새로운 EXTENT를 할당하지 못 하기 때문이다.
ORA-1547 에러는 일반적으로 다음과 같은 과정에서 발생할 수 있다.
1) 데이타 INSERT나 UPDATE시 DATA SEGMENT가 차지하게될 연속적인 ORACLE 블럭을 할당받지 못할 경우에 발생한다.
2) 인덱스를 생성할 경우에 발생한다.
- ROLLBACK SEGMENT가 사용할 RBS 또는 USER TABLESPACE의 영역이 부족 하여 발생할 수 있다.
- 인덱스 생성시 SORT 영역으로 사용되는 TEMPORARY TABLESPACE내의 SPACE의 부족으로 발생할 수 있다.
3) SQL*FORMS30, SQL*REPORTWRITER등의 프로그램을 데이타베이스에 [SAVE]시 관련 테이블 들을 포함하고 있는 SYSTEM 또는 TOOLS TABLESPACE등의 영역이 부족한 경우에 발생된다.
이러한 경우 EXTENT에 관련된 DATA DICTIONARY VIEW인 USER_TABLES, USER_EXTENTS, USER_SEGMENTS와 DBA_FREE_SPACE등을 조회해서 관련 내용을 확인한다.
예를 들어, 데이타 INSERT시
ORA-1547 : Failed to allocate extent of size 'num' in tablespace 'TOOLS'
에러가 발생될 경우를 고려해 보자.
1) [USER_TABLES]에서 INSERT에 관련된 테이블의 NEXT_EXTENT 크기를 확인한다.
SQL> SELECT initial_extent, next_extent, pct_increase, min_extents, max_extents
FROM user_tables
WHERE table_name = 'EMP';
INITIAL_EXTENT NEXT_EXTENT PCT_INCREASE MIN_EXTENTS MAX_EXTENTS
---------------- ------------- -------------- ------------- -------------
10240 190464 50 1 121
(A)
(A) : 다음에 할당되는 EXTENT의 크기를 나타내며 BYTES 단위이다.
2) [DBA_FREE_SPACE]에서 현재 TABLESPACE에 존재하는 FREE SPACE 중 가장 큰 연속된 영역을 확인한다.
SQL> SELECT MAX(bytes) MAX_CONTIGUOUS_SPACE
FROM dba_free_space
WHERE tablespace_name = 'TOOLS';
MAX_CONTIGUOUS_BYTES
-------------------------
19730432
(B)
(B) : 현재 TABLESPACE에 남아있는 FREE SPACE 중 가장 큰 연속된 영역으로 BYTES 단위로 나타난다.
3) 위에서 살펴본바와 같이 2)-(B)의 MAX(BYTES) 크기가 1)-(A)의 NEXT_EXTENT 크기보다 작기 때문에 ORA-1547이 발생하게 되는 것이며 이를 해결하는 방법으로는 다음의 몇가지가 있다.
① 최소 1)-(A)의 NEXT_EXTENT 크기 이상의 데이타 화일을 "TOOLS" TABLESPACE에 추가 한다.
ALTER TABLESPACE tools ADD DATAFILE *file_name* SIZE integerM ;
② TABLE의 STORAGE PARAMETER에서 INITIAL EXTENT, NEXT EXTENT의 크기를 조정하여 TABLE을 재구축할 수 있다.
즉, TABLE의 STORAGE PARAMETER 중에서 NEXT를 현재 TABLESPACE에 남아 있는 FREE SPACE 중 가장 큰 연속된 영역( DBA_FREE_SPACE의 MAX(BYTES))보다 작게 변경할 수 있다.
SQL> ALTER TABLE emp STORAGE ( NEXT 100K );
③ 다음으로는 관련 TABLESPACE내의 OBJECT들을 EXPORT후 TABLESPACE를 재생성하고 IMPORT하여 DISK FRAGMENTATION을 없애서 결과적으로 해당 TABLESPACE에 활용공간을 확보할 수 있다.
|