Oracle可以使用ALTER SESSION来设置一个底层的跟踪,只要启用该跟踪,Oracle将所有的SQL和应用程序使用的顶层的
PL/SQL调用记录到服务器上的跟踪文件中(udump/*.trc)。该跟踪文件不仅有SQL和PL/SQL调用,也将包括定时的信息、
等待事件的信息,执行的逻辑I/O和物理I/O的数量、CPU和挂钟时间、已经处理的行数、带有行记数的查询计划等,但是.trc
文件很难阅读,我们可以使用TKPROF转换其为易读的格式。
首先、为了起用跟踪并使得Oracle生成有效的.trc文件我们需要做的第一件事就是在session级别上开启SQL_TRACE:
PL/SQL调用记录到服务器上的跟踪文件中(udump/*.trc)。该跟踪文件不仅有SQL和PL/SQL调用,也将包括定时的信息、
等待事件的信息,执行的逻辑I/O和物理I/O的数量、CPU和挂钟时间、已经处理的行数、带有行记数的查询计划等,但是.trc
文件很难阅读,我们可以使用TKPROF转换其为易读的格式。
首先、为了起用跟踪并使得Oracle生成有效的.trc文件我们需要做的第一件事就是在session级别上开启SQL_TRACE:
sql 代码
-
alter session set timed_statistics=true;
-
alter session set events '10046 trace name context forever, level 12';
上面的SQL语句1主要是设置定时系统,而第2句主要是开启跟踪:需要注意的一点是level <N>,说明如下:
1 启用标准的SQL_TRACE工具,等价于SQL_TRACE=true
4 启用SQL_TRACE并捕捉跟踪文件中的绑定变量
8 启用SQL_TRACE并捕捉跟踪文件的等待事件
12 启用标准的SQL_TRACE并捕捉绑定变量和等待事件
如果您需要确认某个数据库中有多少.trc文件的话,这里有一个查询可以帮助您(Oracle9i)上调试通过:
1 启用标准的SQL_TRACE工具,等价于SQL_TRACE=true
4 启用SQL_TRACE并捕捉跟踪文件中的绑定变量
8 启用SQL_TRACE并捕捉跟踪文件的等待事件
12 启用标准的SQL_TRACE并捕捉绑定变量和等待事件
如果您需要确认某个数据库中有多少.trc文件的话,这里有一个查询可以帮助您(Oracle9i)上调试通过:
sql 代码
-
select rtrim(c.value,'/') || '/' || d.instance_name || '_ora_' || ltrim(to_char(a.spid)) || '.trc' from v$process a,v$session b,v$parameter c,v$instance d
where a.addr = b.paddr and b.audsid= sys_context('userenv','sessionid')
and c.name ='user_dump_dest';
测试结果大致为:
absolute_path\dbname\udump/dbname_ora_384.trc
absolute_path\dbname\udump/dbname_ora_2000.trc
下面我们就使用TKPROF来转化dbname_ora_2000.trc为可读的格式(因为本人在win系统上做业,因此转换其为
.txt格式):
>tkprof dbname_ora_2000.trc traceview.txt
执行完此转化后会有一个traceview.txt文件在当前目录下生成(其内容我们结合具体的跟踪语句说明):
这里我们随便执行一条查询语句:
absolute_path\dbname\udump/dbname_ora_384.trc
absolute_path\dbname\udump/dbname_ora_2000.trc
下面我们就使用TKPROF来转化dbname_ora_2000.trc为可读的格式(因为本人在win系统上做业,因此转换其为
.txt格式):
>tkprof dbname_ora_2000.trc traceview.txt
执行完此转化后会有一个traceview.txt文件在当前目录下生成(其内容我们结合具体的跟踪语句说明):
这里我们随便执行一条查询语句:
sql 代码
-
select count(*) from test_trace_an;
-
exit;--退出sql plus
假设上面的dbname_ora_2000.trc就是目前的跟踪结果:则使用TKPROF转化后的结果文件中,我们可以发现:
select count(*) from test_trace_an
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.00 0.00 0 3 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 0.00 0.00 0 3 0 1
call count cpu elapsed disk query current rows
------- ------ -------- ---------- ---------- ---------- ---------- ----------
Parse 1 0.00 0.00 0 0 0 0
Execute 1 0.00 0.00 0 0 0 0
Fetch 1 0.00 0.00 0 3 0 1
------- ------ -------- ---------- ---------- ---------- ---------- ----------
total 3 0.00 0.00 0 3 0 1
Misses in library cache during parse: 0
Optimizer goal: CHOOSE
Parsing user id: SYS
Optimizer goal: CHOOSE
Parsing user id: SYS
Rows Row Source Operation
------- ---------------------------------------------------
1 SORT AGGREGATE
1 TABLE ACCESS FULL OBJ#(30327)
------- ---------------------------------------------------
1 SORT AGGREGATE
1 TABLE ACCESS FULL OBJ#(30327)
Elapsed times include waiting on following events:
Event waited on Times Max. Wait Total Waited
---------------------------------------- Waited ---------- ------------
SQL*Net message to client 2 0.00 0.00
SQL*Net message from client 2 0.00 0.00
至于该.txt文件该怎么阅读,以及从中可以看到什么信息,并将如何处理它所提供的数据…………待续