<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-13  評論-28  文章-63  trackbacks-0
    在具有許多活躍用戶的繁忙生產(chǎn)環(huán)境中,跟蹤SQL會話是費時且十分復雜的,因為在任何使用連接池的多層系統(tǒng)中處理SQL語句可能要涉及多個進程,或者甚至是不同的實例。

      利用Oracle數(shù)據(jù)庫10g,Oralce通過一個新的內(nèi)置軟件包DBMS_MONITOR合理化了SQL的跟蹤,這個軟件包中包含以前無書面記載的跟蹤工具(如DBMS_SUPPORT軟件包)的功能。現(xiàn)在,您可以輕松地從頭到尾--從客戶機到中間層再到后端--跟蹤任何用戶的會話,并且基于特定的客戶ID、模塊或動作生成跟蹤文件。

      此外,Oracle數(shù)據(jù)庫10g包含一種新的實用程序trcsess,它可以讓您基于會話ID或模塊名稱之類的條件,有選擇地從大量跟蹤文件中抽取出跟蹤數(shù)據(jù),并將它們保存到一個文件中。該實用程序在共享服務(wù)器配置中特別有用,因為調(diào)度程序可能把每一個用戶請求傳遞給不同的共享服務(wù)器進程,從而為任何給定的會話產(chǎn)生多個跟蹤文件。與通過大量跟蹤文件發(fā)掘信息不同,Oracle數(shù)據(jù)庫10g的trcsess可以讓您獲得關(guān)于單一用戶會話的整合后的跟蹤信息。

      開始

      和Oracle數(shù)據(jù)庫的以前版本一樣,跟蹤文件將被輸出到由服務(wù)器的初始化文件(或spfile)的user_dump_dest參數(shù)指定的目錄中。默認的位置取決于操作系統(tǒng);例如,對于使用DBCA的Microsoft Windows平臺,默認位置是$ORACLE_BASE\instance_name\admin\udump,其中instance_ name是Oracle實例的名稱。您可以通過使用以下改變會話命令來動態(tài)地更改該參數(shù):

    alter session set user_dump_dest="c:\kflosstrace";

      您還可以把您自己的標記添加到跟蹤文件名中,以便您能夠更容易地找到生成的文件。為此,可以在啟動跟蹤之前設(shè)置tracefile_identifier初始化參數(shù):

    alter session set
    tracefile_identifier ="kfloss_test";

      通過該命令生成的跟蹤文件帶有您設(shè)置的附加在文件名后的字符串值。盡管這些改變會話命令都不是必要的,但是它們都會使查找跟蹤會話的結(jié)果更容易。

      現(xiàn)在,我們已經(jīng)設(shè)置了這些參數(shù),那么讓我們看看新的跟蹤軟件包和Oracle企業(yè)管理器的界面。讓我們使用新的DBMS_MONITOR軟件包通過模塊名稱和客戶機名稱來建立一個跟蹤。

      用DBMS_MONITOR建立跟蹤

      DBMS_MONITOR包具有多個例程,用于啟用和禁用統(tǒng)計數(shù)據(jù)集合,以及用于根據(jù)會話ID進行跟蹤、或者基于服務(wù)名稱、模塊名稱和動作名稱的組合進行跟蹤。(它們?nèi)邚膶哟谓Y(jié)構(gòu)上是關(guān)聯(lián)的:您不能在不指定模塊和服務(wù)名稱的情況下指定一個動作,但是您可以只指定服務(wù)名稱,或者只指定服務(wù)名稱和模塊名稱)。 模塊名稱和動作名稱(如果有的話)都來自于應(yīng)用程序代碼內(nèi)部。例如,Oracle電子商務(wù)套件應(yīng)用程序在代碼中提供了模塊名稱和動作名稱,這樣您就可以在任何Oralce企業(yè)管理器頁面中通過名稱來識別它們。 (PL/SQL開發(fā)人員可以通過使用DBMS_APPLICATION_INFO包設(shè)置模塊名稱和動作名稱,把一些調(diào)用嵌入到他們的應(yīng)用程序中)。

      請注意,設(shè)置模塊、動作及其他參數(shù)(如client_id)將不造成對數(shù)據(jù)庫的往返操作--這些例程攜帶來自應(yīng)用程序的所有調(diào)用。

      服務(wù)名稱由用于連接該服務(wù)的連接字符串來確定。未與特定服務(wù)關(guān)聯(lián)的用戶會話將由sys$users處理(sys$background是后臺進程的默認服務(wù))。由于我們具有一個服務(wù)和一個模塊名稱,因而我們可以啟動對該模塊的跟蹤,如下所示:

    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過程已成功完成。

      請注意,所有這些設(shè)置都是永久性的--所有與該服務(wù)和模塊關(guān)聯(lián)的會話都會被跟蹤,而不僅僅是跟蹤當前會話。

      為了基于會話ID跟蹤SQL,可以查看Oracle企業(yè)管理器的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的當前序號(除非另外指定),因此如果那就是您想跟蹤的會話和序號,那么您就不必查看更多的內(nèi)容了。還有,默認情況下,WAITS設(shè)置為true而BINDS設(shè)置為false,因此上面的語法實際上與下面的語法效果相同:

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

      請注意,WAITS和BINDS是相同的參數(shù),您在過去可能已經(jīng)使用DBMS_SUPPORT和10046事件對它們進行了設(shè)置。

      如果您正在一個生產(chǎn)環(huán)境中工作,那么此時您最好重新運行出錯的SQL或應(yīng)用程序,并且相應(yīng)地創(chuàng)建跟蹤文件。

      用企業(yè)管理器建立跟蹤

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

    點擊放大此圖片
    圖1:Oracle企業(yè)管理器的Top Consumers頁面

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

      您還可以啟用(或禁用)這些頁面上列出的任何項目的統(tǒng)計數(shù)據(jù)集合。(DBMS_MONITOR還提供了用于啟用和禁用數(shù)據(jù)集合的例程)。

      分析跟蹤結(jié)果

      獲取關(guān)于Kimberly Floss的圖書的信息

      無論您是使用DBMS_MONITOR或者是使用Oracle企業(yè)管理器建立跟蹤,您都將使用trcsess 命令行工具來整合跟蹤文件。單擊Oracle企業(yè)管理器中的查看SQL跟蹤(View SQL Trace)按鈕顯示一個頁面,其中顯示了您將用于整合所有跟蹤文件的語法。

      要確保用雙引號括住字符串,并在文件名后添加一個".trc"擴展名;否則,TKPROF將不會把它作為一個文件名來接受。在執(zhí)行該命令之前,找到在user_dump_dest(或者,如果您沒有更改該參數(shù)名,則在\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)

      如果您不終止跟蹤,那么運行該服務(wù)和模塊的每一個會話都會被跟蹤。因此,當您完成跟蹤時,要確保通過使用Oralce企業(yè)管理器或DBMS_MONITOR包來終止跟蹤。
    posted on 2006-08-27 22:08 七匹狼 閱讀(343) 評論(1)  編輯  收藏 所屬分類: oracle

    評論:
    # re: 在Oracle數(shù)據(jù)庫10g中跟蹤SQL 2006-08-27 22:35 | 冰川
    學習,哈哈!  回復  更多評論
      
    主站蜘蛛池模板: 亚洲成人在线免费观看| 国产一级a毛一级a看免费视频| a国产成人免费视频| 国产成人精品亚洲精品| 国产精品视频全国免费观看| 亚洲性在线看高清h片| A国产一区二区免费入口| 亚洲五月综合缴情在线观看| 国内永久免费crm系统z在线| 亚洲AV日韩精品久久久久| 91热久久免费精品99| 亚洲国产精品成人综合色在线婷婷| 巨波霸乳在线永久免费视频| 亚洲乱码在线视频| 日本一道本高清免费| 一级毛片大全免费播放| 精品亚洲综合在线第一区| 91精品全国免费观看含羞草 | 亚洲爆乳无码专区www| 日韩免费视频网站| 一级全免费视频播放| 亚洲va国产va天堂va久久| 2021久久精品免费观看| 亚洲aⅴ无码专区在线观看春色| 亚洲av无码专区在线观看素人| 福利免费在线观看| 亚洲成A∨人片在线观看无码| 四虎影院免费视频| 抽搐一进一出gif免费视频| 67pao强力打造67194在线午夜亚洲 | 久久亚洲精品中文字幕无码 | 久久水蜜桃亚洲av无码精品麻豆| 日本在线高清免费爱做网站| 立即播放免费毛片一级| 久久精品国产亚洲av麻豆| 成年丰满熟妇午夜免费视频| 免费的黄色的网站| 亚洲日本乱码一区二区在线二产线| 国产一级淫片a免费播放口之 | 亚洲人片在线观看天堂无码| 亚洲人午夜射精精品日韩|