如何在Oracle中的所有会话中使用单个跟踪文件?

时间:2014-01-07 08:24:03

标签: sql oracle oracle10g trace

在Oracle中,当我更改会话参数并设置tracefile_identifier时,trace正常工作,如下所示。

alter session set max_dump_file_size = unlimited;
alter session set timed_statistics=true;
alter session set statistics_level=ALL;
alter session set tracefile_identifier=mytracefile;
alter session set sql_trace=true;
alter session set events '10046 trace name context forever, level 12';

但我想为特定时间段内的数据库中的所有连接生成单个跟踪文件。我尝试了相同的命令,但通过改变系统而不是会话。我无法更改tracefile_identifier。我得到了ORA-02096: specified initialization parameter is not modifiable with this。请告诉我如何实现这一目标。

2 个答案:

答案 0 :(得分:2)

简而言之,这是不可能的。

Oracle跟踪文件是基于每个进程编写的。因此,任何后台进程(PMON,SMON等)都将编写自己的跟踪文件,任何用户的服务器进程也是如此。

如果您运行共享服务器,您将在同一文件中获得多个会话的跟踪输出,因为这些会话共享特定的服务器进程。

但是,要获得写入单个跟踪文件的所有内容是不可能的。

如果您想在问题中添加更多信息,就业务需求而言,以及您实际想要实现的目标,我可以提供更好的答案或替代解决方案。

答案 1 :(得分:2)

trcsess工具非常酷,可能就是你所追求的。我使用它来跟踪使用连接池的应用程序 - 您不知道哪个会话将处于活动状态。

Oracle 10g引入了trcsess实用程序,该实用程序允许识别来自多个跟踪文件的跟踪信息并将其合并到一个跟踪文件中。

trcsess [output=<output file name >]  [session=<session ID>] [clientid=<clientid>]
        [service=<service name>] [action=<action name>] [module=<module name>] <trace file names>

output=<output file name> output destination default being standard output.
session=<session Id> session to be traced.
Session id is a combination of session Index & session serial number e.g. 8.13.
clientid=<clientid> clientid to be traced.
service=<service name> service to be traced.
action=<action name> action to be traced.
module=<module name> module to be traced.
<trace_file_names> Space separated list of trace files with wild card '*' supported.