ORA-01653, ORA-01654 등으로 대표되는 이 오류 그룹은 “테이블스페이스(Tablespace)에 더 이상 할당할 공간이 없습니다” 라는 명확한 의미를 가집니다. 대용량 데이터를 INSERT 하거나, 대규모 업데이트, 인덱스 생성 등의 작업을 할 때 테이블이나 인덱스가 필요로 하는 추가 공간을 확보하지 못하면 발생합니다.
이는 서비스 장애로 직결될 수 있는 중요한 문제이지만, 원인과 해결 방법이 명확하여 DBA라면 반드시 능숙하게 처리할 수 있어야 합니다.
## 핵심 개념: 테이블스페이스와 데이터 파일
이 오류를 이해하려면 두 가지 물리적 구조를 알아야 합니다.
- 테이블스페이스(Tablespace): 테이블, 인덱스 등 관련 있는 데이터 객체들을 그룹화하여 저장하는 논리적인 저장 단위입니다. (예: 사용자 데이터용
USERS_TS, 인덱스용INDEX_TS) - 데이터 파일(Datafile): 테이블스페이스에 저장되는 데이터가 실제로 기록되는 물리적인 운영체제 파일(
.dbf)입니다. 하나의 테이블스페이스는 하나 이상의 데이터 파일로 구성될 수 있습니다.
ORA-0165x 오류는 특정 테이블스페이스에 속한 모든 데이터 파일들의 물리적인 공간이 꽉 차서 더 이상 데이터를 기록할 수 없을 때 발생합니다.
## 1단계: 공간 부족 현황 파악하기
오류가 발생하면, 가장 먼저 어느 테이블스페이스의 공간이 얼마나 부족한지 정확히 확인해야 합니다.
- 테이블스페이스 사용량 확인 쿼리:이 쿼리를 실행하면 각 테이블스페이스의 전체 크기, 사용 중인 크기, 남은 크기, 사용률(%)을 한눈에 볼 수 있습니다.
USED_PERCENT가 95% 이상인 테이블스페이스가 문제의 원인일 확률이 높습니다.
SELECT
F.TABLESPACE_NAME,
ROUND(F.TOTAL_MB, 2) AS TOTAL_MB,
ROUND(F.TOTAL_MB - F.FREE_MB, 2) AS USED_MB,
ROUND(F.FREE_MB, 2) AS FREE_MB,
ROUND((F.TOTAL_MB - F.FREE_MB) / F.TOTAL_MB * 100, 2) || '%' AS USED_PERCENT
FROM (
SELECT
TABLESPACE_NAME,
SUM(BYTES) / 1024 / 1024 AS TOTAL_MB,
(SELECT SUM(BYTES) / 1024 / 1024
FROM DBA_FREE_SPACE
WHERE TABLESPACE_NAME = A.TABLESPACE_NAME) AS FREE_MB
FROM
DBA_DATA_FILES A
GROUP BY
TABLESPACE_NAME
) F
ORDER BY
USED_PERCENT DESC;
## 2단계: 공간 확보를 위한 해결 방안
공간을 확보하는 방법은 크게 두 가지입니다. 기존 데이터 파일의 크기를 늘리거나, 새로운 데이터 파일을 추가하는 것입니다.
해결 방안 1: 데이터 파일 크기 변경 (RESIZE)
기존 데이터 파일의 크기를 더 크게 변경하여 공간을 확보합니다. 디스크에 여유 공간이 충분할 때 사용할 수 있는 간편한 방법입니다.
- 해당 테이블스페이스의 데이터 파일 확인
SELECT FILE_NAME, BYTES / 1024 / 1024 AS MB FROM DBA_DATA_FILES WHERE TABLESPACE_NAME = 'USERS_TS'; -- 문제의 테이블스페이스 이름
- 데이터 파일 크기 변경 실행
-- '/path/to/datafile/users01.dbf' 파일의 크기를 2GB로 늘림 ALTER DATABASE DATAFILE '/path/to/datafile/users01.dbf' RESIZE 2G;
해결 방안 2: 새로운 데이터 파일 추가 (ADD DATAFILE)
기존 파일은 그대로 두고, 테이블스페이스에 새로운 데이터 파일을 추가하여 전체 공간을 늘립니다. 파일 시스템의 최대 파일 크기 제한이 있거나, 디스크 공간을 분산하고 싶을 때 유용합니다.
- 데이터 파일 추가 실행
-- 'USERS_TS' 테이블스페이스에 1GB 크기의 새 데이터 파일 'users02.dbf'를 추가 ALTER TABLESPACE USERS_TS ADD DATAFILE '/path/to/new_datafile/users02.dbf' SIZE 1G;
## 예방 조치: AUTOEXTEND 옵션
매번 수동으로 공간을 늘리는 것이 번거롭다면, 데이터 파일에 AUTOEXTEND 옵션을 설정할 수 있습니다. 이 옵션은 공간이 부족해질 때마다 Oracle이 자동으로 파일 크기를 지정된 만큼 늘려주는 기능입니다.
- AUTOEXTEND 설정
-- 'users01.dbf' 파일이 공간 부족 시 100MB씩 자동으로 증가하도록 설정 (최대 10GB까지) ALTER DATABASE DATAFILE '/path/to/datafile/users01.dbf' AUTOEXTEND ON NEXT 100M MAXSIZE 10G;
- 주의사항:
AUTOEXTEND는 편리하지만, 디스크 공간을 예기치 않게 모두 소진하여 더 큰 장애를 유발할 수 있습니다. 따라서MAXSIZE를 적절히 설정하고, 주기적으로 디스크 전체의 여유 공간을 모니터링하는 것이 매우 중요합니다.
ORA-0165x 오류는 DBA의 주기적인 모니터링과 용량 계획을 통해 충분히 예방할 수 있는 문제입니다. 문제가 발생했을 때는 당황하지 말고, 사용량을 확인하고 적절한 해결책을 적용하면 됩니다.