Oracle

게시글 보기
작성자 유건데이타 등록일 2015-06-17
제목 (V7.3 ~ V8.X) ORA-1654 ERROR ON INDEX SEGMENT

(V7.3 ~ V8.X) ORA-1654 ERROR ON INDEX SEGMENT =============================================

PURPOSE
-------

이 자료는 ORA-1654 error를 해결하기 위한 방법에 대한 자료이다.


Problem Description
-------------------

DML 작업 시에 다음과 같은 ORA-1654 error가 특정 tablespace에 대하여
발생하는 경우가 있다. 이에 대한 해결방법을 알아보기로 한다.

01654, 00000, "unable to extend index %s.%s by %s in tablespace %s"
예) unable to extend index owner.object by 40964 in tablespace INDEX;


Workaround
----------
none


Solution Description
--------------------

1. tablespace에 남아 있는 공간 중 가장 큰 연속된 공간의 사이즈를 구합니다.

SELECT max(bytes)
FROM dba_free_space
WHERE tablespace_name = 'TABLESPACE NAME';

ora-1654 에러가 났던 tablespace 이름을 대문자로 위에 써줍니다.
위에 나온 수치는 연속된 block들 가운데 가장 큰 사이즈의 extent를 보여주는
것인데, next extent를 할당하기 위해서는 위에 나온 수치보다 더 큰 사이즈를
필요로 하는 것입니다.

"The above query returns the largest available contiguous chunk of space."


2. index의 storage parameter인 next_extent 값과 pct_increase 값을 확인합니다.

SELECT next_extent, pct_increase
FROM dba_indexes
WHERE index_name = 'INDEX NAME' AND owner = 'OWNER';

ora-1654 에러가 발생한 index의 next extent 값과 pct_increase 값이 얼마인지
확인해 보십시오.
위에서 나타난 next_extent 값과 max(bytes) 값을 비교해 보세요.


3. 인스턴스의 db_block_size를 확인합니다.

vi $ORACLE_HOME/dbs/initSID.ora

db_block_size = 2048 또는 4096 또는 8192일 것입니다.

ora-1654 에러에 나타난 by 다음의 수치(예:40964) * db_block_size 만큼의
사이즈가 next_extent(byte 단위) 값과 같을 것이며, 이 만큼의 extent 영역을
할당할 수 없다는 뜻입니다.
따라서 datafile을 추가 시 이 byte 값 이상의 사이즈를 추가해야 합니다.


4. ora-1654 에러를 해결하는 방법

There are several options for solving failure to extend.

Manually Coalesce Adjacent Free Extents
---------------------------------------

ALTER TABLESPACE COALESCE;

The extents must be adjacent to each other for this to work.

Add a Datafile:
---------------

ALTER TABLESPACE ADD DATAFILE ' file name>' SIZE < |k|m>;


Lower "next_extent" and/or "pct_increase" size:
-----------------------------------------------

For non temporary segment problem:

ALTER STORAGE ( next < |k|m>
pctincrease );

For a temporary segment problem:

ALTER TABLESPACE DEFAULT STORAGE
(initial next <|k|m> pctincrease );


Resize the Datafile:
--------------------

ALTER DATABASE DATAFILE '' RESIZE
;


Reference Documents
-------------------

577 보기 태그:
Comment
등록된 코멘트가 없습니다.