151 DBMS_SESSION
このパッケージは、PL/SQLからSQL ALTER SESSION
文とSET ROLE
文へのアクセスおよび他のセッション情報へのアクセスを提供します。DBMS_SESSION
を使用すると、作業環境とセキュリティ・レベルを設定できます。
この章のトピックは、次のとおりです:
151.3 DBMS_SESSIONのデータ構造
DBMS_SESSION
パッケージはTABLE
タイプを定義します。
151.3.1 DBMS_SERVICE INTEGER_ARRAY表タイプ
INTEGER_ARRAY
は、BINARY_INTEGER
の表タイプです。
構文
TYPE integer_array IS TABLE OF BINARY_INTEGER INDEX BY BINARY_INTEGER;
151.4 DBMS_SESSIONサブプログラムの要約
この表は、DBMS_SESSIONサブプログラムをアルファベット順に示し、簡単に説明しています。
表151-1 DBMS_SESSIONパッケージのサブプログラム
サブプログラム | 説明 |
---|---|
すべてのコンテキスト情報をクリアします。 |
|
コンテキストをクリアします。 |
|
識別子をクリアします。 |
|
データベース・リンクをクローズします。 |
|
CURRENT_IS_ROLE_ENABLEDファンクション |
指定されたロールが現在有効かどうかを判別します。 |
大量のメモリーが必要な操作を実行した後で未使用のメモリーを再要求できます。 |
|
静的パッケージのメモリー使用量を示します。 |
|
指定のロールがセッションで使用可能かどうかを判別します。 |
|
指定されたセッションがアクティブかどうかを判別します。 |
|
現行のセッションについて、アクティブなネームスペースとコンテキストのリストを戻します。 |
|
このプロシージャは、セッションでアクティブなすべてのPL/SQLプログラム・ユニットのセッション状態で、 |
|
セッション内のすべてのパッケージのインスタンス化を解除します。 |
|
SESSION_IS_ROLE_ENABLEDファンクション | 指定のロールがセッション・レベルで使用可能かどうかを判別します。 |
コール元のセッションに対するセッション・レベルのSQLトレースを再設定します。 |
|
コール元のセッションに対するセッション・レベルのSQLトレースを使用可能にします。 |
|
コンテキスト属性の値を設定または再設定します。 |
|
指定したエディションへの切替えを要求します。 |
|
識別子を設定します。 |
|
グローバリゼーション・サポート(NLS)を設定します。 |
|
ロールを設定します。 |
|
トレースをオンまたはオフにします。 |
|
指定した期間セッションを中断します。 |
|
ユーザーの現行のセッションでの、現行のリソース・コンシューマ・グループの変更を容易にします。 |
|
データベースに現在接続しているすべてのセッションに対して一意の識別子を戻します。 |
151.4.1 ADD_SQL_CONNECTION_TESTプロシージャ
このプロシージャは、計画メンテナンスが開始される前の、セッションの排出中に使用する新しい接続テストを追加します。このプロシージャは、SQL接続テストが標準テストでカバーされていない場合に使用します。このテストは、追加されたときに有効になります。オプションのサービス名修飾子が指定されている場合、テストはそのサービス名にのみ適用されます。
構文
DBMS_SESSION.ADD_SQL_CONNECTION_TEST ( connection_test IN VARCHAR2 service_name IN VARCHAR2 DEFAULT NULL);
パラメータ
表151-2 ADD_SQL_CONNECTION_TESTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
接続のテストおよび排出に使用されるSQLテキスト。 |
|
オプションのサービス名修飾子。 |
使用上のノート
ADD_SQL_CONNECTION_TESTプロシージャ
は、計画メンテナンスが開始される前のセッション排出用の接続テストを追加します。接続テストはアプリケーションで使用され、排出対象としてマークされている接続をテストします。セッションは、サービスまたはPDBの停止操作および再配置操作で排出するために設定されます。排出中にRDBMSが接続をクローズするように設定されている場合は、計画メンテナンス中にエラーが表示されません。CONNECTION TESTは必要な数だけ入力できます。これらは、計画メンテナンス中にのみ使用されます。このテストは、すべてのRACインスタンスに適用されます。
サービス修飾子の可用性に関する最新の更新は、オンライン・ドキュメントを参照してください。
追加された接続を表示するには、ビューDBA_CONNECTION_TESTS
を問い合せます。
このプロシージャの所有者はSYS
であり、CDB$ROOT
レベルまたはPDB
レベル、またはマルチテナントでない場合はディクショナリ・レベルで実行するためにユーザーに付与されます。
151.4.2 CLEAR_ALL_CONTEXTプロシージャ
このプロシージャは、指定されたネームスペースのアプリケーション・コンテキスト情報をクリアします。
構文
DBMS_SESSION.CLEAR_ALL_CONTEXT namespace VARCHAR2);
パラメータ
表151-3 CLEAR_ALL_CONTEXTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
アプリケーション・コンテキスト情報をクリアするネームスペース。必須。 |
使用上のノート
-
このプロシージャは、信頼されたパッケージで直接的または間接的に起動する必要があります。
-
コンテキスト値の変更はただちに反映され、
SYS_CONTEXT
によるこの値への後続のコールは最新の値を戻します。
151.4.3 CLEAR_CONTEXTプロシージャ
このプロシージャは、指定されたネームスペースのアプリケーション・コンテキストをクリアします。
構文
DBMS_SESSION.CLEAR_CONTEXT namespace VARCHAR2, client_identifier VARCHAR2 attribute VARCHAR2);
パラメータ
表151-4 CLEAR_CONTEXTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
アプリケーション・コンテキストをクリアするネームスペース。必須。 セッション・ローカル・コンテキストの場合、 グローバルにアクセスされるコンテキストの場合、 |
|
グローバル・コンテキストに適用され、その他のタイプのコンテキストではオプションです(最大64バイト)。 |
|
クリアするネームスペース内の特定の属性(オプション)。デフォルトは |
使用上のノート
-
このプロシージャは、信頼されたパッケージで直接的または間接的に起動する必要があります。
-
コンテキスト値の変更はただちに反映され、
SYS_CONTEXT
によるこの値への後続のコールは最新の値を戻します。
151.4.4 CLEAR_IDENTIFIERプロシージャ
このプロシージャは、セッションのset_client_id
を削除します。
構文
DBMS_SESSION.CLEAR_IDENTIFIER;
使用上のノート
このプロシージャはパブリックで実行可能です。
151.4.5 CLOSE_DATABASE_LINKプロシージャ
このプロシージャは、オープンしているデータベース・リンクをクローズします。これは、SQL文ALTER SESSION CLOSE DATABASE LINK <name>
と同じです。
構文
DBMS_SESSION.CLOSE_DATABASE_LINK ( dblink VARCHAR2);
パラメータ
表151-5 CLOSE_DATABASE_LINKプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
クローズするデータベース・リンク名。 |
151.4.6 CURRENT_IS_ROLE_ENABLEDファンクション
このファンクションは、指定されたロールが現在有効かどうかを判別します。
構文
DBMS_SESSION.CURRENT_IS_ROLE_ENABLED ( rolename VARCHAR2) RETURN BOOLEAN;
パラメータ
表151-6 CURRENT_IS_ROLE_ENABLEDファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
ロールの名前。 |
戻り値
TRUE
- ロールが有効な場合。FALSE
- ロールが有効でない場合。
151.4.7 FREE_UNUSED_USER_MEMORYプロシージャ
このプロシージャは、大量のメモリー(100Kを超えるメモリー)が必要な操作の実行後、未使用のメモリーを再要求します。
大量のメモリーを使用する操作の例を次に示します。
-
sort_area_size
全部を使用し、sort_area_size
が数百KBになる大規模なソート処理 -
大規模なPL/SQLパッケージ、プロシージャまたはファンクションのコンパイル処理
-
PL/SQL索引表内にある数百KBのデータを格納する処理
v$sesstat
固定ビューまたはv$statname
固定ビューにある統計情報「セッションUGAメモリー」と「セッションPGAメモリー」を追跡調査して、ユーザー・メモリーを監視できます。これらの統計情報の監視では、このプロシージャが解放したメモリー量も表示されます。
ノート:
このプロシージャは、メモリーが非常に不足している場合のみ使用してください。頻繁には使用せず、慎重に使用してください。
構文
DBMS_SESSION.FREE_UNUSED_USER_MEMORY;
戻り値
このプロシージャの動作は、クライアントのかわりに稼働しているサーバーの構成によって決まります。
-
専用サーバー: 使用されていないPGAメモリーとセッション・メモリーをオペレーティング・システムに戻します。セッション・メモリーは、この構成内のPGAから割り当てられます。
-
共有サーバー: 使用されていないセッション・メモリーを
shared_pool
に戻します。セッション・メモリーは、この構成内のshared_pool
から割り当てられます。
使用上のノート
このプロシージャを使用してメモリーを解放するためには、そのメモリーが使用中でないことが必要です。
ある操作でメモリーを割り当てた後は、同じタイプの操作でのみ、割り当てられたメモリーを再利用できます。たとえば、ソート用に割り当てられたメモリーは、ソート完了後にそのメモリーが使用されなくなると、別のソート処理でのみ再利用できます。ソートとコンパイルについては、操作の完了後にメモリーが使用されなくなると、ユーザーはこのプロシージャをコールして、この未使用メモリーを解放できます。
索引表にはメモリーが暗黙的に割り当てられ、その索引表の要素に割り当てられた値が格納されます。したがって、索引表内の要素が多いほど、RDBMSは多くのメモリーを索引表に割り当てます。索引表に要素がある間は、索引表に関連するメモリーは使用中になります。
索引表の有効範囲によって、メモリーの使用期間が決まります。グローバルに宣言された索引表は、パッケージまたはパッケージ本体で宣言された索引表です。これらの索引表には、セッション・メモリーからメモリーが割り当てられます。グローバルに宣言された索引表では、メモリーは、ユーザーのログイン中(ユーザーのセッションの間)は使用中のままとなり、Oracleから切断された後に解放されます。
ローカルで宣言された索引表は、ファンクション、プロシージャまたは無名ブロック内で宣言された索引表です。このような索引表には、PGAメモリーからメモリーが割り当てられます。ローカルに宣言された索引表については、索引表が宣言されたプロシージャ、ファンクションまたは無名ブロックをユーザーが実行しているかぎり、メモリーは使用中のままになります。プロシージャ、ファンクションまたは無名ブロックの実行が完了すると、そのメモリーはローカルに宣言された他の索引表で使用可能になります(すなわち、メモリーは使用中ではなくなります)。
初期化されていない空の索引表を既存の索引表に割り当てることは、索引表とその索引表に関連付けられたメモリーを明示的に再初期化するための1つの方法です。この操作を行うと、索引表に関連付けられているメモリーは使用中ではなくなり、このプロシージャをコールして解放できます。この方法は、グローバルに宣言した索引表がユーザー・セッションの期間中に大きくなる可能性があり、ユーザーが索引表の内容を必要としない場合は、特に役立ちます。
索引表の有効範囲に関連するメモリー・ルールは適用されたままです。しかし、この方法とプロシージャによって、ユーザーが介入して、索引表に関連付けられているメモリーを明示的に解放できます。
例
次のPL/SQLは、この方法とFREE_UNUSED_USER_MEMORY
プロシージャの使用方法を示します。
CREATE PACKAGE foobar type number_idx_tbl is table of number indexed by binary_integer; store1_table number_idx_tbl; -- PL/SQL indexed table store2_table number_idx_tbl; -- PL/SQL indexed table store3_table number_idx_tbl; -- PL/SQL indexed table ... END; -- end of foobar DECLARE ... empty_table number_idx_tbl; -- uninitialized ("empty") version BEGIN FOR i in 1..1000000 loop store1_table(i) := i; -- load data END LOOP; ... store1_table := empty_table; -- "truncate" the indexed table ... - dbms_session.free_unused_user_memory; -- give memory back to system store1_table(1) := 100; -- index tables still declared; store2_table(2) := 200; -- but truncated. ... END;
151.4.8 GET_PACKAGE_MEMORY_UTILIZATIONプロシージャ
このプロシージャは、静的パッケージのメモリー使用量を示します。
出力コレクションは、インスタンス化された各パッケージでのメモリー使用量を示します。各パッケージは、所有者名、パッケージ名、使用しているメモリー量および未使用の割り当てられたメモリー量によって示されます。メモリーの断片化のため、また一度使用された空きメモリー・チャンクはまずパッケージ・メモリー・ヒープが所有する空きリストに移動されるため、未使用のメモリー量はゼロより大きくなります。FREE_UNUSED_USER_MEMORYプロシージャが起動された場合のみ解放され、親ヒープに戻ります。
構文
DBMS_SESSION.GET_PACKAGE_MEMORY_UTILIZATION ( owner_names OUT NOCOPY LNAME_ARRAY, unit_names OUT NOCOPY LNAME_ARRAY, unit_types OUT NOCOPY INTEGER_ARRAY, used_amounts OUT NOCOPY INTEGER_ARRAY, free_amounts OUT NOCOPY INTEGER_ARRAY);
パラメータ
表151-7 GET_PACKAGE_MEMORY_UTILIZATIONファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
パッケージの所有者。 |
|
パッケージの名前。 |
|
ディクショナリ表 |
|
バイト単位で指定した割当てメモリー量。 |
|
バイト単位で指定した使用可能なメモリー量。 |
151.4.9 IS_ROLE_ENABLEDファンクション
このファンクションは、指定のロールがこのセッションで使用可能かどうかを判別します。
構文
ノート:
このファンクションは、Oracle Database 19cから非推奨になっています。かわりに、DBMS_SESSION.CURRENT_IS_ROLE_ENABLED
またはDBMS_SESSION.SESSION_IS_ROLE_ENABLED
を使用してください。
DBMS_SESSION.IS_ROLE_ENABLED ( rolename VARCHAR2) RETURN BOOLEAN;
パラメータ
表151-8 IS_ROLE_ENABLEDファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
ロール名。 |
戻り値
表151-9 IS_ROLE_ENABLEDファンクションの戻り値
戻り値 | 説明 |
---|---|
|
ロールが使用可能かどうかによって |
151.4.10 IS_SESSION_ALIVEファンクション
このファンクションは、指定されたセッションがアクティブかどうかを判別します。
構文
DBMS_SESSION.IS_SESSION_ALIVE ( uniqueid VARCHAR2) RETURN BOOLEAN;
パラメータ
表151-10 IS_SESSION_ALIVEファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
セッションの一意のID。 |
戻り値
表151-11 IS_SESSION_ALIVEファンクションの戻り値
戻り値 | 説明 |
---|---|
|
セッションがアクティブかどうかによって |
151.4.11 LIST_CONTEXTプロシージャ
このプロシージャは、現行のセッションに関するアクティブなネームスペースとコンテキストのリストを戻します。
構文
TYPE AppCtxRecTyp IS RECORD ( namespace VARCHAR2(30), attribute VARCHAR2(30), value VARCHAR2(256)); TYPE AppCtxTabTyp IS TABLE OF AppCtxRecTyp INDEX BY BINARY_INTEGER; DBMS_SESSION.LIST_CONTEXT ( list OUT AppCtxTabTyp, size OUT NUMBER);
パラメータ
表151-12 LIST_CONTEXTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
現行のセッション内のアプリケーション・コンテキスト設定リストを格納するバッファ。 |
戻り値
表151-13 LIST_CONTEXTプロシージャの戻り値
戻り値 | 説明 |
---|---|
|
現行セッションの設定(ネームスペース、属性、値)リスト。 |
|
戻されたバッファ内のエントリ数を戻します。 |
使用上のノート
リスト内のコンテキスト情報は、<namespace
> <attribute
> <value
>の順に表示されます。list
は表タイプの変数なので、そのサイズは戻されるリストのサイズに合わせて動的に調整されます。
151.4.12 MODIFY_PACKAGE_STATEプロシージャ
このプロシージャは、セッションでアクティブなすべてのPL/SQLプログラム・ユニットのセッション状態で、action_flags
パラメータで指定された様々なアクションを実行するために使用します。このプロシージャは、PL/SQLコールで実行中の現行の起動が終了すると、有効になります。
このプロシージャでは、表151-15
に示すDBMS_SESSION定数が使用されます。
構文
DBMS_SESSION.MODIFY_PACKAGE_STATE( action_flags IN PLS_INTEGER);
パラメータ
表151-14 MODIFY_PACKAGE_STATEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
PL/SQLプログラム・ユニットで実行するアクションを判別するビット・フラグ。
ただし、次の理由により、
|
使用上のノート
各フラグの相違点およびDBMS_SESSION.REINITIALIZE
がDBMS_SESSION.FREE_ALL_RESOURCES
よりも高いパフォーマンスを示す理由は、表151-17のパラメータの説明を参照してください。
表151-15 MODIFY_PACKAGE_STATEのAction_flags定数
定数 | 説明 |
---|---|
|
|
|
|
-
再初期化とは、すべてのパッケージ変数を初期値に再設定するプロセス、およびパッケージ本体の初期化ブロック(存在する場合)を実行するプロセスのことです。次のパッケージを想定します。
package P is n number; m number := P2.foo; d date := SYSDATE; cursor c is select * from emp; procedure bar; end P; / package body P is v varchar2(20) := 'hello'; procedure bar is begin ... end; procedure init_pkg is begin .... end; begin -- initialization block init_pkg; ... ... end P; /
パッケージPでは、再初期化で次の処理を行います。
-
P.n
をNULL
に設定する。 -
ファンクション
P2.foo
を起動し、P.m
にP2.foo
から戻された値を設定する。 -
P.d
にSYSDATE
組込みの戻り値を設定する。 -
カーソル
P.c
が事前にオープンしている場合は、これをクローズする。 -
P.v
を'hello'に設定する。 -
パッケージ本体の初期化ブロックを実行する。
-
パッケージの再初期化は、その後パッケージが実際に参照された場合のみ実行されます。さらに、パッケージは参照された順に再初期化されます。
-
FREE_ALL_RESOURCES
またはREINITIALIZE
を使用する場合は、パッケージ変数値のリセットによって、アプリケーションに影響を与えないようにしてください。 -
DBMS_SESSION.REINITIALIZE
は、実際にすべてのパッケージ状態を解放するとはかぎらず、場合によっては、FREE_ALL_RESOURCES
フラグやRESET_PACKAGE
プロシージャを使用した場合よりも、はるかに大量のセッション・メモリーがアプリケーションで使用されます。たとえばDBMS_SESSION.MODIFY_PACKAGE_STATE(DBMS_SESSION.REINITIALIZE)
の実行後、アプリケーションが以前に参照されたパッケージの多くを参照しない場合、これらのパッケージのセッション・メモリーは、セッションの終了まで(またはDBMS_SESSION.RESET_PACKAGE
がコールされるまで)保持されます。 -
クライアント側のPL/SQLコードは、リモート・パッケージの変数または定数を参照できないため、定数の値を明示的に使用する必要があります。たとえば、
DBMS_SESSION.MODIFY_PACKAGE_STATE(DBMS_SESSION.REINITIALIZE)
は、定数DBMS_SESSION.REINITIALIZE
を使用しているため、クライアント側ではコンパイルしません。かわりに、クライアント側では
DBMS_SESSION.MODIFY_PACKAGE_STATE(2)
を使用します。これは、引数が明示的に指定されているためです。
例
ここでは、DBMS_SESSION.MODIFY_PACKAGE_STATE
の使用例を示します。グローバルな状態(カーソルはc
、変数値はcnt
)のパッケージP
を想定します。パッケージの最初の初期化では、パッケージ変数cnt
は0
、カーソルc
はCLOSED
です。次に、セッションで、cnt
の値が111
に変更され、OPEN
操作もカーソルで実行されます。print_status
をコールしてパッケージの状態を表示すると、cnt
が111
で、カーソルがOPEN
であることを確認できます。次に、DBMS_SESSION.MODIFY_PACKAGE_STATE
をコールします。print_status
を使用してパッケージP
の状態を再度出力すると、cnt
が再度0
になり、カーソルがCLOSED
されていることを確認できます。DBMS_SESSION.MODIFY_PACKAGE_STATE
のコールが行われなかった場合は、2番目のprint_status
によって、111
およびOPEN
が出力されます。
create or replace package P is cnt number := 0; cursor c is select * from emp; procedure print_status; end P; / show errors; create or replace package body P is procedure print_status is begin dbms_output.put_line('P.cnt = ' || cnt); if c%ISOPEN then dbms_output.put_line('P.c is OPEN'); else dbms_output.put_line('P.c is CLOSED'); end if; end; end P; / show errors; SQL> set serveroutput on; SQL> begin 2 P.cnt := 111; 3 open p.c; 4 P.print_status; 5 end; 6 / P.cnt = 111 P.c is OPEN PL/SQL procedure successfully completed. SQL> begin 2 dbms_session.modify_package_state(dbms_session.reinitialize); 3 end; 4 / PL/SQL procedure successfully completed. SQL> set serveroutput on; SQL> SQL> begin 2 P.print_status; 3 end; 4 / P.cnt = 0 P.c is CLOSED PL/SQL procedure successfully completed.
151.4.13 RESET_PACKAGEプロシージャ
このプロシージャは、このセッションのすべてのパッケージのインスタンス化を解除します。これは、パッケージ状態を解放します。
ノート:
「SESSION _TRACE_ENABLEプロシージャ」を参照してください。Oracle9iで導入されているMODIFY_PACKAGE_STATEインタフェースでは、RESET_PACKAGEと同一の機能が提供されます。これは、このセッションのあらゆるPL/SQLパッケージの状態を再初期化するための、効率的で軽量なバリアントです。
実行状態をキャッシュするために使用するメモリーは、セッションで実行されたPL/SQLファンクション、プロシージャおよびパッケージに関連付けられています。
パッケージに関して、このメモリーのコレクションはパッケージ変数の現行の値を保持し、各PL/SQLプログラムによってオープンされたカーソルのキャッシュを制御します。RESET_PACKAGE
へのコールは、以前実行した各PL/SQLプログラムに関連付けられていたメモリーをセッションから解放し、この結果、グローバルなパッケージの現行の値はクリアされ、キャッシュされたカーソルはクローズされます。
RESET_PACKAGE
は、セッションで失敗したプログラムを確実に再起動するためにも使用できます。パッケージ変数を含んだプログラムが失敗すると、どの変数を初期化しなおす必要があるかを判別することは困難です。RESET_PACKAGE
は、すべてのパッケージ変数が初期値に再設定されることを保証します。
構文
DBMS_SESSION.RESET_PACKAGE;
使用上のノート
すべての実行PL/SQLが消費するメモリーは大量になるため、RESET_PACKAGE
を使用して、データベース・アプリケーション内のある時点でセッション・メモリー・フットプリントを削減できます。ただし、パッケージ変数値の再設定がアプリケーションに影響を与えないことを確認してください。また、キャッシュしたメモリーとカーソルのないプログラムを後で実行すると、解放されたメモリーとカーソルを再作成する必要があるため、実行速度が遅くなることに留意してください。
RESET_PACKAGE
は、メモリー、カーソルおよびパッケージ変数をコール直後に解放しません。
ノート:
RESET_PACKAGE
は、起動したPL/SQLコールの実行が完了した後でのみ、メモリー、カーソルおよびパッケージ変数を解放します。
たとえば、PL/SQLプロシージャP1
がPL/SQLプロシージャP2
をコールし、P2
がRESET_PACKAGE
をコールしたとします。プロシージャP1
の実行が完了するまで(PL/SQLコールが終了するまで)、RESET_PACKAGE
の処理は行われません。
例
SQL*Plusスクリプトは、多数のPL/SQLプログラム・ユニットを伴った大きいプログラムを実行します。これらのプログラム・ユニットでは、グローバル変数を使用する場合もしない場合もあります。ただし、実行後はグローバル変数は必要ありません。
EXCECUTE large_plsql_program1;
キャッシュされたPL/SQLセッション・メモリーを解放するには:
EXECUTE DBMS_SESSION.RESET_PACKAGE;
別の大きいプログラムを実行するには:
EXECUTE large_plsql_program2;
151.4.14 SESSION_IS_ROLE_ENABLEDファンクション
このファンクションは、指定のロールがログイン・ユーザーのセッションで使用可能かどうかを判別します。
構文
DBMS_SESSION.SESSION_IS_ROLE_ENABLED ( rolename VARCHAR2) RETURN BOOLEAN;
パラメータ
表151-16 SESSION_IS_ROLE_ENABLEDファンクションのパラメータ
パラメータ | 説明 |
---|---|
|
ロールの名前。 |
戻り値
TRUE
- ロールが有効な場合。FALSE
- ロールが有効でない場合。
151.4.15 SESSION_TRACE_DISABLEプロシージャ
このプロシージャは、コール元のセッションに対するセッション・レベルのSQLトレースを再設定します。クライアントID、およびサービス、モジュール、アクションのトレースは影響を受けません。
構文
DBMS_SESSION.SESSION_TRACE_DISABLE;
151.4.16 SESSION _TRACE_ENABLEプロシージャ
このプロシージャは、コール元のセッションに対するセッション・レベルのSQLトレースを使用可能にします。このプロシージャを起動すると、セッションによって発行されたすべてのSQL文のSQLトレースが実行されます。
構文
DBMS_SESSION.SESSION_TRACE_ENABLE( waits IN BOOLEAN DEFAULT TRUE, binds IN BOOLEAN DEFAULT FALSE, plan_stat IN VARCHAR2 DEFAULT NULL);
パラメータ
表151-17 SESSION_TRACE_ENABLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
待機情報をトレースするかどうかを指定します。 |
|
バインド情報をトレースするかどうかを指定します。 |
|
行ソース統計をダンプする頻度。値は' |
151.4.17 SET_CONTEXTプロシージャ
このプロシージャは、4つのタイプのコンテキスト(セッション・ローカル、グローバルな初期化、外部的な初期化およびグローバルなアクセス)を設定します。
次の5つのパラメータのうち最初の3つのみが必須となっており、後の2つはオプションでグローバルにアクセスされるコンテキストのみで使用されます。パラメータ情報の詳細は、パラメータ表および「使用上のノート」に示されています。
構文
DBMS_SESSION.SET_CONTEXT ( namespace VARCHAR2, attribute VARCHAR2, value VARCHAR2, username VARCHAR2, client_id VARCHAR2 );
パラメータ
表151-18 SET_CONTEXTプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
設定するアプリケーション・コンテキストのネームスペース(30バイトに制限)。 |
|
設定するアプリケーション・コンテキストの属性(30バイトに制限)。 |
|
設定するアプリケーション・コンテキストの値(4KBに制限)。 |
|
アプリケーション・コンテキストのデータベース・ユーザー名属性。 デフォルト: NULL |
|
アプリケーション・コンテキストのアプリケーション固有のclient_id属性(最大64バイト)。 デフォルト: NULL |
使用上のノート
-
最初の3つのパラメータは、すべてのコンテキスト・タイプに対して必須です。
-
username
パラメータは、有効なSQL識別子である必要があります。 -
client_id
パラメータは、最大64バイトの文字列である必要があります。これは大/小文字を区別し、set_identifier
に対して提供される引数と一致させる必要があります。 -
ネームスペース・パラメータがグローバル・コンテキストのネームスペースである場合、
username
パラメータはセッションの現行のデータベース・ユーザー名と一致し、client_id
パラメータはセッションの現行のclient_id
と一致します。これらのパラメータが設定されていない場合はNULLとみなされるため、どのユーザーもコンテキスト値を表示することができます。 -
このプロシージャは、信頼されたパッケージで直接的または間接的に起動する必要があります。
-
SET_CONTEXTのコール元は、
CREATE
CONTEXT
文を介してコンテキスト・ネームスペースに関連付けられたプロシージャのコール・スタックに存在する必要があります。コール・スタックのチェックは、DBMSの境界を越えません。 -
ネームスペースに設定できる属性の数に制限はありません。属性は、ユーザーによってリセットされないかぎり、ユーザーのセッション時に値を保持します。
-
パラメータの値がネームスペースで設定されている場合、
SET_CONTEXT
がこの値を上書きします。 -
コンテキスト値の変更はただちに反映され、
SYS_CONTEXT
によるこの値への後続のコールは最新の値を戻します。
参照:
次の詳細は、『Oracle Databaseセキュリティ・ガイド』を参照してください。
151.4.18 SET_EDITION_DEFERREDプロシージャ
このプロシージャは、指定したエディションへの切替えを要求します。切替えは、現行のクライアント・コールの終了時に有効になります。
構文
DBMS_SESSION.SET_EDITION_DEFERRED ( edition IN VARCHAR2);
パラメータ
表151-19 SET_EDITION_DEFERREDプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
切替え先となるエディション名。文字列の内容はSQL識別子として処理され、実際のエディション名に特殊文字または小文字が含まれている場合は、残りの文字列を二重引用符で囲む必要があります(二重引用符を使用しない場合、内容は大文字に設定されます)。コール元には、指定したエディションに対する |
151.4.19 SET_IDENTIFIERプロシージャ
このプロシージャは、セッションのクライアントIDを設定します。
構文
DBMS_SESSION.SET_IDENTIFIER ( client_id VARCHAR2);
パラメータ
表151-20 SET_IDENTIFIERプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
現行のデータベース・セッションのアプリケーション固有の識別子で、大/小文字の区別があります。 このパラメータの最大バイト数は、64バイトです。入力が64バイトを超えると、追加のバイトは切り捨てられます。 |
使用上のノート
-
SET_IDENTIFIER
は、セッションのクライアントIDを指定された値に設定します。この値を使用すれば、v$session.client_identifier
によってv$session
内のセッションを識別できます。また、sys_context('USERENV','CLIENT_IDENTIFIER')
によってセッションを識別するためにも使用できます。 -
このプロシージャは
PUBLIC
で実行可能です。
151.4.20 SET_NLSプロシージャ
このプロシージャは、グローバリゼーション・サポート(NLS)を設定します。これは、SQL文ALTER SESSION SET <nls_parameter> = <value>
と同じです。
構文
DBMS_SESSION.SET_NLS ( param VARCHAR2, value VARCHAR2);
パラメータ
表151-21 SET_NLSプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
グローバリゼーション・サポートのパラメータ。このパラメータ名は、'NLS'で開始する必要があります。 |
|
パラメータ値。 パラメータがテキスト・リテラルの場合は、埋込みの一重引用符が必要です。例としては、 |
151.4.21 SET_ROLEプロシージャ
このプロシージャは、ロールを使用可能または使用禁止にします。これは、SET
ROLE
SQL文と同等です。
構文
DBMS_SESSION.SET_ROLE ( role_cmd VARCHAR2);
パラメータ
表151-22 SET_ROLEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
テキストが"set role"に追加され、SQLとして実行されます。 |
使用上のノート
このプロシージャは、既存のトランザクション内からコールされない場合、新しいトランザクションを作成することに注意してください。
151.4.22 SET_SQL_TRACEプロシージャ
このプロシージャは、トレースをオンまたはオフにします。これは、SQL文ALTER SESSION SET SQL_TRACE ...
と同じです。
構文
DBMS_SESSION.SET_SQL_TRACE ( sql_trace boolean);
パラメータ
表151-23 SET_SQL_TRACEプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
|
151.4.23 SLEEPプロシージャ
このプロシージャは、指定時間だけセッションを中断します。
構文
DBMS_SESSION.SLEEP ( seconds IN NUMBER);
パラメータ
表151-24 SLEEPプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
セッションを中断する時間(秒)。 入力できる最小増分値は100分の1秒です。たとえば、1.95は有効な時間値です。 |
151.4.24 SWITCH_CURRENT_CONSUMER_GROUPプロシージャ
このプロシージャは、ユーザーの現行のセッションでの現行のリソース・コンシューマ・グループを変更します。
ある特定のグループに対して切替え権限がある場合は、コンシューマ・グループを切り替えることができます。コール元が別のプロシージャの場合、ユーザーは、そのプロシージャの所有者が切替え権限を持っているコンシューマ・グループに切り替えることができます。
構文
DBMS_SESSION.switch_current_consumer_group ( new_consumer_group IN VARCHAR2, old_consumer_group OUT VARCHAR2, initial_group_on_error IN BOOLEAN);
パラメータ
表151-25 SWITCH_CURRENT_CONSUMER_GROUPプロシージャのパラメータ
パラメータ | 説明 |
---|---|
|
切り替える先のコンシューマ・グループの名前。 |
|
切り替える元のコンシューマ・グループの名前。 |
|
|
戻り値
このプロシージャは、old_consumer_group
パラメータにある、ユーザーの古いコンシューマ・グループを出力します。
ノート:
old_consumer_group
で戻された値を使用して、古いコンシューマ・グループに後で切り替えることができます。
例外
表151-26 SWITCH_CURRENT_CONSUMER_GROUPプロシージャの例外
例外 | 説明 |
---|---|
|
コンシューマ・グループが存在しません。 |
|
権限が不十分です。 |
|
|
使用上のノート
プロシージャの所有者には、ユーザーを古いコンシューマ・グループに再切替えするために、ユーザーの古いグループ(old_consumer_group
)に対する権限が必要です。このプロシージャには1つの例外があり、ユーザーを初期コンシューマ・グループにいつでも切り替えることができます(権限チェックはスキップ)。
initial_group_on_error
をTRUE
に設定すると、SWITCH_CURRENT_CONSUMER_GROUP
プロシージャは、new_consumer_group
が指定したグループに現行のセッションを設定できない場合、そのセッションをデフォルト・グループに設定します。現行のコンシューマ・グループが初期コンシューマ・グループに変更されていても、new_consumer_group
へのセッションの移動に関連するエラーは発生します。
例
CREATE OR REPLACE PROCEDURE high_priority_task is old_group varchar2(30); prev_group varchar2(30); curr_user varchar2(30); BEGIN -- switch invoker to privileged consumer group. If we fail to do so, an -- error is thrown, but the consumer group does not change -- because 'initial_group_on_error' is set to FALSE dbms_session.switch_current_consumer_group('tkrogrp1', old_group, FALSE); -- set up exception handler (in the event of an error, we do not want to -- return to caller while leaving the session still in the privileged -- group) BEGIN -- perform some operations while under privileged group EXCEPTION WHEN OTHERS THEN -- It is possible that the procedure owner does not have privileges -- on old_group. 'initial_group_on_error' is set to TRUE to make sure -- that the user is moved out of the privileged group in such a -- situation dbms_session.switch_current_consumer_group(old_group,prev_group,TRUE); RAISE; END; -- we've succeeded. Now switch to old_group, or if cannot do so, switch -- to caller's initial consumer group dbms_session.switch_current_consumer_group(old_group,prev_group,TRUE); END high_priority_task; /
151.4.25 UNIQUE_SESSION_IDファンクション
このファンクションは、データベースに現在接続しているすべてのセッションに対して一意の識別子を戻します。同じセッション中にこのファンクションを複数回コールしても、常に同じ結果が戻されます。
構文
DBMS_SESSION.UNIQUE_SESSION_ID RETURN VARCHAR2;
プラグマ
pragma restrict_references(unique_session_id,WNDS,RNDS,WNPS);
戻り値
表151-27 UNIQUE_SESSION_IDファンクションの戻り値
戻り値 | 説明 |
---|---|
|
最大24バイトまで戻します。 |