少し前にAutonomous DatabaseにてパッケージCS_SESSIONのSWITCH_SERVICEを呼び出すことにより、リソース・マネージャのコンシューマー・グループの切り替えができるようになりました。
パラレル・クエリまで実行して動作を確認するのは手間がかかるので、単純にセッションに設定されているサービス名を確認してみます。
最初にAPEXのワークスペースからパッケージCS_SESSIONを呼び出せるよう、実行権限を与えます。
grant execute on cs_session to <APEXワークスペース・スキーマ名>;
grant execute on cs_session to apexdev;
APEXのアプリケーション・ビルダーを開きます。
アプリケーション作成ウィザードを起動し、コンシューマー・グループを切り替えを確認するために使用する簡単なアプリケーションを作成します。アプリケーションの名前はコンシューマー・グループの切り替えとし、空のアプリケーションを作成します。
アプリケーションの作成を実行します。
ホーム・ページのContent Bodyにリージョンを作成します。識別のタイトルはセッション情報、タイプとしてクラシック・レポートを選択します。ソースの位置はローカル・データベース、タイプとしてSQL問合せを選択し、SQL問合せとして以下を記述します。
select
sys_context('USERENV','SID') sid
, sys_context('USERENV','SESSIONID') audsid
, sys_context('USERENV','SERVICE_NAME') service_name
from dual
以上でアプリケーションを実行し、レポートの表示を確認します。
デフォルトのコンシューマー・グループはLOWです。SERVICE_NAMEより、コンシューマー・グループがLOWであることが確認できます。
コンシューマー・グループを切り替えるプロセスを作成します。
リージョンの前にプロセスを作成します。識別の名前をHIGHへ切り替えとし、タイプとしてコードを実行を選択します。ソースのPL/SQLコードには以下を記述します。
begin
cs_session.switch_service('HIGH');
end;
再度、レポートを確認します。
SERVICE_NAMEより、コンシューマー・グループがHIGHに切り替わっていることが確認できます。
副作用がないかどうか、データベース・アクションよりV$SESSIONを検索して確認します。
select sid, audsid, service_name from v$session;
APEXのページ・プロセスが終了した後に、コンシューマー・グループがHIGHのままのセッションが存在していることが確認できます。
意図しない動作が発生しないように、リージョンの後にプロセスを作成し、PL/SQLコードとして以下を実行します。コンシューマー・グループをLOWに戻します。
begin
cs_session.switch_service('LOW');
end;
データベース・アクションからSELECT文を実行すると、先ほどとは異なりコンシューマー・グループがHIGHのサービスは残っていないことが確認できます。
レポートの遅延ロードがONの場合は、ページ・プロセスとは異なるデータベース・セッションにてSELECT文が実行されます。そのため、コンシューマー・グループが切り替わりません。
遅延ロードでは、アプリケーション定義のセキュリティのデータベース・セッションのセクションに含まれる初期化PL/SQLコードとPL/SQLコードのクリーンアップにコードを記述して対応することができます。
この設定ではアプリケーション全体のコンシューマー・グループが切り替わります。
Autonomous Databaseでのコンシューマー・グループの切り替え処理の確認については以上です。
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完