エディションベースリディフィニション(Edition-Based Redefinition, EBR)は、Oracle Databaseが提供するアプリケーションの無停止リリースを実現する仕組みです。従来はパッケージやビューを変更する際にセッションが影響を受けるリスクがありましたが、EBRを用いれば異なるエディションを並行稼働させながら段階的に移行できます。ここではEBRの基本概念と、PL/SQLパッケージを管理する際の実践的な活用方法を解説します。
EBRの基本概念
EBRでは「エディション」という論理的なバージョンを作成し、その中でパッケージやビューなどのオブジェクトを再定義できます。ユーザーセッションは特定のエディションに紐づけられるため、既存利用者は旧バージョンを使い続け、新しいセッションからは新バージョンを利用するといった運用が可能です。
エディションの作成と切り替え
まずはデータベースでエディション機能を有効にします。その後、新しいエディションを作成して切り替えることで、別バージョンのパッケージを準備できます。
-- 新しいエディションを作成
CREATE EDITION v2 AS CHILD OF ora$base;
-- セッションを新しいエディションに切り替え
ALTER SESSION SET EDITION = v2;
-- 現在のエディションを確認
SELECT SYS_CONTEXT('USERENV','CURRENT_EDITION') FROM dual;
既定のora$baseを基点に子エディションを作成し、必要な単位で積み上げていくのが一般的です。
パッケージのエディション別管理
エディションごとにパッケージを再定義できます。旧エディションと新エディションで同名のパッケージを保持できるため、既存セッションに影響を与えず新バージョンをテスト・導入可能です。
-- v1(旧エディション)のパッケージ仕様
CREATE OR REPLACE PACKAGE calc_pkg IS
FUNCTION add_num(a NUMBER, b NUMBER) RETURN NUMBER;
END;
/
-- v2(新エディション)に切り替え後の再定義
CREATE OR REPLACE PACKAGE calc_pkg IS
FUNCTION add_num(a NUMBER, b NUMBER, c NUMBER DEFAULT 0) RETURN NUMBER;
END;
/
既存セッションは旧定義を利用し続け、新しいセッションからは拡張された関数シグネチャを利用できるようになります。
EBRでの移行ステップ例
1. 新エディションを作成し、セッションを切り替える
2. 新エディションで変更後のパッケージを定義・テストする
3. アプリケーションの接続先を段階的に新エディションへ切り替える
4. 旧エディションに依存するセッションがなくなった段階で旧エディションを削除する
このプロセスにより、アプリケーション停止なしで安全にリリースを実現できます。
エディションで管理できるオブジェクト
EBRでエディション化できるのは、PL/SQLパッケージ、プロシージャ、ファンクション、ビュー、シノニムなどです。テーブル自体はエディション化されませんが、Editioning Viewを活用すれば、テーブル定義変更を伴う場合も段階的に移行できます。
Editioning Viewの利用
Editioning Viewは、基礎テーブルに対する論理的なビューを定義し、それを通じてアプリケーションがデータにアクセスする方式です。基礎テーブルを直接触らずにビューを介在させることで、カラム追加やリネームといったスキーマ変更を無停止で適用できます。
注意点とベストプラクティス
- テーブルは直接変更せず、Editioning View経由でアクセスさせる
- パッケージやビューはエディションごとに管理し、互換性のない変更は慎重に導入する
- 新旧エディションを一定期間併存させ、段階的に切り替える
- 不要になったエディションは削除し、管理コストを抑える
まとめ
エディションベースリディフィニションは、Oracleデータベースの強力な無停止リリース機能です。PL/SQLパッケージをエディションごとに管理すれば、旧バージョンの利用者に影響を与えずに新機能を追加できます。Editioning Viewと組み合わせることでスキーマ変更も段階的に適用でき、ミッションクリティカルなシステムの安定運用に大きく貢献します。