DBMS_SHARED_POOL パッケージの使用

DBMS_SHARED_POOL パッケージは 共有プール に一度読み込まれた(※1) オブジェクトを外部的な要因でメモリ上から削除されるてしまうことを防止(※2)ができる。

(※1) DBMS_SHARED_POOL.KEEP を使ってオブジェクトを登録したからといってオブジェクトをロードして領域が確保されるわけではない。以後、読み込まれたら破棄しないというマークが付けられたことになる。

(※2) UNKEEP を実行することで削除されるようになる。

DBMS_SHARED_POOL 使用するための準備

DBMS_SHARED_POOL は初期状態ではインストールされていないため、個別にインストールする必要がある。

$ORACLE_HOME/rdbms/admin/dbmspool.sql を登録する。

% sqlplus / as sysdba
SQL> @?/rdbms/admin/dbmspool.sql
パッケージが作成されました。
権限付与が成功しました。
ビューが作成されました。
パッケージ本体が作成されました。
SQL> -- ユーザー RIVUS に実行権限付与
SQL> grant execute on dbms_shared_pool to RIVUS;

DBMS_SHARED_POOL.KEEP と DBMS_SHARED_POOL.UNKEEP プロシージャ

オブジェクトの常駐登録(KEEP) と 常駐解除(UNKEEP) にはオブジェクトの名前とフラグ(オブジェクトの種類)の指定が必要。

  • DBMS_SHARED_POOL.KEEP (name VARCHAR2, flag CHAR DEFAULT 'P')
  • DBMS_SHARED_POOL.UNKEEP (name VARCHAR2, flag CHAR DEFAULT 'P')
オブジェクトの種類フラグ
プロシージャ、ファンクション、パッケージP または p
タイプT または t
トリガーR または r
シーケンスQ または q
Java ソースJS または js
Java クラスJC または jc
Java リソースJR または jr
Java 共有データJD または jd
カーソルC または c

DBMS_SHARED_POOL.KEEP を使ってシーケンスの欠番を防ぐ

パッケージやプロシージャを KEEP するのは良く知られているので、ここではシーケンスを KEEP して 共有プールが原因となる順序の欠番 防止を行なう。

SQL> conn rivus/rivus_password
SQL> create sequence hoge_seq;
順序が作成されました。
SQL> call sys.DBMS_SHARED_POOL.KEEP('hoge_seq', 'Q');
          ↑ パブリックシノニムは定義されていないのでスキーマ指定が必要
コールが完了しました。
SQL> select hoge_seq.nextval from dual;
-- 使用した時点でやっと共有プールに常駐する。
   NEXTVAL
----------
         1
SQL>


スキーマ関連事項

日本オラクル
■ 日本オラクル 株式会社
■ オラクルマスター資格 (オラクルマスターとは
■ 会員制(無料)の公式技術サイト