Quota와 공간 사용 권한 (RESUMABLE 포함)
테이블스페이스 Quota 조회와 할당, ORA-01536 및 RESUMABLE_TIMEOUT을 이용한 공간 부족 대기 실습
#핵심 요약
Quota는 사용자가 특정 테이블스페이스에 쓸 수 있는 공간 한도임
테이블스페이스별로 크기나 UNLIMITED를 주고, UNLIMITED TABLESPACE 시스템 권한은 모든 테이블스페이스를 제한 없이 쓰게 함
한도를 넘으면 ORA-01536: space quota exceeded for tablespace가 남
실습에서는 긴 배치가 이 오류로 실패하지 않도록 RESUMABLE_TIMEOUT을 설정해 오류 대신 대기하게 한다고 설명함
RESUMABLE_TIMEOUT은 시스템 수준에서 재개 가능한 문장을 켜고 대기 시간(초)을 정함
기본값은 0임
#필수 명령어 또는 SQL
#Quota 조회
SELECT username, tablespace_name, max_bytes
FROM dba_ts_quotas
WHERE username = '<USERNAME>';결과 해석:
MAX_BYTES가 사용 한도임
UNLIMITED일 때 표시되는 값은 기재 없음
#Quota 할당
ALTER USER <USERNAME> QUOTA 100M ON users;
ALTER USER <USERNAME> QUOTA UNLIMITED ON users;
GRANT UNLIMITED TABLESPACE TO <USERNAME>;결과 해석:
수업 자료에는 UNLIMITIED로 철자가 틀려 있어 바로잡았음UNLIMITED TABLESPACE는 모든 테이블스페이스에 적용되므로 범위가 넓음
#ORA-01536 대응
ALTER USER sales QUOTA 50M ON sales_q1;ALTER SYSTEM SET resumable_timeout = 7200;
ALTER SYSTEM SET deferred_segment_creation = FALSE;결과 해석:
Quota 증설은 원인 해소이고, RESUMABLE_TIMEOUT=7200은 공간 할당 실패 시 7200초(2시간) 동안 문장을 멈춰 기다리게 하는 설정으로 Quota 증설과 별개임DEFERRED_SEGMENT_CREATION 변경은 실습 설정 기록이며 Quota 문제와 혼동하지 않음
실제 적용 결과는 수업 자료에서도 검증되지 않았음
#구문과 옵션 설명
| 구문 | 의미 | 바꿀 입력값 |
|---|---|---|
QUOTA <크기> ON <테이블스페이스> |
테이블스페이스별 한도 | 크기, 테이블스페이스 |
QUOTA UNLIMITED ON <테이블스페이스> |
그 테이블스페이스는 무제한 | 테이블스페이스 |
GRANT UNLIMITED TABLESPACE |
모든 테이블스페이스 무제한 | 사용자 |
RESUMABLE_TIMEOUT |
재개 가능한 문장의 대기 시간(초) 0이면 사용 안 함 |
초 |
RESUMABLE_TIMEOUT은 ALTER SESSION과 ALTER SYSTEM으로 바꿀 수 있고 PDB에서도 바꿀 수 있음
범위는 0부터 2^31-1초임(Oracle Database Reference 19c E96196-45, RESUMABLE_TIMEOUT)
#사용 조건과 주의사항
재개 가능한 문장이 실제로 멈췄을 때 확인하고 처리하는 방법(관련 뷰, 권한)은 기재 없음