重庆思庄Oracle、Redhat认证学习论坛

标题: 跟踪ORACLE SQL语句有哪些方式? [打印本页]

作者: 郑全    时间: 2020-3-13 10:30
标题: 跟踪ORACLE SQL语句有哪些方式?
一用户抱怨操作慢,如何跟踪操作的SQL呢?



作者: 郑全    时间: 2020-3-13 10:37
如果要跟踪当前会话的 SQL,我们可以在执行SQL语句之前,
执行以下语句开启跟踪 :

ALTER SESSION SET SQL_TRACE=TRUE;
之后执行的 SQL语句,就会保存到 当前会话对应的TRACE文件

SQL>CONN hr/hr
sql>alter session set sql_trace=true;
SQL> select * from v$diag_info where name='Default Trace File';

   INST_ID
----------
NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
    CON_ID
----------
         1
Default Trace File
D:\ORACLE\diag\rdbms\orcl\orcl\trace\orcl_ora_10796.trc
         0

sql> select * from departments;

去查看      D:\ORACLE\diag\rdbms\orcl\orcl\trace\orcl_ora_10796.trc 文件,是否已经有了,而且里面有你刚才输入的SQL语句.

作者: 郑全    时间: 2020-3-13 10:44
上面是跟踪自己,如何跟踪别人呢 ?

可以使用dbms_monitor来实现:
1.先找到对应的SQL会话的SID,SERIAL#
  
2.执行对应的SID监控  
   EXECUTE dbms_monitor.session_trace_enable (指定的sid,指定的serial#, waits=>TRUE, binds=>TRUE);

3.可以去检查对应的文件
  

作者: 郑全    时间: 2020-3-13 10:55
本帖最后由 郑全 于 2020-3-13 10:57 编辑

通过10046 进行跟踪

1.登录用户,获取SPID
  获取SPID的方式有很多种.
SQL> conn hr/hr
已连接。

SQL> select distinct sid from v$mystat;
       SID
----------
       357
SQL> select spid from v$process p,v$session s where p.addr=s.paddr and s.sid=357;
SPID
------------------------------------------------
9100

2.另外开一个窗口,设置10046
  SQL> conn / as sysdba
  SQL> oradebug setospid 9100;
  SQL> oradebug event 10046 trace name context forever,level 12;

3.查看文件已经生成
  
856425e6af599eadf2.png
登录/注册后可看大图