當前位置:學者齋 >

IT認證 >Oracle認證 >

如何在Oracle資料庫10g中跟蹤SQL

如何在Oracle資料庫10g中跟蹤SQL

在具有許多活躍使用者的繁忙生產環境中,跟蹤SQL會話是費時且十分複雜的,因為在任何使用連線池的多層系統中處理SQL語句可能要涉及多個程序,或者甚至是不同的例項。

如何在Oracle資料庫10g中跟蹤SQL

利用Oracle資料庫10g,Oralce通過一個新的內建軟體包DBMS_MONITOR合理化了SQL的跟蹤,這個軟體包中包含以前無書面記載的跟蹤工具(如DBMS_SUPPORT軟體包)的功能。現在,您可以輕鬆地從頭到尾--從客戶機到中間層再到後端--跟蹤任何使用者的會話,並且基於特定的客戶ID、模組或動作生成跟蹤檔案。

此外,Oracle資料庫10g包含一種新的實用程式trcsess,它可以讓您基於會話ID或模組名稱之類的條件,有選擇地從大量跟蹤檔案中抽取出跟蹤資料,並將它們儲存到一個檔案中。該實用程式在共享伺服器配置中特別有用,因為排程程式可能把每一個使用者請求傳遞給不同的共享伺服器程序,從而為任何給定的會話產生多個跟蹤檔案。與通過大量跟蹤檔案發掘資訊不同,Oracle資料庫10g的trcsess可以讓您獲得關於單一使用者會話的整合後的跟蹤資訊。

  開始

和Oracle資料庫的以前版本一樣,跟蹤檔案將被輸出到由伺服器的初始化檔案(或spfile)的user_dump_dest引數指定的目錄中。預設的位置取決於作業系統;例如,對於使用DBCA的Microsoft Windows平臺,預設位置是$ORACLE_BASEinstance_nameadminudump,其中instance_ name是Oracle例項的名稱。您可以通過使用以下改變會話命令來動態地更改該引數:

alter session set user_dump_dest="c:kflosstrace";

您還可以把您自己的標記新增到跟蹤檔名中,以便您能夠更容易地找到生成的檔案。為此,可以在啟動跟蹤之前設定tracefile_identifier初始化引數:

alter session set
tracefile_identifier ="kfloss_test";

通過該命令生成的跟蹤檔案帶有您設定的附加在檔名後的字串值。儘管這些改變會話命令都不是必要的,但是它們都會使查詢跟蹤會話的結果更容易。

現在,我們已經設定了這些引數,那麼讓我們看看新的跟蹤軟體包和Oracle企業管理器的介面。讓我們使用新的DBMS_MONITOR軟體包通過模組名稱和客戶機名稱來建立一個跟蹤。

  用DBMS_MONITOR建立跟蹤

DBMS_MONITOR包具有多個例程,用於啟用和禁用統計資料集合,以及用於根據會話ID進行跟蹤、或者基於服務名稱、模組名稱和動作名稱的'組合進行跟蹤。(它們三者從層次結構上是關聯的:您不能在不指定模組和服務名稱的情況下指定一個動作,但是您可以只指定服務名稱,或者只指定服務名稱和模組名稱)。 模組名稱和動作名稱(如果有的話)都來自於應用程式程式碼內部。例如,Oracle電子商務套件應用程式在程式碼中提供了模組名稱和動作名稱,這樣您就可以在任何Oralce企業管理器頁面中通過名稱來識別它們。 (PL/SQL開發人員可以通過使用DBMS_APPLICATION_INFO包設定模組名稱和動作名稱,把一些呼叫嵌入到他們的應用程式中)。

請注意,設定模組、動作及其他引數(如client_id)將不造成對資料庫的往返操作--這些例程攜帶來自應用程式的所有呼叫。

服務名稱由用於連線該服務的連線字串來確定。未與特定服務關聯的使用者會話將由sys$users處理(sys$background是後臺程序的預設服務)。由於我們具有一個服務和一個模組名稱,因而我們可以啟動對該模組的跟蹤,如下所示:

SQL> exec dbms__mod_act_trace_enable
(service_name=>'testenv', module_name=>'product_update');

