본문 바로가기

Oracle

[Oracle] User별 Quota 확인 및 변경(+ Unlimited Tablespace)

 

1. Quota란 무엇인가

  • 사용자 계정의 기본 테이블스페이스의 용량 할당 또는 사용량을 제한하는 것
  • Undo Tablespace와 Temporary Tablespace는 Quota를 지정할 수 없음
  • 하나의 사용자(Owner)는 여러 Quota 를 가질 수 있음
  • Owner, TableSpace 조합은 하나의 Quota 만 가질 수 있음
  • 만약, 사용자_A라는 유저의 default tablespace가 Users 테이블스페이스일지라도 quota=0인 경우 Users 테이블스페이스에 extent가 포함된 테이블을 생성할 수 없음

 


 

2. Quota 부여

  2-1. 유저 생성

-- 기존에 테이블스페이스 생성이 되어있는 경우
CREATE USER 사용자명(TEST) IDENTIFIED BY 사용자password(TEST)
        DEFAULT TABLESPACE 테이블스페이스명(USERS)
        QUOTA UNLIMITED ON 테이블스페이스명(USERS)
;

GRANT CONNECT, RESOURCE TO 사용자명(TEST);

 

 

  2-2. 테이블스페이스 생성 및 Quota 권한 부여

-- 기존에 테이블스페이스가 생성되어있지 않는 경우

CREATE TABLESPACE 테이블스페이스명(TS_TEST) DATAFILE '데이터파일위치' SIZE 30G;
ALTER USER 사용자명(TEST) DEFAULT TABLESPACE TS_TEST QUOTA 1M ON TS_TEST;

 

 

  2-3. DBA_TS_QUOTAS 확인

SELECT * FROM DBA_TS_QUOTAS;

TABLESPACE_NAME      USERNAME                  BYTES  MAX_BYTES     BLOCKS MAX_BLOCKS DRO
-------------------- -------------------- ---------- ---------- ---------- ---------- ---
SYSTEM               SYS                      589824         -1         72         -1 NO
SYSAUX               SYS                      917504         -1        112         -1 NO
SYSAUX               SYSTEM                        0         -1          0         -1 NO
TS_TEST              TEST                          0         8192        0          1 NO
USERS                TEST                          0         -1          0         -1 NO

 

  • TEST라는 유저는 TS_TEST 테이블스페이스와 USERS 테이블스페이스에 대한 권한과 할당량이 모두 부여됨
  • MAX_BLOCKS, MAX_BYTES가 모두 -1이면 UNLIMITED 로 데이터를 넣을 수 있다는 의미
  • QUOTA=1로 설정하면 오라클의 최소 할당 단위인 1개의 block크기인 8KB만큼만 사용 가능하게됨. 더 큰 데이터가 들어오면 INSERT되지 않음 (테이블스페이스의 initial_extent 기본값이 64KB로 설정되어 있어 8KB로는 테이블을 사용할 수 없음)
  • Quota 할당량이 부족하면 에러 발생
ORA-01536: space quota exceeded for tablespace '테이블스페이스명'

 

  • DBA_TS_QUOTA는 사용자에게 Quota가 설정된 경우에만 조회됨
  • Quota가 할당된 사용자는 segment 생성에 문제가 없음

 


 

3. Quota 제거

ALTER USER 사용자 QUOTA 0 ON 사용자가 가지고있는 테이블스페이스;

 

  • Quota 제거는 사용자 또는 그룹이 파일 시스템에서 사용할 수 있는 디스크 공간의 제한을 풀어주는 것 의미. 사용자가 더 많은 디스크 공간 사용 가능

 


 

4. Unlimited Tablespace

  • 시스템 권한으로, 테이블스페이스 무제한 허용
  • 이 권한을 부여받은 계정은 Quota를 설정하지 않아도 DB 안의 모든 테이블스페이스에 대해서 Quota Limited 권한이 있음
  • Unlimited Tablespace 권한이 없으면 Quota가 명시적으로 설정된 테이블스페이스에만 접속 가능
  • Role에는 부여할 수 없음
  • 유저에 부여하는 Quota보다 우선순위가 높음
  • 테이블이나 인덱스 생성 시 테이블스페이스를 지정하지 앟으면, 시스템 테이블스페이스에 객체가 생성됨. 만약 해당 스키마(=유저)에 Default Tablespace를 지정해두었다면, 해당 Tablespace에 생성됨

 

구분 Quota = 0 Unlimited Tablespace
의미 특정 테이블스페이스에 대한 용량 할당 없음 특정 테이블스페이스에 대한 용량 제한 없음
객체 생성 불가능
사용자가 이미 사용 중인 공간은 유지됨
가능
사용 접근 권한 제한, 객체 생성 불필요한 경우 모든 객체 생성 및 사용 권한 필요, 용량 제한 없음
보안 안전 잠재적 위험 (특히 시스템 테이블스페이스)

 


 

 

5. ORA-01950 에러(no privileges on tablespace '테이블스페이스명')

  • 테이블스페이스에 대해서 유저의 권한이 없어서 발생
  • 해결방법
ALTER USER 사용자명 QUOTA 50M(사이즈지정) ON 테이블스페이스명;