eygle.com   eygle.com
eygle.com eygle
eygle.com  
 

« 有多少病毒可以再来-记大战7y7.us | Blog首页 | 明天赴杭参加"中国网络工程师侠客行"大会 »

DBA Scripts:获得跟踪文件名称的gettrcname.sql
modb.pro

最近有很多朋友问起《深入浅出Oracle》一书中的一个脚本gettrcname.sql。
这个脚本用于获取跟踪文件的名称的,可以用于Linux/Unix环境,已经被包含在书的脚本包中。

其内容如下:
SELECT    d.VALUE
       || '/'
       || LOWER (RTRIM (i.INSTANCE, CHR (0)))
       || '_ora_'
       || p.spid
       || '.trc' trace_file_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
/

在Linux下执行该脚本输入类似:

SQL> @gettrcname

TRACE_FILE_NAME
---------------------------------------------------------------------------------------------------
/opt/oracle/admin/eygle/udump/eygle_ora_8415.trc

如我们执行一个跟踪操作:

SQL> alter session set sql_trace=true;

Session altered.

SQL> select count(*) from dba_users;

COUNT(*)
----------
9

SQL> ! head /opt/oracle/admin/eygle/udump/eygle_ora_8415.trc
/opt/oracle/admin/eygle/udump/eygle_ora_8415.trc
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning option
JServer Release 9.2.0.4.0 - Production
ORACLE_HOME = /opt/oracle/product/9.2.0
System name: Linux
Node name: jumper.hurray.com.cn
Release: 2.4.21-15.EL
Version: #1 Thu Apr 22 00:27:41 EDT 2004
Machine: i686

收录一下blue_prince提供的更简化的脚本:
SELECT    a.VALUE
       || b.symbol
       || c.instance_name
       || '_ora_'
       || d.spid
       || '.trc' trace_file
  FROM (SELECT VALUE
          FROM v$parameter
         WHERE NAME = 'user_dump_dest') a,
       (SELECT SUBSTR (VALUE, -6, 1) symbol
          FROM v$parameter
         WHERE NAME = 'user_dump_dest') b,
       (SELECT instance_name
          FROM v$instance) c,
       (SELECT spid
          FROM v$session s, v$process p, v$mystat m
         WHERE s.paddr = p.addr AND s.SID = m.SID AND m.statistic# = 0) d
/

简单解释一下,供我的读者们参考。

-The End-


历史上的今天...
    >> 2012-05-15文章:
    >> 2011-05-15文章:
    >> 2008-05-15文章:
    >> 2005-05-15文章:
           UT斯达康的困境

By eygle on 2007-05-15 19:25 | Comments (5) | FAQ | 1436 |

5 Comments

我常用一个WINDOWS和UNIX环境通用的脚本,其实就简单改一下:)

select a.value||b.symbol||c.instance_name||'_ora_'||d.spid||'.trc' trace_file
from
(select value from v$parameter where name='user_dump_dest') a,
(select substr(value,-6,1) symbol from v$parameter where name='user_dump_dest') b,
(select instance_name from v$instance) c,
(select spid from v$session s,v$process p,v$mystat m where s.paddr=p.addr
and s.sid=m.sid and m.statistic#=0) d
/

汗,我现在笔记本上都没装Oracle了!

谢谢:)

看eygle的blog,每天都有收获
想请教m.statistic#=0代表什么?

m.statistic#等于多少不重要,重要的是从v$mystat中取一行记录,获得sid.v$mystat中sid都是相同的,所以取一条记录就可以了。

谢谢啦 找到了~嘻嘻


CopyRight © 2004~2020 云和恩墨,成就未来!, All rights reserved.
数据恢复·紧急救援·性能优化 云和恩墨 24x7 热线电话:400-600-8755 业务咨询:010-59007017-7040 or 7037 业务合作: marketing@enmotech.com