168 DBMS_SHARED_POOL

DBMS_SHARED_POOLパッケージは、共有プールへのアクセスを提供し、この共有プールは、カーソルとPL/SQLオブジェクトが格納されている共有メモリー領域です。DBMS_SHARED_POOLによって、共有プール内のオブジェクトのサイズを表示したり、メモリーの断片化を減らすためにオブジェクトを保存または非保存としてマークできます。

この章のトピックは、次のとおりです:

168.1 DBMS_SHARED_POOLの概要

ここで提供されるプロシージャは、大規模なPL/SQLオブジェクトのロード時に役立ちます。大規模なPL/SQLオブジェクトのロード時には、大量の小規模オブジェクトを共有プールから期限切れとして削除して空き領域を用意する必要があるため(メモリー断片化のため)、ユーザーの応答時間に影響を与えます。場合によっては、ラージ・オブジェクトをロードするためのメモリーが不足している場合があります。

DBMS_SHARED_POOLは、頻繁に実行するトリガーに対しても有効です。コンパイルしたトリガーを共有プールで頻繁に使用する表に保管できます。

さらに、DBMS_SHARED_POOLは順序もサポートしています。順序番号は、順序が期限切れで共有プールから削除されると失われます。DBMS_SHARED_POOLは、共有プールに順序を保存し、順序番号の損失を防止するのに役立ちます。

168.2 DBMS_SHARED_POOLの操作上のノート

DBMS_SHARED_POOLを作成するには、DBMSPOOL.SQLスクリプトを実行します。DBMSPOOL.SQLの実行後には、自動的にPRVTPOOL.PLBスクリプトが実行されます。これらのスクリプトは、通常のデータベース作成の一環では実行されません

168.3 DBMS_SHARED_POOLサブプログラムの要約

この表は、DBMS_SHARED_POOLサブプログラムを示し、簡単に説明しています。

表168-1 DBMS_SHARED_POOLパッケージのサブプログラム

サブプログラム 説明

ABORTED_REQUEST_THRESHOLDプロシージャ

共有プールについて、異常終了を要求するしきい値を設定します。

KEEPプロシージャ

共有プールにオブジェクトを保存します。

MARKHOTプロシージャ

ライブラリ・キャッシュ・オブジェクトをホット・オブジェクトとしてマーク付けします。

PURGEプロシージャ

名前付きオブジェクトまたはオブジェクトの指定したヒープをパージします。

SIZESプロシージャ

共有プールにあるオブジェクトで、指定サイズより大きいオブジェクトを表示します。

UNKEEPプロシージャ

指定オブジェクトを解放します。

UNMARKHOTプロシージャ

ライブラリ・キャッシュ・オブジェクトのホット・オブジェクトとしてのマークを解除します。

168.3.1 ABORTED_REQUEST_THRESHOLDプロシージャ

このプロシージャは、共有プールについて、異常終了を要求するしきい値を設定します。

構文

DBMS_SHARED_POOL.ABORTED_REQUEST_THRESHOLD (
   threshold_size NUMBER);

パラメータ

表168-2 ABORTED_REQUEST_THRESHOLDプロシージャのパラメータ

パラメータ 説明

threshold_size

共有プール内で確保解除されたメモリー(解放されたメモリーではない)を解放しないための要求サイズ(バイト単位)。threshold_sizeの範囲は5000から2GBまでです。

例外

しきい値が有効な範囲内にない場合は、例外が発生します。

使用上のノート

通常、要求が空きリストで満たされない場合、RDBMSは、LRUリストからオブジェクトを解放して要求を満たすことができるかを定期的にチェックし、メモリーを再要求しようとします。このステップの完了後、RDBMSは、'ALTER SYSTEM FLUSH SHARED_POOL'とほぼ同等の内容を実行します。

これは、システム上のすべてのユーザーに影響を与えるため、このプロシージャは、その影響をthresh_holdサイズを超える共有メモリーの断片検索に失敗した処理にローカライズします。このユーザーは、LRUリストを検索しなくても、'メモリー不足'エラーとなります。

168.3.2 KEEPプロシージャ

このプロシージャは、共有プールにオブジェクトを保存します。オブジェクトが一度共有プールに保存されると、期間切れ削除の対象となりません。このことは、頻繁に使用されるラージ・オブジェクトに役立つ場合があります。ラージ・オブジェクトを共有プールに配置する場合、十分な連続領域を作成するために複数のオブジェクトを削除する必要がある場合があります。

構文

DBMS_SHARED_POOL.KEEP (
   name         VARCHAR2, 
   flag         CHAR DEFAULT 'P');
