跟蹤資料庫的命令:event 10046等的設定(ZT)

jolly10發表於2007-12-05
以下是事件的有效trace級別:
 Level 0 tracing被關閉。這相當於設定sql_trace=false。
 Level 1 標準SQL trace資訊(SQL_TRACE=TRUE)。這是預設級別。
 Level 4 SQL trace資訊加繫結變數值。
 Level 8 SQL trace資訊加等待事件資訊。
 Level 12 SQL trace 資訊,等待事件資訊,和繫結變數值。[@more@]
以下是事件的有效trace級別:
 Level 0 tracing被關閉。這相當於設定sql_trace=false。
 Level 1 標準SQL trace資訊(SQL_TRACE=TRUE)。這是預設級別。
 Level 4 SQL trace資訊加繫結變數值。
 Level 8 SQL trace資訊加等待事件資訊。
 Level 12 SQL trace 資訊,等待事件資訊,和繫結變數值。
兩個引數
alter session set timed_statistics = true;
alter session set max_dump_file_size = unlimited;
你能使用trace事件10046來跟蹤使用者會話或Oracle後臺程式。
會話位置:USER_DUMP_DEST
後臺位置:BACKGROUND_DUMP_DEST
跟蹤自己的會話:命令格式
enable
alter session set events '10046 trace name context forever, level 8';
disable
alter session set events '10046 trace name context off';
--如果你有安裝了的DBMS_SUPPORT包,你能使用以下的過程來開啟和關閉跟蹤:
-- To include Wait Event data with SQL trace (default option)
exec sys.dbms_support.start_trace;
-- To include Bind variable values, Wait Event data with SQL trace
exec sys.dbms_support.start_trace(waits => TRUE, binds=> TRUE)
-- Run your SQL script or program to trace wait event information
-- To turn off the tracing:
exec sys.dbms_support.stop_trace;

這個包可以透過執行 dbmssupp.sql 和 prvtsupp.plb 兩個指令碼來建立. 該指令碼位於$ORACLE_HOME/rdbms/admin目錄下

SQL> conn / as sysdba
已連線。
SQL> @?/rdbms/admin/dbmssupp.sql
程式包已建立。

程式包體已建立。
SQL> @?/rdbms/admin/prvtsupp.plb
程式包體已建立。
SQL> SELECT DBMS_SUPPORT.MYSID from DUAL;
MYSID
----------
143

如何跟蹤其他人的會話
如果你不能確信引數TIMED_STATISTICS和MAX_DUMP_FILE_SIZE是否對你想跟蹤的會話設定合適,你應該從V$SESSION得到SID和它的序列號(SERIAL#)。在開啟trace之前,你然後能做以下過程來合適得設定這些引數。
-- Set TIME_STATISTICS to TRUE for SID 1234, Serial# 56789
exec sys.dbms_system.set_bool_param_in_session( -
sid => 1234, -
serial# => 56789, -
parnam => 'TIMED_STATISTICS', -
bval => true);
-- Set MAX_DUMP_FILE_SIZE to 2147483647
-- for SID 1234, Serial# 56789
exec sys.dbms_system.set_int_param_in_session( -
sid => 1234, -
serial# => 56789, -
parnam => 'MAX_DUMP_FILE_SIZE', -
intval => 2147483647);
如果這些過程不能用於你的oracle版本(Oracle版本8.1.5和以下),你能使用ALTER SYSTEM SET 命令來設定這些引數。
接下來的步驟是在其他會話中去開啟trace,然後在你已經收集足夠的trace資訊之後關閉它。你能使用以下方法之一來處理:
方法1  使用DBMS_SUPPORT包過程
 -- Enable 'level 12' trace in session 1234 with serial# 56789
exec dbms_support.start_trace_in_session( -
sid => 1234, -
serial# => 56789, -
waits => true, -
binds => true);
-- Let the session execute SQL script or
-- program for some amount of time
-- To turn off the tracing:
exec dbms_support.stop_trace_in_session( -
sid => 1234, -
serial# => 56789);
2. 方法2 使用dbm_system
- Enable trace at level 8 for session 1234 with serial# 56789
execute dbms_system.set_ev( 1234, 56789, 10046, 8, '');
-- Let the session execute SQL script or
-- program for some amount of time
-- To turn off the tracing:
execute dbms_system.set_ev( 1234, 56789, 10046, 0, '');
3.方法3 使用oradebug工具。你需要知道會話的OS程式ID(SPID)或Oracle程式ID(PID)。你能檢視他們在v$process檢視。假設你知道你想跟蹤的使用者名稱:
select s.username,
p.spid os_process_id,
p.pid oracle_process_id
from v$session s, v$process p
where s.paddr = p.addr
and s.username = upper('&user_name');
現在使用SQL*Plus以sysdba連線併發出以下命令:
alter system set timed_statistics=true;
oradebug setospid 12345;
--12345 是會話的OS程式id
Oradebug unlimit;
Oradebug event 10046 trace name context forever ,level 8;
--讓會話執行SQL指令碼或程式一段時間
--關閉trace
Oradebug event 10046 trace name context off;

在ORACLE10g1版本中,你能使用DBMS_MONITOR包過程來開啟基於SID,服務名,模組,或動作來跟蹤。基於動作的跟蹤使dba能跟蹤一個指定的商業功能。這是一個捕捉:過程要求DBA知道模組和動作名。
 使用DBMS_MONITOR包來啟動對會話1234和serial#56789如下:
execute dbms_monitor.session_trace_enable(1234,56789,true,true);
-- Let the session execute SQL script or
-- program for some amount of time
-- To turn off the tracing:
execute dbms_monitor.session_trace_disable(1234, 56789);
這些過程很像來自DBMS_SUPPORT包。我們推薦你在oracle10g版本1中使用DBMS_MONITOR包。
 使用DBMS_MONITOR包用於服務,模組,和基於動作的跟蹤。
--開啟級別12跟蹤已知服務,模組,和動作
execute dbms_monitor.serv_mod_act_trace_enable(
'APPS1','GLEDGER','DEBIT_ENTRY',TRUE,TRUE,NULL);
--執行sql指令碼或程式一段時間
--關閉tracing
Execute dbms_monitor.serv_mod_act_trace_disable(
'APPS1','GLEDGER','DEBIT_ENTRY');
怎樣找到你的trace檔案
使用者會話的跟蹤檔案將被寫到USER_DUMP_DEST目錄,而後臺程式的跟蹤檔案將被寫到BACKGROUND_DUMP_DEST目錄。跟蹤檔案命名在許多平臺上包含.trc或TRC副檔名。
使用oradebug trace工具,找到你的跟蹤檔案是較容易的,因為專用服務的SPID數字也被寫到trace檔案。另外,你也能得到真正的跟蹤檔名如下:
SQL> oradebug setmypid
Statement processed.
SQL> oradebug event 10046 trace name context forever,level 8
Statement processed.
SQL> oradebug tracefile_name
d:oracleadminor92udumpor92_ora_171.trc
從Oracle8.1.7開始,你能為你會話設定TRACEFILE_IDENTIFIER引數,使用ALTER SESSION命令,如下顯示:
alter session set tracefile_identifier='MyTrace';

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/271283/viewspace-988550/,如需轉載,請註明出處,否則將追究法律責任。

相關文章