Oracle 執行語句歷史查詢—測試和實施人員必備技能

流浪的野狼發表於2013-06-09
今晚真的有點無聊,工作上好幾天都沒啥事情了,但還是不得不每天在辦公室‘裝忙’耗十三四個小時;坐得真抓狂。還是找點事情做吧。

這個專案做下來,我發現現場的測試人員普遍都不會前臺抓SQL(就是指點選一下前臺介面的操作,然後去資料庫追查剛剛這個動作 操作了哪些表)。後來和做測試的幾個其它朋友聊天,也基本不知道這幾個檢視,感覺很詫異,這個應該是每一個測試人員,以及實施人員(沒參與專案資料庫開發,不熟悉每個業務具體操作那些表)常用的技能。因此決定總結下,把這小技巧給大家推薦下。

     其實很簡單,就兩個oracle 自帶的檢視:v$sql_bind_capture 和 v$sql.

1、先點選下系統前臺操作,然後去資料庫查詢

select distinct sql_text, sql_id, address

  from v$sql

 where module = 'JDBC Thin Client'      --資料庫的連結方式

   and last_active_time>sysdate-0.0005 --很短的一個時間,不然太多不好區分

   and parsing_schema_name like 'INVENTORY%'; --資料庫使用者名稱

2、 通個這個查詢我們可以知道,剛剛資料庫進行操作的SQL(如果語句很長就得看SQL_FULLTEXT這個欄位),如果你還想看詳細引數,就得繼續了。

select t.NAME, t.VALUE_STRING, t.* 

  from gv$sql_bind_capture t

 where t.address = '0700000916BF5110';

Value_string就是你傳進去執行的變數值。很不幸的告訴你時間這樣顯示不了,但我們有辦法啊,繼續下面的查詢。

select t.value_string,

       t.NAME,

       t.datatype_string,

       DUMP(t.value_anydata),

       ANYDATA.accesstimestamp(t.value_anydata)

  from gv$sql_bind_capture t

 where address = '000000015E3964A8';

具體我就不解釋了。

    

       關於v$sql_bind_capture檢視大家得注意下,由於資料庫引數配置的不同,這個儲存繫結變數的值重新整理時間是不同的,隱含引數  _cursor_bind_capture_interval,這個就是控制繫結變數抓取頻率的引數,預設值是900(15min)。修改引數值很小,可以快速獲取繫結變數的值: alter system set "_cursor_bind_capture_interval"=5 scope=both; 不過這個得根據你資料庫的具體情況來設定了。如果你抓取到的引數老是沒變化,你就要注意下這個抓取重新整理的頻率是多高了。

select * from v$parameter t where t.name like '%bind%';

      還有一點也需要注意,如果你的資料庫是RAC多點叢集的話,v$sql_bind_capture這個表的資料並沒有存到共享儲存區,它是在被你連結的單點資料庫上面,所以有時候你可能查不到,這時就得單點登入一個個單點資料庫去試運氣了。

 

     當你剛剛接觸別人的二手程式碼,或作為一個測試人員、實施人員、資料割接人員,不知道每個業務具體操作的是哪些表時,這兩檢視這樣查詢是不是很爽。哈哈

轉自:http://blog.csdn.net/runming918/article/details/7241028

個人學習總結:

       在學習v$檢視是突然想去看看oracle資料庫的v$檢視有哪些,透過檢視dba_objects檢視,竟然只有四個,感覺很詫異,想想估計是自己弄錯了吧,oracle會不會就這麼多檢視啊,最後終於在v$fixed_table中找到了,同時經統計V$、GV$、X$三個的數量既然以外的發現了上述兩個寶貝檢視,百度下原來這倆寶貝有如此的妙用,再次稍作記錄供今後參考學習。不過在oracle11g中這倆傢伙似乎換了馬甲成了GO$SQL_BIND_CAPTURE    O$SQL_BIND_CAPTURE這種樣子了,呵呵

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/28612416/viewspace-763632/,如需轉載,請註明出處,否則將追究法律責任。

相關文章