Oracle SQL 跟踪其他会话
Oracle SQL Tracing on other sessions
我正在研究Oracle数据库。我有个问题。
那是在其他会话上跟踪 SQL。
这是我的作品:
SYS>
-- Get sid and serial of session which I'm gonna analyze
select sid, serial# from v$session where username = 'DEV';
-- Activate SQL Trace on the session(sid:69 / serial:72)
begin
dbms_monitor.session_trace_enable(69, 72);
end;
/
-- Check sql_trace is set 'ENABLED'
select sql_trace from v$session where username = 'DEV';
DEV>
-- SQL to be traced
select 'a' from dual connect by level <= 10;
SYS>
-- Deactivate SQL Trace
begin
dbms_monitor.session_trace_disable(69, 72);
end;
/
-- .trc file location check
select p.tracefile from v$process p, v$session s where p.addr = s.paddr and s.sid = userenv('sid');
在那项工作之后,我试图找到 *.trc 文件,但它不存在。
然而,当我尝试跟踪调用 SQL Trace 本身的会话时,我可以找到 trc 文件(工作正常)。
无法跟踪其他会话的原因可能是什么?
谢谢
这是在另一个会话中启用跟踪的方法。
SQL> conn test/test;
Connected.
SYS 用户:
SQL> conn / as sysdba
SQL> select sid, serial# from v$session where username='TEST';
SID SERIAL#
------- -------------
28 27
SQL> exec sys.dbms_system.set_sql_trace_in_session(28, 27, TRUE);
测试用户:
SQL> select table_name from tabs;
TABLE_NAME
------------------------------
TABLES_PKEYS
SQL> select * from tables_pkeys;
SCHEMA_NAME TABLE_NAME COLUMN_NAME PKEY_INDEX
-------------------- -------------------- -------------------- ----------
DEMO T1 ID 1
SQL>
SYS 用户:
SQL> select p.tracefile from v$process p, v$session s where p.addr=s.paddr and s.sid='28';
TRACEFILE
--------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4122.trc
SQL>exit
[oracle@testsrv trace]$ cat orcl_ora_4122.trc
Trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4122.trc
...
*** 2016-09-18 21:04:09.013
*** SESSION ID:(28.27) 2016-09-18 21:04:09.013
*** CLIENT ID:() 2016-09-18 21:04:09.013
*** SERVICE NAME:(SYS$USERS) 2016-09-18 21:04:09.013
*** MODULE NAME:(SQL*Plus) 2016-09-18 21:04:09.013
*** ACTION NAME:() 2016-09-18 21:04:09.013
CLOSE #139829905643504:c=1000,e=327,dep=0,type=0,tim=1474212849012528
=====================
PARSING IN CURSOR #139829906751864 len=202 dep=1 uid=0 oct=3 lid=0 tim=1474212849015309 hv=3819099649 ad='67af7630' sqlid='3nkd3g3ju5ph1'
您可以使用 TKPROF,一种 Oracle 提供的工具来查看漂亮且格式化的跟踪内容。
我正在研究Oracle数据库。我有个问题。 那是在其他会话上跟踪 SQL。
这是我的作品:
SYS>
-- Get sid and serial of session which I'm gonna analyze
select sid, serial# from v$session where username = 'DEV';
-- Activate SQL Trace on the session(sid:69 / serial:72)
begin
dbms_monitor.session_trace_enable(69, 72);
end;
/
-- Check sql_trace is set 'ENABLED'
select sql_trace from v$session where username = 'DEV';
DEV>
-- SQL to be traced
select 'a' from dual connect by level <= 10;
SYS>
-- Deactivate SQL Trace
begin
dbms_monitor.session_trace_disable(69, 72);
end;
/
-- .trc file location check
select p.tracefile from v$process p, v$session s where p.addr = s.paddr and s.sid = userenv('sid');
在那项工作之后,我试图找到 *.trc 文件,但它不存在。 然而,当我尝试跟踪调用 SQL Trace 本身的会话时,我可以找到 trc 文件(工作正常)。
无法跟踪其他会话的原因可能是什么?
谢谢
这是在另一个会话中启用跟踪的方法。
SQL> conn test/test;
Connected.
SYS 用户:
SQL> conn / as sysdba
SQL> select sid, serial# from v$session where username='TEST';
SID SERIAL#
------- -------------
28 27
SQL> exec sys.dbms_system.set_sql_trace_in_session(28, 27, TRUE);
测试用户:
SQL> select table_name from tabs;
TABLE_NAME
------------------------------
TABLES_PKEYS
SQL> select * from tables_pkeys;
SCHEMA_NAME TABLE_NAME COLUMN_NAME PKEY_INDEX
-------------------- -------------------- -------------------- ----------
DEMO T1 ID 1
SQL>
SYS 用户:
SQL> select p.tracefile from v$process p, v$session s where p.addr=s.paddr and s.sid='28';
TRACEFILE
--------------------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4122.trc
SQL>exit
[oracle@testsrv trace]$ cat orcl_ora_4122.trc
Trace file /u01/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_4122.trc
...
*** 2016-09-18 21:04:09.013
*** SESSION ID:(28.27) 2016-09-18 21:04:09.013
*** CLIENT ID:() 2016-09-18 21:04:09.013
*** SERVICE NAME:(SYS$USERS) 2016-09-18 21:04:09.013
*** MODULE NAME:(SQL*Plus) 2016-09-18 21:04:09.013
*** ACTION NAME:() 2016-09-18 21:04:09.013
CLOSE #139829905643504:c=1000,e=327,dep=0,type=0,tim=1474212849012528
=====================
PARSING IN CURSOR #139829906751864 len=202 dep=1 uid=0 oct=3 lid=0 tim=1474212849015309 hv=3819099649 ad='67af7630' sqlid='3nkd3g3ju5ph1'
您可以使用 TKPROF,一种 Oracle 提供的工具来查看漂亮且格式化的跟踪内容。