database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Tutorials 9324 게시물 읽기
 News | Q&A | Columns | Tutorials | Devel | Files | Links
No. 9324
ORA-1547 에러 발생의 원인
작성자
정재익(advance)
작성일
2002-01-07 01:41
조회수
4,473

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에 활용공간을 확보할 수 있다.

[Top]
No.
제목
작성자
작성일
조회
9328Rollback Segment 의 크기와 갯수
정재익
2002-01-07
5273
9327사용되지 않은 공간을 DEALLOCATE
정재익
2002-01-07
4673
9326CONNECT internal 시 패스워드를 물어 오는 문제 해결
정재익
2002-01-07
4960
9324ORA-1547 에러 발생의 원인
정재익
2002-01-07
4473
9303rowid 에 대한 이해
정재익
2002-01-06
6225
9302Imp-00020 Error
정재익
2002-01-06
5387
9301Export file 을 분리하여 얻는 방법
정재익
2002-01-06
5703
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다