亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

數據庫中如何使用dbms_monitor跟蹤多個會話,service_name,sid等

發布時間:2021-11-10 09:11:07 來源:億速云 閱讀:144 作者:小新 欄目:關系型數據庫

這篇文章主要為大家展示了“數據庫中如何使用dbms_monitor跟蹤多個會話,service_name,sid等”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“數據庫中如何使用dbms_monitor跟蹤多個會話,service_name,sid等”這篇文章吧。


概述

在 具有連接池或共享服務器的多層環境中,一個會話可以跨越多個進程,甚至跨越多個實例。DBMS_MONITOR是在Oracle 10g中引入的內置的程序包,通過該程序包可以跟蹤從客戶機到中間層、再到后端數據庫的任何用戶的會話。由于每個會話都會產生獨立的trace文件,因而 可以較為容易地標識創建大量工作量的特定用戶。DBMS_MONITOR取代了傳統的跟蹤工具,例如DBMS_SUPPORT。需要具有DBA角色才可以使用DBMS_MONITOR。
端對端的應用程序跟蹤可以基于如下:
會話(SID):基于會話ID(SID)和序列號。
客戶端標識符(client_identifier):允許跨越多個會話設置跟蹤。基于登錄ID指定終端用戶。使用DBMS_SESSION.SET_IDENTIFIER過程設置該值。
實例(INST_NAME):基于實例名指定給定的實例。
服務名(SERVICE_NAME):指定一組相關的應用程序。使用DBMS_SERVICE.CREATE_SERVICE過程設置該值。
模塊名(MODULE):開發人員在其應用程序代碼中使用DBMS_APPLICATION_INFO.SET_MODULE過程設置該值。使用該名稱表示執行的模塊或代碼。
操作名(ACTION):開發人員在其應用程序代碼中使用DBMS_APPLICATION_INFO.SET_ACTION過程設置該值。使用該名稱表示模塊執行的操作。

也可以執行如下sql:
select sid,serial#,SERVICE_NAME,MODULE,ACTION,client_identifier from v$session;

最后3個跟蹤選項在層次上關聯;不可以在沒有指定模塊名和服務名的情況下就指定操作名,但是可以只指定服務名,或者只指定服務名和模塊名。