DBMS_SHARED_POOL.KEEP (
   schema         VARCHAR2,
   objname        VARCHAR2, 
   namespace      NUMBER,
   heaps          NUMBER,
   edition_name   VARCHAR2 DEFAULT NULL);
DBMS_SHARED_POOL.KEEP (
   hash           VARCHAR2,
   namespace      NUMBER,
   heaps          NUMBER);

パラメータ

表168-3 KEEPプロシージャのパラメータ

パラメータ 説明

name

保持するオブジェクトの名前。

flag

共有プール内に保持するオブジェクトの種類を示す文字列。文字列の大文字と小文字は区別されません。このパラメータは省略可能です。

パラメータを指定しないと、パッケージは、最初のパラメータをパッケージ、プロシージャまたはファンクションの名前とみなして名前を解決します。

  • 入力内容がパッケージ、プロシージャまたはファンクションの名前であることを完全に指定するには、'P'または'p'を設定します。
  • 入力内容が順序名であることを指定するには、'Q'または'q'を設定します。
  • 入力内容がトリガー名であることを指定するには、'R'または'r'を設定します。
  • 入力内容がタイプ名であることを指定するには、'T'または't'を設定します。
  • 'JS'または'js'を設定することで、入力内容がjavaソースの名前であることを指定します。
  • 'JC'または'jc'を設定することで、入力内容がjavaクラスの名前であることを指定します。
  • 'JD'または'jd'を設定することで、入力内容がjava共有データの名前であることを指定します。
  • 'JR'または'jr'に設定して、入力がjavaリソースの名前であることを指定します。
  • 'C'または'c'を設定することで、入力内容がカーソルの名前であることを指定します。

schema

オブジェクトが属するユーザー名またはスキーマ。

objname

保持するオブジェクトの名前。

namespace

オブジェクトの検索範囲となるライブラリ・キャッシュ・ネームスペースを示す数。

heaps

保持するヒープ。たとえば、ヒープ0およびヒープ6を保持する場合。

edition_name

ターゲット・オブジェクトが存在するエディションの名前。このパラメータは省略可能です。

hash

オブジェクトの16バイトのハッシュ値。

例外

指定されたオブジェクトが見つからない場合は、例外が発生します。

使用上のノート

オブジェクトは2種類あります。

  • 名前で指定するPL/SQLオブジェクト、トリガー、シーケンス、タイプおよびJavaオブジェクト。

  • 2つの番号(共有プール内の位置を示す)で指定するSQLカーソル・オブジェクト

たとえば:

DBMS_SHARED_POOL.KEEP('scott.hispackage') 

これは、SCOTTが所有するパッケージHISPACKAGEを保存します。PL/SQLオブジェクトの名前は、SQLのオブジェクトの命名規則に従っています(たとえば、デリミタ付き識別子やマルチバイトの名前などが可能です)。カーソルは、DBMS_SHARED_POOL.KEEP('0034CDFF, 20348871','C')によって保存でき、0034CDFFADDRESS20348871HASH_VALUEです。最初の8文字は16進数の完全なアドレスである必要があることに注意してください。

168.3.3 MARKHOTプロシージャ

このプロシージャは、ライブラリ・キャッシュ・オブジェクトをホット・オブジェクトとしてマーク付けします。

構文

DBMS_SHARED_POOL.MARKHOT (
   schema         VARCHAR2, 
   objname        VARCHAR2,
   namespace      NUMBER DEFAULT 1,   
   global         BOOLEAN DEFAULT TRUE,
   edition_name   VARCHAR2 DEFAULT NULL);

DBMS_SHARED_POOL.MARKHOT (
   hash          VARCHAR2, 
   namespace     NUMBER DEFAULT 1,
   global        BOOLEAN DEFAULT TRUE);

パラメータ

表168-4 MARKHOTプロシージャのパラメータ

パラメータ 説明

schema

オブジェクトが属するユーザー名またはスキーマ。

objname

オブジェクト名

namespace

オブジェクトの検索範囲となるライブラリ・キャッシュ・ネームスペースを示す数。USER_OBJECTSDBA_OBJECTSなどのビューは、ネームスペースを数値列として反映します。これは、OBJ$などのディクショナリ表のほとんどと同様です。

global

TRUE(デフォルト)に設定されている場合は、すべてのOracle RACインスタンスでオブジェクトをホットとしてマークします。

hash

オブジェクトの16バイトのハッシュ値。

edition_name

ターゲット・オブジェクトが存在するエディションの名前を示します。