PL/SQL過程已成功完成。

我們可以啟動對客戶機的跟蹤:

SQL> exec dbms_nt_id_trace_enable
(client_id=>'kimberly');

PL/SQL過程已成功完成。

請注意,所有這些設定都是永久性的--所有與該服務和模組關聯的會話都會被跟蹤,而不僅僅是跟蹤當前會話。

為了基於會話ID跟蹤SQL,可以檢視Oracle企業管理器的Top Sessions頁面,或者像您當前做的那樣查詢V$SESSION檢視。

SQL> select sid, serial#, username
from v$session;
SID SERIAL# USERNAME
------ ------- ------------
133 4152 SYS
137 2418 SYSMAN
139 53 KIMBERLY
140 561 DBSNMP
141 4 DBSNMP
. . .
168 1
169 1
170 1
28 rows selected.

通過會話ID(SID)和序號,您可以使用DBMS_MONITOR只對下面的會話啟用跟蹤:

SQL> exec dbms_ion_trace_enable(139);

PL/SQL過程已成功完成。

該序號預設為該SID的當前序號(除非另外指定),因此如果那就是您想跟蹤的會話和序號,那麼您就不必檢視更多的內容了。還有,預設情況下,WAITS設定為true而BINDS設定為false,因此上面的語法實際上與下面的語法效果相同:

SQL> exec dbms_ion_trace_enable
(session_id=>139, serial_num=>53, waits=>true, binds=>false);

請注意,WAITS和BINDS是相同的引數,您在過去可能已經使用DBMS_SUPPORT和10046事件對它們進行了設定。

如果您正在一個生產環境中工作,那麼此時您最好重新執行出錯的SQL或應用程式,並且相應地建立跟蹤檔案。

  用企業管理器建立跟蹤

通過Oracle企業管理器建立跟蹤從Top Consumers頁面(可以通過Additional Monitoring Links區域中的Performance頁面得到,如圖1所示)開始。該頁面顯示服務、模組、客戶和動作對系統資源的當前使用情況。

圖1:Oracle企業管理器的Top Consumers頁面

您可以單擊Top Services、Top Modules、Top Actions、Top Clients或Top Sessions選項卡,來檢視這些類別的頂級消費者中每一種的詳細資訊,隨後您可以通過這些頁面中的每一個頁面輕鬆啟用(或禁用)SQL跟蹤。從頁面上的列表中簡單地選擇專案,然後單擊啟用SQL跟蹤(Enable SQL Trace)開始跟蹤(當您完成跟蹤時,單擊禁用按鈕)。

您還可以啟用(或禁用)這些頁面上列出的任何專案的統計資料集合。(DBMS_MONITOR還提供了用於啟用和禁用資料集合的例程)。

  分析跟蹤結果

獲取關於Kimberly Floss的圖書的資訊

無論您是使用DBMS_MONITOR或者是使用Oracle企業管理器建立跟蹤,您都將使用trcsess 命令列工具來整合跟蹤檔案。單擊Oracle企業管理器中的檢視SQL跟蹤(View SQL Trace)按鈕顯示一個頁面,其中顯示了您將用於整合所有跟蹤檔案的語法。

要確保用雙引號括住字串,並在檔名後新增一個""副檔名;否則,TKPROF將不會把它作為一個檔名來接受。在執行該命令之前,找到在user_dump_dest(或者,如果您沒有更改該引數名,則在udump)中指定的目錄。

C:...udump> trcsess output="" service="testenv"
module="product update"
action="batch insert"

隨後,您可以對整合的跟蹤檔案執行TKPROF,以生成一份報告。

C:...udump> tkprof
output=kfloss_trace_report SORT=(EXEELA, PRSELA, FCHELA)

如果您不終止跟蹤,那麼執行該服務和模組的每一個會話都會被跟蹤。因此,當您完成跟蹤時,要確保通過使用Oralce企業管理器或DBMS_MONITOR包來終止跟蹤。

  • 文章版權屬於文章作者所有,轉載請註明 https://xuezhezhai.com/zh-tw/itrz/oracle/q0weer.html