1.基于會話ID和序列號設置跟蹤(serial#可以加,也可以不加)

為了基于會話ID和序列號設置跟蹤,首先確定需要跟蹤的會話的SID和序列號:
SQL> COL PROGRAM FOR A30
SQL> COL EVENT FOR A30
SQL> select sid,serial#,username,program,status,type,event,blocking_session from v$session where type='USER';

       SID    SERIAL# USERNAME                       PROGRAM                        STATUS   TYPE       EVENT                          BLOCKING_SESSION
---------- ---------- ------------------------------ ------------------------------ -------- ---------- ------------------------------ ----------------
         1          5 SYS                            sqlplus@wang (TNS V1-V3)       ACTIVE   USER       SQL*Net message to client
        37        123 SYS                            plsqldev.exe                   INACTIVE USER       SQL*Net message from client
        38        133 SYS                            plsqldev.exe                   INACTIVE USER       SQL*Net message from client
        39        215 SYS                            plsqldev.exe                   INACTIVE USER       SQL*Net message from client
        41         79 HR                             sqlplus.exe                    INACTIVE USER       SQL*Net message from client


為了啟用跟蹤,可執行如下語句:
第三個參數用于等待(默認為TRUE),第四個參數用于綁定變量(默認為FALSE)。
SQL> exec dbms_monitor.session_trace_enable(1,5,TRUE,TRUE);

PL/SQL procedure successfully completed.

SQL> select sid from v$mystat where rownum=1;

       SID
----------
         1

SQL> select count(*) from hr.jobs;

  COUNT(*)
----------
        19


為了關閉跟蹤,可執行如下語句:
SQL> exec dbms_monitor.session_trace_disable(1,5);

PL/SQL procedure successfully completed.


--查詢trace文件位置:
select c.value || '/' || d.instance_name || '_ora_' || a.spid || '.trc' trace
  FROM v$process a, v$session b, v$parameter c, v$instance d
 WHERE a.addr = b.paddr
   AND b.audsid = userenv('sessionid')
   AND c.name = 'user_dump_dest';

執行如下:
SQL> select c.value || '/' || d.instance_name || '_ora_' || a.spid || '.trc' trace
  2    FROM v$process a, v$session b, v$parameter c, v$instance d
  3   WHERE a.addr = b.paddr
  4     AND b.audsid = userenv('sessionid')
  5     AND c.name = 'user_dump_dest';

TRACE
------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/dbdb/DBdb/trace/DBdb_ora_5994.trc

使用vi工具查看,/dbms_monitor.session_trace 按鍵n/N

為了跟蹤當前的會話,可設置SID和SERIAL#為空:
SQL> exec dbms_monitor.session_trace_enable(null,null);

2.基于客戶端標識符設置跟蹤
為了基于表示用戶的客戶端標識符設置跟蹤,可運行如下語句:
SQL> exec dbms_session.set_identifier('bryan id');

或者執行執行如下sql:
select sid,serial#,username,client_identifier from v$session;

為了驗證客戶端標識符,可執行如下語句:
select sid,serial#,username,client_identifier from v$session;

       SID    SERIAL# USERNAME                       CLIENT_IDENTIFIER
---------- ---------- ------------------------------ ----------------------------------------------------------------
         1          5 SYS                            bryan id

現在就可以為這個客戶端標識符設置跟蹤:第二個參數用于等待(默認為TRUE),第三個參數用于綁定變量(默認為FALSE)。
SQL>  exec dbms_monitor.client_id_trace_enable('bryan id',true,true);

PL/SQL procedure successfully completed.

--執行一些操作:
SQL> create table a as select * from dba_objects where rownum <10;

Table created.

SQL> insert into a select * from a;

9 rows created.

SQL> commit;

Commit complete.

SQL> select count(*) from a;

  COUNT(*)
----------
        18

為了禁用這個客戶端標識符跟蹤,可執行如下語句:
SQL> exec dbms_monitor.client_id_trace_disable('bryan id');

PL/SQL procedure successfully completed.

--查詢trace文件位置:
select c.value || '/' || d.instance_name || '_ora_' || a.spid || '.trc' trace
  FROM v$process a, v$session b, v$parameter c, v$instance d
 WHERE a.addr = b.paddr
   AND b.audsid = userenv('sessionid')
   AND c.name = 'user_dump_dest';

SQL> select c.value || '/' || d.instance_name || '_ora_' || a.spid || '.trc' trace
  2    FROM v$process a, v$session b, v$parameter c, v$instance d
  3   WHERE a.addr = b.paddr
  4     AND b.audsid = userenv('sessionid')
  5     AND c.name = 'user_dump_dest';

TRACE
-----------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/dbdb/DBdb/trace/DBdb_ora_5994.trc

3.設置服務名/模塊名/操作名的跟蹤
為了使用操作名,必須有對應的模塊名和服務名。為了使用模塊名,必須有服務名。對全局范圍內針對某個數據庫的服務名、模塊名和操作名的給定組合啟用跟蹤,除非為過程指定了實例名。服務名由用于連接到服務的連接字符串確定。
Oracle 數據庫表示為作為服務的客戶端;也就是說,數據庫代表客戶端執行相應的操作。數據庫可以有一個或多個與其關聯的服務。例如,可以有一個數據庫,該數據庫帶 有兩個用于Web客戶端的不同服務:用于購買書籍的客戶端的book.us.acme.com,以及用于購買軟件的客戶端的 soft.us.acme.com。在該示例中,數據庫名是sales.acme.com,因此服務名并不基于數據庫名。服務名由初始參數文件中的 SERVICE_NAMES參數指定。服務名默認為由數據庫名(DB_NAME參數)和域名(DB_DOMAIN參數)組成的全局數據庫名

--使用如下失去了查詢服務名/模塊名/操作名
select sid,serial#,SERVICE_NAME,MODULE,ACTION,client_identifier from v$session;


為了啟用服務名的跟蹤,可執行如下語句:
SQL> exec dbms_monitor.serv_mod_act_trace_enable(service_name=>'DBdb');
這將跟蹤服務名為DBdb所有會話。

為了啟用服務名、模塊名和操作名組合的跟蹤,可執行如下語句:
SQL> exec dbms_monitor.serv_mod_act_trace_enable(service_name=>'ebk2', module_name=>'salary_update', action_name=>'insert_item');

為了禁用前面代碼中的跟蹤,可使用過程SERV_MOD_ACT_TRACE_DISABLE,如下說是:
SQL> exec dbms_monitor.serv_mod_act_trace_disable(service_name=>'ebk2', module_name=>'salary_update', action_name=>'insert_item');

為了跟蹤整個數據庫或實例,可執行如下語句(不推薦這樣操作):
execute DBMS_MONITOR.DATABASE_TRACE_ENABLE(waits => TRUE, binds => FALSE, instance_name => 'ebk1');
execute DBMS_MONITOR.DATABASE_TRACE_DISABLE(instance_name => 'ebk1');


注意:使用DBMS_MONITOR時,請確保在完成操作時禁用跟蹤;否則,將會跟蹤滿足指定條件的每個會話。

以上是“數據庫中如何使用dbms_monitor跟蹤多個會話,service_name,sid等”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

中方县| 涞水县| 托克托县| 浪卡子县| 郧西县| 桦南县| 西盟| 沅江市| 乌鲁木齐县| 吉林省| 福海县| 青川县| 定边县| 淳安县| 双牌县| 达孜县| 商洛市| 石狮市| 武胜县| 裕民县| 永清县| 泰来县| 垦利县| 亳州市| 盐城市| 泽州县| 乌拉特后旗| 宜都市| 利津县| 长治市| 富宁县| 宣恩县| 河北区| 东乡族自治县| 河北省| 高碑店市| 若尔盖县| 齐河县| 高雄县| 蒙阴县| 易门县|