CREATE SCHEMA

DB/Common 2012. 4. 12. 10:00

 CREATE SCHEMA 구문 사용

  * 모든 테이블과 뷰 생성에 대해 하나의 연산으로 가능하게 할 때 쓴다.

  * 하나의 구문으로 처리하므로 관련 테이블과 뷰 중 하나라도 생성 실패하면, 트랜잭션 전체가 Rollback 된다.

    이것은 몇몇 테이블과 뷰의 생성 실패로 인해 관련 오브젝트들을 개별적으로 DROP 하는 부담을 없애준다.

  * 관련 구문에 이상이 없으면 생성을 완료하고 트랜잭션을 Commit 한다. 

  * Object인 테이블과 뷰 이외에 권한 부여(Grant) 또한 넣을 수 있다.

  * 실제 이 구문이 스키마(Schema)를 만드는 구문 같이 보이나, 실제 스키마를 만드는 것이 아니다.

    사용자가 생성되면서 사용자와 동일한 이름의 스키마가 생성되며, 이 구문은 단지 단일 연산이 가능하게만 한다.

  * 생성 시 사용되는 TABLESPACE 위치 지정 또한 가능하다.

 

- CREATE SCHEMA 제약사항

  * 반드시 현재 로그인 된 사용자 이름(스키마)과 동일한 스키마 명을 지정해야 한다. 그렇지 않으면 ORA-02421 에러를 반환한다.

  * 이 작업은 sys 유저 같이 DBA 권한이 있는 유저라 할 지라도 다른 이름의 스키마를 생성하는 것은 에러를 반환한다.

  * CREATE TABLE, CREATE VIEW, GRANT 이외의 구문 삽입 시, 전체적인 문장 해석 오류가 발생한다.

 

- CREATE SCHEMA 문법

 

 

  * 문법에서 보듯이 테이블, 뷰, 권한부여만 넣을 수 있다. 컬럼 추가나 인덱스 추가를 위한 구문들은 사용할 수 없다.

 

- CREATE SCHEMA 예제

  * 성공 예제( 로그인 세션 유저: a1 )

 CREATE SCHEMA AUTHORIZATION a1
  CREATE TABLE dept (
   deptno NUMBER(3,0) NOT NULL,
   dname VARCHAR2(15),
    CONSTRAINT pk_dept PRIMARY KEY(deptno)
    USING INDEX TABLESPACE a1_idx) TABLESPACE a1

  CREATE TABLE emp (
   empno NUMBER(5,0) NOT NULL,
   ename VARCHAR2(15) NOT NULL,
   deptno NUMBER(3,0),
    CONSTRAINT pk_emp PRIMARY KEY(empno)
    USING INDEX TABLESPACE a1_idx,
    CONSTRAINT fk_dept_emp FOREIGN KEY(deptno) REFERENCES dept(deptno) ) TABLESPACE a1

  CREATE VIEW emp_sal AS
   SELECT * FROM emp WHERE empno <= 3000

  GRANT select ON emp TO scott

/

  * 실패 예제(로그인 세션 유저: sys, 그러나 생성 스키마 이름은 a1 인 경우)

 SQL> connect / as sysdba
연결되었습니다.
SQL> CREATE SCHEMA AUTHORIZATION a1
  2   CREATE TABLE dept (
  3    deptno NUMBER(3,0) NOT NULL,
  4    dname VARCHAR2(15),
   ... (중략) ...
 14   CREATE VIEW emp_sal AS
 15    SELECT * FROM emp WHERE empno <= 3000
 16   GRANT select ON emp TO scott
 17  /
CREATE SCHEMA AUTHORIZATION a1
*
1행에 오류:
ORA-02421: 누락 혹은 부당한 스키마 권한 식별자

  로그인 유저와 생성할 스키마 권한 식별자는 반드시 동일해야 한다.


Posted by linuxism
,