Oracle/Administration2012. 5. 31. 09:14

에디션(edition)은 오브젝트를 재정의할 수 있는 기능이다. 에디션과 관련된 EDITIONING 뷰를 테스트해보자.


SYS 사용자 세션에서 에디션을 생성하자. 기본 에디션은 ORA$BASE다. 하나의 에디션은 하나의 하위 에디션만 가질 수 있다.

-- 1-1 : SYS
CREATE EDITION e1;

에디션이 생성되었습니다.

CREATE EDITION e2 AS CHILD OF e1;

에디션이 생성되었습니다.

CREATE EDITION e3 AS CHILD OF e1;

ORA-38807: 구현 제한 사항: 한 버전에 하나의 하위만 가질 수 있습니다.

SELECT * FROM dba_editions;

EDITION_NAME PARENT_EDITION_NAME USABLE
------------ ------------------- ------
ORA$BASE                         YES
E1           ORA$BASE            YES
E2           E1                  YES

3 행이 선택되었습니다.

아래와 같이 u1 사용자를 생성하고, e1, e2 에디션에 대한 사용 권한을 부여하자.

-- 1-2
DROP USER u1 CASCADE;
GRANT DBA TO u1 IDENTIFIED BY u1;

ALTER USER u1 ENABLE EDITIONS;

SELECT editions_enabled FROM dba_users WHERE username = 'U1';

EDITIONS_ENABLED
----------------
Y

1개의 행이 선택되었습니다.

GRANT USE ON EDITION e1 TO u1;
GRANT USE ON EDITION e2 TO u1;

SELECT * FROM dba_tab_privs WHERE grantee = 'U1';

GRANTEE OWNER TABLE_NAME GRANTOR PRIVILEGE GRANTABLE HIERARCHY 
------- ----- ---------- ------- --------- --------- --------- 
U1      SYS   E1         SYS     USE       NO        NO        
U1      SYS   E2         SYS     USE       NO        NO        

2 행이 선택되었습니다.

u1 유저로 접속하여 t1 테이블을 생성하자. ORA$BASE가 기본 에디션이다.

-- 2-1 : U1
SELECT SYS_CONTEXT ('USERENV', 'CURRENT_EDITION_NAME') AS current_edition_name FROM DUAL;

CURRENT_EDITION_NAME
--------------------
ORA$BASE

1개의 행이 선택되었습니다.

CREATE TABLE t1 AS SELECT 1 AS c1, 2 AS c2 FROM DUAL;

E1 에디션에서 EDITIONING 뷰를 생성하자. EDITIONING 뷰는 단일 테이블과 가공되지 않은 열만 사용할 수 있다.

-- 2-2
ALTER SESSION SET EDITION = e1;

SELECT SYS_CONTEXT ('USERENV', 'CURRENT_EDITION_NAME') AS current_edition_name FROM DUAL;

CURRENT_EDITION_NAME
--------------------
E1

1개의 행이 선택되었습니다.

CREATE OR REPLACE EDITIONING VIEW v1 AS SELECT c1 FROM t1;

SELECT * FROM v1;

C1
--
 1

1개의 행이 선택되었습니다.

E2 에디션에서 동일한 이름으로 EDITIONING 뷰를 생성하자. 뷰를 조회하면 2가 반환된다.

-- 2-3
ALTER SESSION SET EDITION = e2;

CREATE OR REPLACE EDITIONING VIEW v1 AS SELECT c2 FROM t1;

SELECT * FROM v1;

C2
--
 2

1개의 행이 선택되었습니다.


E1 에디션에서 뷰를 조회하면 1이 반환된다.

-- 2-4
ALTER SESSION SET EDITION = e1;

SELECT * FROM v1;

C1
--
 1

1개의 행이 선택되었습니다.

ORA$BASE 에디션에서 뷰를 조회하면 에러가 발생한다.

-- 2-5
ALTER SESSION SET EDITION = ora$base;

SELECT * FROM v1;

ORA-00942: 테이블 또는 뷰가 존재하지 않습니다

*_EDITIONING_VIEWS_AE 뷰에서 EDITIONING 뷰에 대한 정보를 조회할 수 있다.

-- 2-6
SELECT * FROM dba_editioning_views_ae WHERE view_name = 'V1';

OWNER VIEW_NAME TABLE_NAME EDITION_NAME
----- --------- ---------- ------------
U1    V1        T1         E1
U1    V1        T1         E2

2 행이 선택되었습니다.


SYS 사용자 세션에서 u1 유저와 에디션을 삭제하자.

-- 3 : SYS
DROP USER u1 CASCADE;
DROP EDITION e2 CASCADE;
DROP EDITION e1 CASCADE;


'Oracle > Administration' 카테고리의 다른 글

NUMBER 타입 테스트  (0) 2014.03.07
세션 정보 변경  (0) 2012.06.25
CHECK 제약조건 적용 사례  (0) 2012.05.22
PK 제약조건과 인덱스 #1  (0) 2012.05.18
RANGE 파티션 통계정보 관리 패키지  (0) 2012.05.10
Posted by 정희락_