2026년 07월 21일 | DBMS Error 가이드
이 글에서 다루는 내용
ORA-01536 에러의 원인 분석, 해결 SQL, 예방 방법을 실무 관점에서 정리합니다.
ORA-01536 space quota exceeded for tablespace 는?
ORA-01536 에러는 특정 사용자가 테이블스페이스에 할당된 공간 할당량(Quota)을 초과하여 더 이상 객체를 생성하거나 데이터를 삽입할 수 없을 때 발생합니다. Oracle은 각 사용자별로 테이블스페이스에 사용할 수 있는 최대 공간을 제한할 수 있으며, 이 한도를 초과하는 순간 해당 에러가 발생합니다. DBA가 명시적으로 Quota를 설정하지 않았거나, 운영 중 데이터가 급격히 증가하여 기존에 설정된 Quota를 넘어섰을 경우 주로 발생합니다.
주요 발생 원인
- 사용자에게 테이블스페이스 Quota가 설정되지 않았거나 0으로 설정된 경우
신규 사용자를 생성할 때 테이블스페이스에 대한 Quota를 명시적으로 부여하지 않으면 기본값이 0으로 설정됩니다. 이 상태에서는 해당 테이블스페이스에 단 한 바이트도 사용할 수 없기 때문에, 테이블 생성이나 데이터 INSERT 시 즉시 ORA-01536 에러가 발생합니다. 특히 개발 환경에서 신규 스키마 생성 후 Quota 설정을 빠뜨리는 경우가 많습니다.
- 기존에 설정된 Quota 한도 초과
DBA가 특정 사용자에게 예를 들어 500MB의 Quota만 부여했는데, 시간이 지남에 따라 데이터가 급격히 증가하여 할당된 Quota를 모두 사용한 경우입니다. 대용량 배치 작업, 로그성 테이블의 데이터 증가, 인덱스 리빌드 등의 작업에서 갑작스럽게 공간이 필요해질 때 자주 발생합니다. 운영 환경에서는 특히 월말 또는 연말 정산 배치 작업 시 빈번하게 나타납니다.
- 테이블스페이스 자체의 용량 부족과 혼동
ORA-01536은 테이블스페이스 전체의 물리적 공간 부족(ORA-01653)과는 다르지만, 현장에서는 종종 혼동됩니다. 사용자의 Quota는 남아 있으나 테이블스페이스 자체에 여유 공간이 없을 때에도 유사한 증상이 나타날 수 있어 원인 분석 시 주의가 필요합니다. 두 에러를 구분하지 못하면 잘못된 조치를 취할 수 있으므로 반드시 정확한 에러 코드를 확인해야 합니다.
해결 방법
1. 현재 사용자의 Quota 현황 확인
먼저 문제가 발생한 사용자의 Quota 설정 현황을 확인합니다.
-- 특정 사용자의 테이블스페이스 Quota 확인
SELECT USERNAME,
TABLESPACE_NAME,
BYTES / 1024 / 1024 AS USED_MB,
MAX_BYTES / 1024 / 1024 AS QUOTA_MB,
CASE WHEN MAX_BYTES = -1 THEN 'UNLIMITED'
WHEN MAX_BYTES = 0 THEN 'NO QUOTA'
ELSE TO_CHAR(MAX_BYTES / 1024 / 1024) || ' MB'
END AS QUOTA_STATUS
FROM DBA_TS_QUOTAS
WHERE USERNAME = 'YOUR_USER_NAME'
ORDER BY TABLESPACE_NAME;
-- 시스템 전체 사용자의 Quota 현황 조회
SELECT USERNAME,
TABLESPACE_NAME,
BYTES / 1024 / 1024 AS USED_MB,
MAX_BYTES / 1024 / 1024 AS MAX_MB
FROM DBA_TS_QUOTAS
ORDER BY USERNAME, TABLESPACE_NAME;
2. 사용자에게 Quota 추가 또는 확장
Quota가 부족한 경우 DBA 권한으로 아래와 같이 Quota를 늘려줍니다.
-- 특정 용량으로 Quota 설정 (예: 1GB)
ALTER USER your_user_name QUOTA 1024M ON your_tablespace_name;
-- 또는 무제한 Quota 부여 (운영 환경에서는 신중하게 사용)
ALTER USER your_user_name QUOTA UNLIMITED ON your_tablespace_name;
-- 여러 테이블스페이스에 동시에 Quota 부여
ALTER USER your_user_name
QUOTA 500M ON users
QUOTA 2048M ON data_ts
QUOTA UNLIMITED ON temp_ts;
3. 신규 사용자 생성 시 Quota 함께 설정
-- 사용자 생성과 동시에 Quota 부여하는 권장 방법
CREATE USER new_app_user
IDENTIFIED BY "SecurePassword123!"
DEFAULT TABLESPACE app_data
TEMPORARY TABLESPACE temp
QUOTA 2048M ON app_data
QUOTA UNLIMITED ON app_index;
-- 권한 부여
GRANT CONNECT, RESOURCE TO new_app_user;
4. 현재 Quota 사용률 모니터링 쿼리
-- Quota 사용률이 80% 이상인 사용자 목록 추출 (사전 경고용)
SELECT USERNAME,
TABLESPACE_NAME,
BYTES / 1024 / 1024 AS USED_MB,
MAX_BYTES / 1024 / 1024 AS QUOTA_MB,
ROUND(BYTES / MAX_BYTES * 100, 2) AS USAGE_PCT
FROM DBA_TS_QUOTAS
WHERE MAX_BYTES > 0
AND (BYTES / MAX_BYTES * 100) >= 80
ORDER BY USAGE_PCT DESC;
5. RESOURCE 롤 관련 주의사항
-- RESOURCE 롤을 부여해도 자동으로 UNLIMITED QUOTA가 부여되지 않음을 확인
-- (Oracle 12c 이후 변경된 동작)
-- 명시적으로 Quota를 별도 부여해야 합니다.
-- 잘못된 방식 (Quota가 자동 부여된다고 오해하는 경우)
GRANT RESOURCE TO your_user_name;
-- 올바른 방식 (RESOURCE 롤 + 명시적 Quota 부여)
GRANT RESOURCE TO your_user_name;
ALTER USER your_user_name QUOTA UNLIMITED ON your_tablespace_name;
예방 방법
- Quota 사용률 모니터링 자동화
DBA_TS_QUOTAS 뷰를 활용하여 Quota 사용률이 일정 임계치(예: 80%)를 초과하면 자동으로 알림을 발송하는 모니터링 스크립트를 스케줄러(DBMS_SCHEDULER)에 등록해 두어야 합니다. 이를 통해 사전에 Quota 부족 상황을 인지하고 배치 작업이나 서비스 중단 없이 선제적으로 Quota를 확장할 수 있습니다. 아래와 같이 Oracle DBMS_SCHEDULER를 활용한 일별 점검 작업을 구성하는 것을 권장합니다.
“`sql
— 매일 오전 8시에 Quota 사용률 점검 Job 등록 예시
BEGIN
DBMS_SCHEDULER.CREATE_JOB(
JOB_NAME => ‘CHECK_QUOTA_USAGE’,
JOB_TYPE => ‘PLSQL_BLOCK’,
JOB_ACTION => ‘
DECLARE
v_msg VARCHAR2(4000);
BEGIN
FOR r IN (
SELECT USERNAME, TABLESPACE_NAME,
ROUND(BYTES/MAX_BYTES*100,2) AS PCT
FROM DBA_TS_QUOTAS
WHERE MAX_BYTES > 0
AND (BYTES/MAX_BYTES*100) >= 80
) LOOP
v_msg := v_msg || r.USERNAME || ” / ” ||
r.TABLESPACE_NAME || ” : ” ||
r.PCT || ”%” || CHR(10);
END LOOP;
IF v_msg IS NOT NULL THEN
— 실제 환경에서는 UTL_MAIL 등으로 알림 발송
DBMS_OUTPUT.PUT_LINE(”QUOTA WARNING: ” || v_msg);
END IF;
END;
‘,
START_DATE => SYSTIMESTAMP,
REPEAT_INTERVAL => ‘FREQ=DAILY; BYHOUR=8; BYMINUTE=0’,
ENABLED => TRUE
);
END;
/
“`
- 사용자 생성 표준 절차 수립 및 문서화
신규 사용자(스키마) 생성 시 Quota 설정을 포함한 표준 생성 스크립트를 템플릿화하여 DBA 팀 내에서 공유하고, 체크리스트 형태로 관리해야 합니다. 특히 개발, 스테이징, 운영 환경별로 적절한 Quota 기준을 사전에 정의해 두고, 신규 프로젝트 온보딩 시 DBA가 반드시 검토하는 프로세스를 확립하는 것이 중요합니다. 이를 통해 운영 중 갑작스러운 Quota 부족으로 인한 장애를 미연에 방지할 수 있습니다.
관련 에러
- ORA-01653:
unable to extend table ... by ... in tablespace— 테이블스페이스의 물리적 공간 자체가 부족할 때 발생하며, ORA-01536과 혼동되기 쉽습니다. ORA-01536은 사용자 Quota 문제이고 ORA-01653은 테이블스페이스 전체 공간 문제입니다. - ORA-01950:
no privileges on tablespace— 사용자에게 해당 테이블스페이스에 대한 Quota가 전혀 없을 때(0 또는 미설정) 발생할 수 있으며, ORA-01536과 유사한 상황에서 나타납니다. - ORA-30036:
unable to extend segment by ... in undo tablespace— UNDO 테이블스페이스와 관련된 공간 부족 에러로, 대용량 트랜잭션 처리 시 함께 발생하는 경우가 있습니다.
주요 DBMS error code를 정리하는 시리즈입니다.
블로그 홈에서 다른 에러도 확인하세요.
본 포스트는 AI가 생성한 기술 가이드입니다. 운영 환경 적용 전 충분한 검토를 권장합니다.