dba_hist_active_sess_historyでp 2列の値をsidに換算する手順

1309 ワード

スレッド「一回のcursor:pin S wait on X事件のフォロー」(http://blog.csdn.net/msdnchina/article/details/45372011)の中で、一つの知識点があります。元の作者は計算過程を書いていません。
SQL> select distinct session_id,session_serial#,p1,p2
  2    from temp_hist_active_sess_history
  3   where event ='cursor: pin S wait on X'
  4     and rownum<=50;

      ,     p2=21333102559232,         4967 

 :temp_hist_active_sess_history      :
SQL> create table temp_hist_active_sess_history nologging  as
  2    select * from  dba_hist_active_sess_history
  3   where  to_char(sample_time, 'yyyymmddhh24') between '2011030717' and '2011030722';
p 2=2133102559232(p 2は10進)を分析します。前の2バイトのデータは4967です。計算プロセスは以下の通りです。
--   16  
select to_char(21333102559232,'xxxxxxxxxxxxxxxxxxxxxxxxxxxx') from dual; 
------  136700000000,    4 0:
   0000136700000000

   8bytes:00001367

select to_number('00001367','xxxxxxxxxxxxxxxxxxxxxxxxxxxxx') from dual; 
------  4967
 
もう一つの知識点:dbachuhistudective eushistoryビューでは、p 1 raw列(16進数)はなく、p 1列のみ、p 1列number型は10進数、p 2 raw列はありません。p 2列のみ、p 2列number型は10進数、p 3列はありません。
v$sessionとv$sessionuwaitビューでは、p 1列、p 1列number型、10進数、p 2 raw列(16進数)、p 2列number型、10進数、p 3 raw列(16進数)、p 2列、p 2列number型、10進数、p 3 raw列があります。