このパラメータは省略可能です。

例外

ORA-06502: 不適切な入力が原因で指定したオブジェクトを検出できない場合は例外が発生します。

ORA-04043: 指定したオブジェクトを検出できない場合は例外が発生します(不正なネームスペースまたはハッシュ入力)。

使用上のノート

パッケージまたはタイプの仕様にホットまたは非ホットのマークが付いている場合は、対応するパッケージまたはタイプの本体に暗黙的にホットまたは非ホットのマークが付きます。

ユーザーは、列V$DB_OBJECT_CACHE.PROPERTYを調べて、オブジェクトにホットのマークが付いているかどうかを確認できます。PROPERTYの値は次のとおりです。
  • HOTCOPYnnn- 整数の識別子'nnn'が付いたホット・コピーのオブジェクト。たとえば、HOTCOPY5HOTCOPY94HOTCOPY125などです。
  • HOTCOPY: 前述のものと同じですが識別子が不明です
  • HOT: ホットのマークが付いている「ルート」kglオブジェクト
  • NULL: 通常のオブジェクト

168.3.4 PURGEプロシージャ

このプロシージャは、名前付きオブジェクトまたはオブジェクトの指定したヒープをパージします。

構文

DBMS_SHARED_POOL.PURGE (
   name         VARCHAR2, 
   flag         CHAR DEFAULT 'P', 
   heaps        NUMBER DEFAULT 1);

DBMS_SHARED_POOL.PURGE (
   schema       VARCHAR2,
   objname      VARCHAR2,
   namespace    NUMBER,
   heaps        NUMBER,
   edition_name VARCHAR2 DEFAULT NULL);

DBMS_SHARED_POOL.PURGE (
   hash         VARCHAR2,
   namespace    NUMBER,
   heaps        NUMBER);

パラメータ

表168-5 PURGEプロシージャのパラメータ

パラメータ 説明

name

パージするオブジェクトの名前。

この識別子は、アドレスと、v$sqlareaビューのhash_value列を連結した値です。これは、SIZESプロシージャで表示されます。

現在、TABLEVIEWオブジェクトはパージできません。

flag

共有プールからパージするオブジェクトの種類を示す文字列。文字列の大文字と小文字は区別されません。このパラメータは省略可能です。

パラメータを指定しないと、パッケージは、最初のパラメータをパッケージ、プロシージャまたはファンクションの名前とみなして名前を解決します。

  • 入力内容がパッケージ、プロシージャまたはファンクションの名前であることを完全に指定するには、'P'または'p'を設定します。
  • 入力内容が順序名であることを指定するには、'Q'または'q'を設定します。
  • 入力内容がトリガー名であることを指定するには、'R'または'r'を設定します。
  • 入力内容がタイプ名であることを指定するには、'T'または't'を設定します。
  • 'JS'または'js'を設定することで、入力内容がjavaソースの名前であることを指定します。
  • 'JC'または'jc'を設定することで、入力内容がjavaクラスの名前であることを指定します。
  • 'JD'または'jd'を設定することで、入力内容がjava共有データの名前であることを指定します。
  • 'JR'または'jr'に設定して、入力がjavaリソースの名前であることを指定します。
  • 'C'または'c'を設定することで、入力内容がカーソルの名前であることを指定します。

heaps

パージするヒープ。たとえば、ヒープ0およびヒープ6をパージする場合:

1<<0 | 1<<6 => 16進数0x41 => 10進数65であるため、ヒープ =>65を指定します。デフォルト値は1で、ヒープ0はオブジェクト全体がパージされることを意味します。

schema

オブジェクトが属するユーザー名またはスキーマ。

objname

パージするオブジェクトの名前。

namespace

オブジェクトの検索範囲となるライブラリ・キャッシュ・ネームスペースを示す数。

hash

オブジェクトの16バイトのハッシュ値。

edition_name

ターゲット・オブジェクトが存在するエディションの名前。

このパラメータは省略可能です。

例外

ORA-6570: 指定したオブジェクトを検出できない場合は例外が発生します。

ORA-6570: 永続的に保持するようにマークされているオブジェクトはパージできません。

使用上のノート

KEEPプロシージャでサポートされているすべてのオブジェクトに対してPURGEがサポートされています。

168.3.5 PURGE_ROW_CACHEプロシージャ

このプロシージャは、キャッシュIDによって識別された行キャッシュ、または選択されたキャッシュ内の特定のオブジェクトをパージします。

構文

DBMS_SHARED_POOL.PURGE_ROW_CACHE (
   cacheid number, hash varchar2 DEFAULT null);

