에디션(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 |