Script:列出本会话的细节信息

作者: Maclean Liu , post on December 26th, 2011 , English Version
【本站文章除注明转载外,均为本站原创编译】
转载请注明:文章转载自: Oracle Clinic – Maclean Liu的个人技术博客 [http://www.oracledatabase12g.com/]
本文标题: Script:列出本会话的细节信息
本文永久地址: http://www.oracledatabase12g.com/archives/script-list-session-details.html

以下脚本可以用于列出本会话(local session)的sid、pid、spid、trace 路径等有用信息; 因为不依赖于dbms_session等包体,所以仅需要select_catalog_role的角色即可执行,更为灵活。

 

 

set serveroutput on
set linesize 200 pagesize 1400
set time on
declare
  l_audsid number;
  l_sid    number;
  l_serial number;
  l_module varchar2(128);
  l_pid    number;
  l_spid   number;
  l_trace  varchar2(2000);
  l_user   varchar2(128);
begin
  DBMS_APPLICATION_INFO.SET_MODULE(module_name => 'Maclean Liu OppO',
                                   action_name => 'ACTIVE');
  select audsid, sid, SERIAL#, module,username
    into l_audsid, l_sid, l_serial, l_module,l_user
    from v$session
   where sid = (select distinct sid from v$mystat);
  select pid, spid
    into l_pid, l_spid
    from v$process
   where addr = (select paddr
                   from v$session
                  where sid = l_sid
                    and serial# = l_serial);
  SELECT d.VALUE || '/' || LOWER(RTRIM(i.INSTANCE, CHR(0))) || '_ora_' ||
         p.spid || '.trc'
    into l_trace
    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;

  dbms_output.enable(9999999);
  dbms_output.put_line('===============================================');
  dbms_output.put_line(' USERNAME=' || l_user);
  dbms_output.put_line(' SESSION ID=' || l_sid || '  SERIAL#=' || l_serial);
  dbms_output.put_line(' AUDSID=' || l_audsid || '      MODULE#=' ||
                       l_module);
  dbms_output.put_line(' PID=' || l_pid || '          SPID#=' || l_spid);
  dbms_output.put_line(' TRACE_FILE_LOCATION=' || l_trace);
  dbms_output.put_line('===============================================');
  commit;
end;
/

© 2011, www.oracledatabase12g.com. 版权所有.文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.

相关文章 | Related posts:

  1. Script:计算Oracle Streams进程所占用的内存大小
  2. ORA-4030 PGA Usage Diagnostic Script
  3. Script:List Schema/Table Constraints
  4. Script:when transaction will finish rollback
  5. 脚本:监控数据库中的活跃用户及其运行的SQL
  6. Tuning Large Sorts
  7. 在PL/SQL中获取操作系统环境变量
  8. 简易高负载进程记录脚本
  9. Script:RAC Failover检验脚本loop.sh
  10. Script to Collect DB Upgrade/Migrate Diagnostic Information (dbupgdiag.sql)

3 comments to Script:列出本会话的细节信息

  • wan qisheng

    你好,我认为脚本是否可以写成下面?脚本中的SET_MODULE似不当,脚本可能被其他脚本调用来显示这些信息,所以不赞同修改module info. l_trace获取似乎过于复杂.

    set serveroutput on
    set linesize 200 pagesize 1400
    declare
    l_audsid number;
    l_sid number;
    l_serial number;
    l_module varchar2(128);
    l_pid number;
    l_spid number;
    l_trace varchar2(2000);
    l_user varchar2(128);
    l_paddr raw(8);
    begin
    select audsid,sid,serial#, module,username,paddr
    into l_audsid, l_sid,l_serial, l_module,l_user,l_paddr
    from v$session
    where sid = (select distinct sid from v$mystat);
    select pid, spid
    into l_pid, l_spid
    from v$process
    where addr = l_paddr;

    select d.VALUE || ‘/’ || lower(i.INSTANCE_name) || ‘_ora_’ ||
    l_spid || ‘.trc’
    into l_trace
    from v$parameter d,v$instance i
    where d.NAME = ‘user_dump_dest’;

    dbms_output.enable(9999999);
    dbms_output.put_line(‘===============================================’);
    dbms_output.put_line(‘ USERNAME=’ || l_user);
    dbms_output.put_line(‘ SESSION ID=’ || l_sid || ‘ SERIAL#=’ || l_serial);
    dbms_output.put_line(‘ AUDSID=’ || l_audsid || ‘ MODULE#=’ ||l_module);
    dbms_output.put_line(‘ PID=’ || l_pid || ‘ SPID#=’ || l_spid);
    dbms_output.put_line(‘ TRACE_FILE_LOCATION=’ || l_trace);
    dbms_output.put_line(‘===============================================’);
    commit;
    end;
    /

  • chengwill

    Hello all

    That’s perfect things! Thanks for sharing it!

    There are some output formats has adjusted, please look through it.

    –==
    set serveroutput on
    set linesize 200 pagesize 1400
    declare
    l_audsid number;
    l_sid number;
    l_serial number;
    l_module varchar2(128);
    l_pid number;
    l_spid number;
    l_trace varchar2(2000);
    l_user varchar2(128);
    l_paddr raw(8);
    begin
    select audsid, sid, serial#, module, username, paddr
    into l_audsid, l_sid, l_serial, l_module, l_user, l_paddr
    from v$session
    where sid = (select distinct sid from v$mystat);
    select pid, spid into l_pid, l_spid from v$process where addr = l_paddr;

    select d.VALUE || ‘/’ || lower(i.INSTANCE_name) || ‘_ora_’ || l_spid || ‘.trc’
    into l_trace
    from v$parameter d, v$instance i
    where d.NAME = ‘user_dump_dest’;

    dbms_output.enable(9999999);
    dbms_output.put_line(‘===============================================’);
    dbms_output.put_line(‘ USERNAME=’ || l_user);
    dbms_output.put_line(‘ SESSION ID=’ || l_sid || ‘ SERIAL#=’ || l_serial);
    dbms_output.put_line(‘ AUDSID=’ || l_audsid || ‘ MODULE#=’ ||l_module);
    dbms_output.put_line(‘ PID=’ || l_pid || ‘ SPID#=’ || l_spid);
    dbms_output.put_line(‘ TRACE_FILE_LOCATION=’ || l_trace);
    dbms_output.put_line(‘===============================================’);
    commit;
    end;
    /
    —==

Leave a Reply

  

  

  

You can use these HTML tags

<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>