회사를 다니면서 Postgres만 거의 2년간 사용하다 보니, 오랜만에 Oracle을 가지고 스키마를 생성해
사용하려 하니, 생소해서 오늘은 오라클에서의 스키마에 대해 한번 정리해보려고 한다.
오라클과 다른 데이터베이스 소프트웨어(Postgres/MySQL...)에서의 스키마는 조금 다르다.
Postgres
Oracle
이런 느낌이다.. 그래서 보통 Postgres를 사용할 때는 필요한 스키마를 생성해서 스키마에 테이블 만들고
썼었는데.. Oracle에서는 그게 안되더라..
그럼 실제로 한번 스키마를 만들어보면서 이해 해보도록 하자.
1) Oracle 사용자 생성
-- MOCHI라는 사용자를 생성
CREATE USER MOCHI IDENTIFIED BY MOCHI;
-- MOCHI 사용자에게 DBA 권한을 줌
GRANT CONNECT, RESOURCE, DBA to MOCHI;
이렇게 하고, DBeaver의 스키마를 보면...
이렇게 MOCHI라는 스키마가 생성 된 것을 알 수 있다. 이제 이 MOCHI라는 스키마에 테이블을 생성해보자.
-- MOCHI 스키마에 user_table을 CREATE함
CREATE TABLE MOCHI.user_table (
user_id varchar(100) NULL,
user_name varchar(100) NULL
);
이 쿼리를 실행시키면 어떻게 될까?
SQL Error [1950] [42000]: ORA-01950: no privileges on tablespace 'SYSTEM' 에러 발생
즉 현재 접속해 있는 계정은 'SYSTEM'인데 MOCHI라는 사용자가 소유하고 있는 MOCHI스키마에
접근하려고 하니, 해당 tableSpace에 권한이 없다 라는 내용의 에러가 발생한 것이다..
그럼 이번에는 MOCHI 사용자로 로그인을 한 뒤, MOCHI 스키마에 테이블을 생성하면 어떻게 될까?
MOCHI 사용자로 로그인하니, 그제서야 MOCHI 스키마에 테이블을 생성 할 수 있었다.
그럼 스키마를 생성할때마다 사용자를 생성해야 되는건가? 라는 생각이 든다.
맞다. Oracle에서는 스키마를 생성하려면 사용자를 생성해야 한다.
Oracle에서는 스키마를 생성하는 명령어가 CREATE USER 명령어이다..
그럼 다른 사용자의 스키마에는 접근을 할 수 없는가? 그건 또 아니다. 권한을 주면 된다.
Oracle 테이블 스페이스 접근권한 부여 명령어
--특정 사용자에게 특정 테이블스페이스에 50mb만큼 사용권한을 줌
--alter user [사용자명] quota 50M on [tableSpace명];
alter user MOCHI quota 50M on SYSTEM;
-- 특정 사용자에게 모든 테이블스페이스에 무제한 사용권한을 줌
--grant unlimited tablespace to [사용자명];
grant unlimited tablespace to SYSTEM;
나는 SYSTEM 사용자에게 모든 테이블스페이스에 대한 권한을 주었다.
이제 SYSTEM 사용자로 로그인하여, MOCHI스키마에 테이블을 만들 수 있다. 아래처럼
이렇게 오늘은 오라클의 스키마가 다른 데이터베이스들과 어떻게 다른 지에 대해서 알아보았다.
솔직히 데이터베이스들간의 CRUD는 다 비슷하고, 사용 가능한 함수만 조금 다르다 뿐이라고 생각했는데,
스키마도 이렇게 다르다는 건 처음 알았다. 공부 할 게 아직도 많구나..