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 테이블스페이스명;
'Oracle' 카테고리의 다른 글
[Oracle] 오라클 데이터베이스 초기화 파라미터 (1) | 2025.05.03 |
---|---|
[Oracle] spfile에서 pfile로 복사해서 비교하기 (0) | 2025.05.03 |
[Oracle] 시노님(Synonym) 의미 및 생성/조회/삭제 (0) | 2025.05.03 |
[Oracle] 권한 관리(부여/회수) 및 ROLE 관리 (0) | 2025.05.03 |
[Oracle] DB Link 사용 방법(생성, 삭제, 조회, ORA-12154, ORA-01017에러) (0) | 2025.05.01 |