[转]如何得到Oracle跟踪文件的文件名

转自:如何得到跟踪文件的文件名

跟踪文件非常有助于我们分析问题,跟踪文件的文件名可以用以下查询得到:

SELECT 
  d.VALUE
  || '/'
  || LOWER (RTRIM (i.INSTANCE, CHR (0)))
  || '_ora_'
  || p.spid
  || '.trc' trace_name
FROM 
(
  SELECT 
    p.spid
  FROM 
    v$mystat m, v$session s, v$process p
  WHERE 
    m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr
) p,
(
  SELECT 
    t.INSTANCE
  FROM 
    v$thread t, v$parameter v
  WHERE 
    v.NAME = 'thread'
  AND 
    ( v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE) )
) i,
(
  SELECT 
    VALUE
  FROM v$parameter
   WHERE NAME = 'user_dump_dest'
) d; 
TRACE_NAME
-----------------------------------------------------------------
/u01/app/oracle/diag/rdbms/logdw/logdw/trace/logdw_ora_8535.trc

但是每次都要默写如此常常的SQL语句非常痛苦,我们可以对其包装成函数,然后让public都可以执行:

create or replace function get_trace_name return varchar2 as
	v_result varchar2(300); 
begin
  SELECT 
    d.VALUE
    || '/'
    || LOWER (RTRIM (i.INSTANCE, CHR (0)))
    || '_ora_'
    || p.spid
    || '.trc' trace_name
  INTO v_result
  FROM 
  (
    SELECT 
      p.spid
    FROM 
      v$mystat m, v$session s, v$process p
    WHERE 
      m.statistic# = 1 AND s.SID = m.SID AND p.addr = s.paddr
  ) p,
  (
    SELECT 
      t.INSTANCE
    FROM 
      v$thread t, v$parameter v
    WHERE 
      v.NAME = 'thread'
    AND 
      ( v.VALUE = 0 OR t.thread# = TO_NUMBER (v.VALUE) )
  ) i,
  (
    SELECT 
      VALUE
    FROM v$parameter
     WHERE NAME = 'user_dump_dest'
  ) d; 
  return v_result; 
end get_trace_name;

建立公共同义词:

sys$logdw@logdw SQL> create or replace public synonym get_trace_name for get_trace_name; 
sys$logdw@logdw SQL> grant execute on get_trace_name to public;

现在普通用户也可以使用了:

sys$logdw@logdw SQL> connect test/test
Connected.
test$logdw@logdw SQL> show user; 
USER is "TEST"
test$logdw@logdw SQL> select get_trace_name() from dual; 

GET_TRACE_NAME()
------------------------------------------------------------------
/u01/app/oracle/diag/rdbms/logdw/logdw/trace/logdw_ora_8757.trc
原文地址:https://www.cnblogs.com/killkill/p/1764299.html