LoginSignup
4
7

More than 5 years have passed since last update.

Oracle Editions機能についてのメモ

Last updated at Posted at 2016-08-21

Oracle Editionsとは

Oracleオブジェクトのバージョニングを行う機能。
開発などで、一時的にビューやプロシージャの変更をしたい場合に使用する。

  • 変更はエディションという単位で管理する。
  • Oracle11gR2より導入。
  • エディションに対応しているスキーマオブジェクトタイプは以下の通り。 ※その他のスキーマオブジェクトタイプは全てエディションに非対応。
    • SYNONYM
    • VIEW
    • PL/SQLオブジェクト型
      (FUNCTION,LIBRARY,PACKAGEおよびPACKAGE BODY,PROCEDURE,TRIGGER,TYPEおよびTYPE BODY)
  • ユーザ接続時のエディション(デフォルトエディション)は設定で変更することが出来る。
  • インストール直後から、エディション'ORA$BASE'が設定されている。(ベースエディション)

内容

以下の手順で「Oracle Editions」の動作を確認する。

  • テストユーザの作成
  • 新しいエディションの作成
  • エディションを使用するユーザに権限を付加
  • テストユーザに接続し、エディションの確認
  • ベースエディションにテスト用プロシージャ作成
  • 作成した新しいエディションにテスト用プロシージャ作成
  • エディションを切り替えて動作を確認
  • デフォルトエディション変更
  • エディション削除

動作確認

テストユーザ作成

-- テスト用テーブルスペース「TESTTS01」作成
CREATE BIGFILE TABLESPACE TESTTS01 DATAFILE '/u01/app/oracle/oradata/TEST/testts01.dbf' SIZE 20M
AUTOEXTEND ON NEXT 500K MAXSIZE UNLIMITED
SEGMENT SPACE MANAGEMENT AUTO;

-- テスト用プロファイル「TESTPF01」作成
CREATE PROFILE TESTPF01
LIMIT FAILED_LOGIN_ATTEMPTS UNLIMITED
PASSWORD_LIFE_TIME UNLIMITED;

-- テスト用ユーザ「TEST01」作成
CREATE USER TEST01 IDENTIFIED BY oracle
DEFAULT TABLESPACE TESTTS01
TEMPORARY TABLESPACE TEMP
PROFILE TESTPF01
QUOTA UNLIMITED ON TESTTS01;

-- 権限付与
GRANT CREATE SESSION, ALTER SESSION TO TEST01;
GRANT CREATE TABLE,CREATE SEQUENCE,CREATE SYNONYM,CREATE VIEW TO TEST01;

-- 権限確認
SELECT * FROM SESSION_PRIVS order by 1;

新しいエディションの作成

SQL> select * from DBA_EDITIONS;
EDITION_NAME  PARENT_EDITION_NAME  USABLE
------------- -------------------- -------
ORA$BASE                           YES

SQL> create edition new_edt as child of ORA$BASE;
エディションが作成されました。

SQL> select * from DBA_EDITIONS;
EDITION_NAME  PARENT_EDITION_NAME  USABLE
------------- -------------------- -------
ORA$BASE                           YES
NEW_EDT       ORA$BASE             YES

エディションを使用するユーザに権限を付加

SQL> alter user test01 enable editions;
ユーザーが変更されました。

SQL> grant use on edition new_edt to test01;
権限付与が成功しました。

テストユーザに接続し、エディションの確認

SQL> conn test01/oracle
接続されました。
SQL> show edition;
EDITION
---------
ORA$BASE

ベースエディションにテスト用プロシージャ作成

SQL> conn test01/oracle
接続されました。
SQL> show edition;
EDITION
---------
ORA$BASE

set serveroutput on
SQL> CREATE OR REPLACE PROCEDURE TEST_PROC AS
BEGIN
  dbms_output.put_line('Edition 01');
END;
/
プロシージャが作成されました。

SQL> exec TEST_PROC;
Edition 01

PL/SQLプロシージャが正常に完了しました。

作成した新しいエディションにテスト用プロシージャ作成

SQL> alter session set edition=new_edt;
セッションが変更されました。

SQL> show edition
EDITION
------------------------------
NEW_EDT

SQL> CREATE OR REPLACE PROCEDURE TEST_PROC AS
BEGIN
  dbms_output.put_line('Edition 02');
END;
/
プロシージャが作成されました。

SQL> exec TEST_PROC;
Edition 02
PL/SQLプロシージャが正常に完了しました。

エディションを切り替えて動作を確認

SQL> alter session set edition=ORA$BASE;
セッションが変更されました。

SQL> show edition
EDITION
------------------------------
ORA$BASE

SQL> exec TEST_PROC;
Edition 01

デフォルトエディションの変更

SQL> ALTER DATABASE DEFAULT EDITION=new_edt
データベースが変更されました。

SQL> conn test01/oracle
SQL> show edition
EDITION
------------------------------
NEW_EDT

SQL> conn / as sysdba
SQL> ALTER DATABASE DEFAULT EDITION=ORA$BASE;
データベースが変更されました。

SQL> conn test01/oracle
SQL> show edition;
EDITION
------------------------------
ORA$BASE

SQL> conn / as sysdba
SQL> SELECT SYS_CONTEXT('USERENV', 'CURRENT_EDITION_NAME') CURRENT_EDITION_NAME FROM DUAL;
CURRENT_EDITION_NAME
---------------------
ORA$BASE
SQL> SELECT SYS_CONTEXT('USERENV', 'SESSION_EDITION_NAME') SESSION_EDITION_NAME FROM DUAL;
SESSION_EDITION_NAME
---------------------
ORA$BASE

ALTER DATABASE DEFAULT EDITION=NEW_EDT;

SQL> conn / as sysdba
接続されました。
SQL> SELECT SYS_CONTEXT('USERENV', 'CURRENT_EDITION_NAME') CURRENT_EDITION_NAME FROM DUAL;
CURRENT_EDITION_NAME
---------------------
NEW_EDT
SQL> SELECT SYS_CONTEXT('USERENV', 'SESSION_EDITION_NAME') SESSION_EDITION_NAME FROM DUAL;
SESSION_EDITION_NAME
---------------------
NEW_EDT

エディションの削除

SQL> select * from DBA_EDITIONS;
EDITION_NAME  PARENT_EDITION_NAME  USABLE
------------- -------------------- -------
ORA$BASE                           YES
NEW_EDT       ORA$BASE             YES

SQL> drop edition new_edt ;
drop edition new_edt
*
1でエラーが発生しました。:
ORA-38811: 実際のオブジェクトを持つエディションを削除するには、CASCADEオプションが必要です

SQL> drop edition new_edt cascade;
エディションが削除されました。

SQL> select * from DBA_EDITIONS;
EDITION_NAME  PARENT_EDITION_NAME  USABLE
------------- -------------------- -------
ORA$BASE                           YES

ちなみに

SQL> drop edition ORA$BASE;
drop edition ORA$BASE
             *
1でエラーが発生しました。:
ORA-38805: エディションが使用中です
4
7
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7