2008-10-30 41 views
4

我們正在尋找一種方法來記錄對Oracle中存儲過程的任何調用,並查看哪些參數值用於調用。如何使用參數值記錄/跟蹤Oracle存儲過程調用?

我們使用Oracle 10.2.0.1

我們可以登錄SQL語句,看到了約束變量,但是當我們跟蹤的存儲過程,我們看到綁定變量B1,B2等,但沒有值。

我們希望看到我們在MS SQL Server Profiler中看到的同類信息。

感謝所有幫助

回答

6

你可以看看的DBMS_APPLICATION_INFO package。這允許你用任何你想要的信息來「測試」你的PL/SQL代碼 - 但是它確實需要增加對每個程序的調用來進行檢測。

另請參閱this AskTom thread關於使用DBMS_APPLICATION_INFO來監視PL/SQL。

2

我想你是用一種奇怪的方式使用「log」這個詞。

我們可以登錄SQL語句...

你真的是說你可以跟蹤使用綁定變量的SQL語句?託尼的回答是針對記錄你在做什麼的能力。這總是優於追蹤,因爲只有你知道什麼對你很重要。也許你的進程的執行很大程度上依賴於查詢表中的值。由於該值發生變化並且不作爲參數傳入,因此可能會丟失該信息。

但是如果你真的記錄你在做什麼,你可以在你的日誌表中包含該值,你不僅知道你通過的變量,而且知道關鍵值。

alter system set events'10046 trace name context forever,level 12';那是你在用什麼?

0

是的,我想我應該用「追蹤」一詞

我會盡力來形容我們做了什麼:

使用Enterprise Manager(如DBO)我們去參加會話,並開始一絲絲

開始跟蹤 啓用等信息,綁定信息

運行我們的應用程序,它擊中DB操作

完成跟蹤,對輸出運行此:

TKPROF .PRC output2.txt SYS =沒有記錄= record.txt講解= DBO @ DBINST/PW

什麼我們希望看到的是,「這些程序被稱爲與這些參數」我們現在得到的是:

Begin dbo.UPKG_PACKAGENAME.PROC(:v0, :v1, :v2 ...); End; 
/
Begin dbo.UPKG_PACKAGENAME.PROC2(:v0, :v1, :v2 ...); End; 
/
... 

所以我們可以追蹤所調用的程序,但我們沒有得到實際的參數值,僅僅是:V0等。

我的理解是,我們所做的與alter system語句相同,但請告訴我們,如果情況並非如此。

感謝

0

你採用了10G 讓這個 EXEC dbms_monitor.session_trace_enable嘗試(SESSION_ID => XXX,SERIAL_NUM => XX,等待=>真,結合=> TRUE); 你可以得到session_id = SID & serial_num = SERIAL#from v $ session

相關問題