如何在oracle 10g中跟蹤sql
在具有許多活躍使用者的繁忙生產環境中,跟蹤sql會話是費時且十分複雜的,
因為在任何使用連線池的多層系統中處理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企業管理器頁面中通過名稱來識別
名稱,把一些呼叫嵌入到他們的應用程式中)。
請注意,設定模組、動作及其他引數(如client_id)將不造成對資料庫的往返操作
--這些例程攜帶來自應用程式的所有呼叫。
服務名稱由用於連線該服務的連線字串來確定。未與特定服務關聯的使用者會話將
由sys$users處理(sys$background是後台程序的預設服務)。由於我們具有乙個服務和
乙個模組名稱,因而我們可以啟動對該模組的跟蹤,如下所示:
sql> exec dbms_monitor.serv_mod_act_trace_enable
(service_name=>'testenv', module_name=>'product_update');
pl/sql過程已成功完成。
我們可以啟動對客戶機的跟蹤:
sql> exec dbms_monitor.client_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_monitor.session_trace_enable(139);
pl/sql過程已成功完成。
該序號預設為該sid的當前序號(除非另外指定),因此如果那就是您想跟蹤的會話
binds設定為false,因此上面的語法實際上與下面的語法效果相同:
sql> exec dbms_monitor.session_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)按鈕顯示乙個頁面,其中顯示了您將用於整合所有跟蹤檔案的語法。
要確保用雙引號括住字串,並在檔名後新增乙個".trc"副檔名;否則,tkprof
將不會把它作為乙個檔名來接受。在執行該命令之前,找到在user_dump_dest(或
者,如果您沒有更改該引數名,則在udump)中指定的目錄。
c:...udump> trcsess output="kfloss.trc" service="testenv"
module="product update"
action="batch insert"
隨後,您可以對整合的跟蹤檔案執行tkprof,以生成乙份報告。
c:...udump> tkprof kfloss.trc
output=kfloss_trace_report sort=(exeela, prsela, fchela)
如果您不終止跟蹤,那麼執行該服務和模組的每乙個會話都會被跟蹤。因此,當您
完成跟蹤時,要確保通過使用oralce企業管理器或dbms_monitor包來終止跟蹤。
Oracle 10g中跟EM有關的問題解決方法
oracle 10g中的em採用web的形式來管理資料庫及相關服務,但使用過程中會碰到一些跟em有關的問題,根據同行的提示及筆者的實際經驗,進行了一些歸納,希望對相關愛好者有所幫助 1 資料庫控制台啟動後,看到1 資料庫例項無資訊2 監聽程式為狀態為不可用3 到例項的 連線狀態為不可用。問題分析 此...
如何完全解除安裝Oracle 10g
解除安裝oracle 10g資料庫的過程不想解除安裝一般應用軟體那麼簡單,如果疏忽了一些步驟,就會在系統中留有安裝oracle資料庫的痕跡,從而占用系統資源或者影響系統的執行。可以按照如下步驟完全解除安裝oracle 10g資料庫。1 如果資料庫配置了自動儲存管理 asm 應該先刪除聚集同步服務cs...
oracle10g 解除安裝
1 oracle 10g解除安裝軟體環境 1 windows xp oracle 10g2 oracle 安裝路徑為 d oracle 實現方法 1 開始 設定 控制面板 管理工具 服務停止所有 oracle 服務 2 開始 程式 oracle oradb 10g home1 oracle inst...