프로그래밍&DB

[Oracle/오라클] ORA-01653: 테이블스페이스에서 확장할 수 없습니다 오류 원인 및 완벽 해결 가이드 (조회 및 용량 추가)

푸른길땡 2026. 4. 22. 12:54
반응형

잘 돌아가던 프로그램이 갑자기 멈췄다?
웹 서비스나 배치 프로그램이 평소처럼 잘 돌아가다가 어느 순간 갑자기 먹통이 되어 로그를 확인해 본 경험, 다들 한 번쯤 있으실 겁니다. 로그 파일에 아래와 같이 무시무시한 에러 메시지가 쏟아지고 있다면 원인은 아주 명확합니다.

 

org.springframework.jdbc.UncategorizedSQLException ...
nested exception is java.sql.BatchUpdateException: ORA-01653: GW5_OFFICE.ZT_MAIL_SEND_RECIPIENT 테이블을 128(으)로 GW5_DATA 테이블스페이스에서 확장할 수 없습니다

 

테이블스페이스에서 확장할 수 없습니다 (Unable to extend table in tablespace)'라는 문구에서 알 수 있듯이, 이 에러는 데이터베이스의 하드디스크 역할을 하는 공간인 '테이블스페이스(Tablespace)'의 용량이 100% 꽉 찼을 때 발생합니다. 새로운 데이터를 INSERT 하거나 기존 데이터를 UPDATE 하려고 해도 더 이상 데이터를 기록할 빈 공간이 없어서 시스템이 뻗어버린 것이죠.

오늘은 이 아찔한 ORA-01653 에러를 마주했을 때, 현재 용량 상태를 정확히 진단하고 쿼리를 통해 공간을 늘려주는 2가지 해결 방법에 대해 알아보겠습니다.


1단계: 테이블스페이스 용량 및 가용량 확인하기
먼저 정말로 공간이 꽉 찬 것인지, 어느 테이블스페이스가 문제인지 진단해 보아야 합니다.

가장 단순하게 파일 경로와 이름만 보고 싶다면 SELECT * FROM DBA_DATA_FILES; 쿼리를 날려도 되지만, 실무에서는 전체 용량 대비 남은 용량(%)을 한눈에 파악하는 것이 중요합니다. 아래의 상세 진단 쿼리를 실행해 보세요.

 

-- 테이블스페이스별 전체 용량 및 남은 용량(%) 확인 쿼리
SELECT 
    df.file_name "파일명",
    df.tablespace_name "테이블 스페이스명",
    TO_CHAR((df.bytes / 1024), '999,990,999') "총 (Kb)",
    TO_CHAR((((df.bytes - Sum(Nvl(fs.bytes,0)))) / 1024), '999,990,999') "사용(Kb)",
    TO_CHAR((sum(Nvl(fs.bytes,0)) / 1024), '999,990,999') "가용(Kb)",
    TRUNC((Sum(Nvl(fs.bytes,0)) / (df.bytes)) * 100, 2) "가용 %"
FROM DBA_FREE_SPACE fs, DBA_DATA_FILES df
WHERE fs.file_id(+) = df.file_id
GROUP BY df.tablespace_name, df.file_name, df.bytes
ORDER BY df.tablespace_name;

위 쿼리를 실행한 결과, 에러 로그에 찍혀있던 GW5_DATA 테이블스페이스의 "가용 %"가 0%로 나온다면 공간이 완벽하게 고갈된 상태임이 확실해집니다.

 


2단계: 에러의 원인과 2가지 해결 방법
왜 이런 현상이 생길까요? 보통 오라클 DB를 처음 세팅할 때 데이터파일의 최대 크기(MAXSIZE)를 특정 용량으로 제한해 두었거나, 꽉 찼을 때 스스로 용량을 늘리는 자동 확장(AUTOEXTEND) 옵션을 꺼두었기 때문입니다.

해결 방법은 상황에 따라 크게 2가지로 나뉩니다.

해결 방법 A. 기존 데이터파일의 자동 확장(AUTOEXTEND) 허용하기
기존에 할당된 데이터파일의 최대 설정 크기(MAXSIZE) 제한을 풀어서 무제한으로 자동으로 늘어나게끔 만들어주는 방법입니다. 가장 빠르고 간단합니다.

 

-- 기존 데이터파일을 무제한 자동 확장으로 변경
ALTER DATABASE DATAFILE 'D:\APP\ADMINISTRATOR\ORADATA\GW5\GW_DATA_01.DBF' 
AUTOEXTEND ON MAXSIZE UNLIMITED;

(주의: 파일 경로 부분은 앞서 1단계 조회 쿼리에서 확인한 본인의 실제 .DBF 파일 경로로 수정해서 실행하셔야 합니다.)

 

해결 방법 B. 아예 새로운 데이터파일 추가(ADD) 하기 (실무 권장)
오라클 DB의 특성상 하나의 데이터파일(.DBF)은 블록 크기에 따라 무한정 커질 수 없고 물리적인 한계(보통 32GB)가 존재합니다. 따라서 위 A번 방법처럼 UNLIMITED를 주었음에도 한계치에 도달해 에러가 났다면, 아예 새로운 데이터파일 덩어리를 하나 더 붙여주어야 합니다. 


-- 테이블스페이스에 새로운 데이터파일(1000M) 추가 및 자동 확장 설정
ALTER TABLESPACE TABLESPACE_OFFICE6
ADD DATAFILE 'D:\APP\ADMINISTRATOR\ORADATA\GW5\GW_DATA_02.DBF'
SIZE 1000M AUTOEXTEND ON MAXSIZE UNLIMITED;

반응형