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>
スキーマ関連事項