사용자 - 오라클 DB에 접속하여 데이터를 관리하는 계정
스키마 - 데이터베이스에서 사용되는 논리적인 컨테이너. 이 컨테이너 안에는 데이터베이스에서 사용되는 테이블, 뷰, 인덱스, 시퀀드, 프로시저등이 들어간다.
각각의 스키마는 각각의 이름을 가진다.
세션권한 - 특정 사용자가 데이터베이스에 접속하여 세션을 시작할 때 가지는 권한
세션이 있는 동안에 작업을 할 수 있는 권한이 주어지고, 세션이 종료되면 해당 권한은 사라진다.
오라클 DB는 사용자별로 테이블, 인덱스, 뷰등이 따로 생성된다. 하지만 이것을 자세히 보면 사용자별로 만들어지는게 아니라 사용자가 만드는 스키마별로 구분되는 것 이다. 그래서 오라클DB에서는 사용자와 스키마를 구별하지 않고 사용하기도 한다.
유저(스키마1(테이블1,테이블2)), 유저2(스키마2(테이블1,테이블2)) 이런 느낌인듯하다
나는 기존에 있던 오라클 DB 에서 RUDQQ라는 admin 스키마로부터 STUDY 스키마를 만들었다. 이후 STUDY 스키마에 권한을 부여하는 것 부터 시작하겠다.
사용자를 생성 후 세션 권한이 부여되어야 데이터베이스 접속이 가능해서 권한을 주었다.
GRANT CREATE SESSION TO STUDY;
STUDY 스키마에 테이블을 생성을 할 수 있는 권한을 주었다.
GRANT CREATE TABLE TO STUDY;
STUDY 스키마에 테이블을 수정을 할 수 있는 권한을 주었다.
GRANT ALTER ANY TABLE TO STUDY;
STUDY 스키마에 테이블을 삭제 할 수 있는 권한을 주었다.
GRANT DROP ANY TABLE TO STUDY;
DDL 권한을 전부 주었다. 이젠 DML 권한을 주겠다.
GRANT SELECT ANY TABLE TO STUDY;
GRANT INSERT ANY TABLE TO STUDY;
GRANT UPDATE ANY TABLE TO STUDY;
GRANT DELETE ANY TABLE TO STUDY;
DCL은 생략하도록 하겠다.
이렇게 했더니 테이블 스페이스가 없다는 오류가 나왔다.
오라클은 테이블 스페이스를 만든 후 테이블을 만들 수 있다. 테이블 스페이스란 테이블이 저장될 공간을 먼저 만들고 나서 테이블을 생성한다. 각각의 테이블을 테이블 스페이스별로 나누어서 관리함으로써 성능을 향상시키는 것 이다.
STUDY 스키마에 사용할 STUDY_TABLESPACE 라는 테이블 스키마를 생성했다.
CREATE TABLESPACE STUDY_TABLESPACE DATAFILE 'study_tablespace.dbf' SIZE 100M AUTOEXTEND ON;
이후 테이블스페이스에 무제한 용량을 주었다.
GRANT UNLIMITED TABLESPACE TO STUDY;
이제 Create문을 쓸 수 있다.
이제 STUDY 스키마에서 테이블을 만들어야겠다.
CREATE TABLE std
(
num NUMBER(10) NOT NULL
);
그런데 생각해 보니 이름 컬럼을 추가하고 싶다. ALTER 문을 이용해서 추가하겠다.
ALTER TABLE std ADD (name VARCHAR2(10) NOT NULL);
성공적으로 추가되었다.