パラメータ

表168-6 PURGE_ROW_CACHEプロシージャのパラメータ

パラメータ 説明

cacheid

パージするキャッシュを示します。

hash 指定されたキャッシュ内にある、パージするターゲット・オブジェクトのハッシュ値。デフォルト値(NULL)はキャッシュ全体をパージします。

168.3.6 SIZESプロシージャ

このプロシージャは、shared_poolにあるオブジェクトで指定したサイズより大きいオブジェクトを表示します。オブジェクト名も表示され、KEEPまたはUNKEEPいずれかのコールへの引数として使用できます。

構文

DBMS_SHARED_POOL.SIZES ( 
   minsize NUMBER);

パラメータ

表168-7 SIZESプロシージャのパラメータ

パラメータ 説明

minsize

オブジェクトを表示するために、共有プール内で占有する必要があるサイズ(KB単位)。

使用上のノート

このプロシージャの使用前に、SQLDBAまたはSQLPlus 'SET SERVEROUTPUT ON SIZE XXXXX'コマンドを発行すると、結果が表示されます。

168.3.7 UNKEEPプロシージャ

このプロシージャは、指定のオブジェクトを解放します。

構文

DBMS_SHARED_POOL.UNKEEP (
   name         VARCHAR2, 
   flag         CHAR DEFAULT 'P');
DBMS_SHARED_POOL.UNKEEP (
   schema       VARCHAR2, 
   objname      VARCHAR2,
   namespace    NUMBER,
   edition_name VARCHAR2 DEFAULT NULL);
DBMS_SHARED_POOL.UNKEEP (
   hash         VARCHAR2, 
   namespace    NUMBER);

警告:

このプロシージャは、将来自動メカニズムが実装されて不要になった場合サポートされなくなる可能性があります。

パラメータ

表168-8 UNKEEPプロシージャのパラメータ

パラメータ 説明

name

解放するオブジェクトの名前。

flag

nameで識別される、保持するオブジェクトの種類を示す文字列。文字列の大文字と小文字は区別されません。

このパラメータは省略可能です。

パラメータを指定しないと、パッケージは、最初のパラメータをパッケージ、プロシージャまたはファンクションの名前とみなして名前を解決します。

schema

オブジェクトが属するユーザー名またはスキーマ。

objname

解放するオブジェクトの名前。

namespace

オブジェクトの検索範囲となるライブラリ・キャッシュ・ネームスペースを示す数。

edition_name

ターゲット・オブジェクトが存在するエディションの名前。

このパラメータは省略可能です。

hash

オブジェクトの16バイトのハッシュ値。

例外

ORA-06502: 指定したオブジェクトを検出できない場合は例外が発生します。

168.3.8 UNMARKHOTプロシージャ

このプロシージャは、ライブラリ・キャッシュ・オブジェクトのホット・オブジェクトとしてのマークを解除します。

構文

DBMS_SHARED_POOL.UNMARKHOT (
   schema         VARCHAR2, 
   objname        VARCHAR2,
   namespace      NUMBER  DEFAULT 1, 
   global         BOOLEAN DEFAULT TRUE,
   edition_name   VARCHAR2 DEFAULT NULL);

DBMS_SHARED_POOL.UNMARKHOT (
   hash          VARCHAR2, 
   namespace     NUMBER DEFAULT 1,
   global        BOOLEAN DEFAULT TRUE);

パラメータ

表168-9 UNMARKHOTプロシージャのパラメータ

パラメータ 説明

schema

オブジェクトが属するユーザー名またはスキーマ。

objname

オブジェクト名

namespace

オブジェクトの検索範囲となるライブラリ・キャッシュ・ネームスペースを示す数。

global

TRUEに設定されている場合は、すべてのOracle RACインスタンスでオブジェクトのホットとしてのマークを解除します。

このパラメータのデフォルト値はTRUEです。

hash

オブジェクトの16バイトのハッシュ値

edition_name

ターゲット・オブジェクトが存在するエディションの名前を示します。

このパラメータは省略可能です。

例外

ORA-06502: 不適切な入力が原因で指定したオブジェクトを検出できない場合は例外が発生します。

ORA-04043: 指定したオブジェクトを検出できない場合は例外が発生します(不正なネームスペース、ハッシュ入力または存在しないオブジェクト)。

使用上のノート

パッケージまたはタイプの仕様にホットまたは非ホットのマークが付いている場合は、対応するパッケージまたはタイプの本体に暗黙的にホットまたは非ホットのマークが付きます。