Thursday, January 7, 2010

他のセッションのパラメータを制御しよう

セッションモニタリングをしてみると次のような二つの要求事項ができるはずです。

  1. 特定のセッションが特定のパラメータ値を変更した場合(すなわち、システムディフォルト値と違う値を設定した場合)、これを確認できる?
  2. 特定のセッションの特定のパラメータ値を変えることができる?

まず特定のセッションのパラメータ値を確認できる一番確実な方法はoradebug dump errorstackコマンドです。

-- Session #1
UKJA@ukja1021> @me

SADDR SID SERIAL# PID PADDR
-------- ---------- ---------- ---------- --------
34328D4C 140 5489 5924 3424C60C

UKJA@ukja1021> alter session set "_hash_join_enabled" = false;

Session altered.

-- Session #2
SYS@ukja1021> oradebug setospid 5924
Oracle pid: 15, Windows thread id: 5924, image: ORACLE.EXE (SHAD)
SYS@ukja1021> oradebug dump errorstack 3;
Statement processed.
SYS@ukja1021> oradebug tracefile_name
c:\oracle\admin\ukja1021\udump\ukja1021_ora_5924.trc

SYS@ukja1021> ed c:\oracle\admin\ukja1021\udump\ukja1021_ora_5924.trc

....
Dump event group for SESSION
Dump event group for SYSTEM
DYNAMICALLY MODIFIED PARAMETERS:
_hash_join_enabled = FALSE <--- 注目!

Oracle10gからはV$SES_OPTIMIZER_ENVビューを通じて一部のパラメータ値を確認できるがオプティマイザに関したパラメータ値に限るという制約があります。


他のセッションのパラメータ値を変更するのはDBMS_SYSTEMパッケージを通じて可能です。


-- Session #2
SYS@ukja1021> exec dbms_system.set_bool_param_in_session(140,5489,'_hash_join_enabled', true);

PL/SQL procedure successfully completed.

-- Session #1
UKJA@ukja1021> @para hash_join_enabled
UKJA@ukja1021> set echo off
old 9: and i.ksppinm like '%&1%'
new 9: and i.ksppinm like '%hash_join_enabled%'

NAME VALUE IS_DEFAUL SES_MODIFI
------------------------------ -------------------- --------- ----------
SYS_MODIFI
----------
DESCRIPTION
------------------------------------------------------------------------

_hash_join_enabled TRUE TRUE true
false
enable/disable hash join

DBMS_SYTEM.SET_BOOL_PARAM_IN_SESSIONプロシージャはBoolean(True/False)タイプのパラメータ値を、DBMS_SYSTEM.SET_INT_PARAM_IN_SESSIONプロシージャはIntegerタイプのパラメータ値を変更する機能を提供します。しかし、文字列タイプのパラメータ値を変更する機能は提供されません。たぶん、過去のバージョンでどんな理由のために提供しなかったが、その後機能の追加や変更がなかったと思われます。


OradebugやDBMS_SYSTEMのような文書化がなっていない機能を使用しなければならないのが負担になるかも知れません。こんな機能の使用でオラクルデータベースに問題ができたらサポートの領域を外れるようになると言うのも大きい負担です。でも、トラブルシューチングを少し深く入ってもすぐこんな隠し機能が必要になるのが現実でもあります。

No comments:

Post a Comment