sql_trace 的新用法

今天一个同事问我,创建视图后,怎么知道这个视图所依赖哪些表。
大家肯定都知道是dba_dependencies,all_dependencies,user_dependencies这三张表了,至于它们之间的关系,我就不再多说了。
那么如果大家不知道的话,我们能用什么办法来找到答案呢?-------我想sql_trace 可能帮助我们来解决这样的问题。

C:\Users\jykj>sqlplus scott/scott

SQL*Plus: Release 11.2.0.1.0 Production on 星期三 11月 19 19:05:14 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


连接到:
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> alter session set sql_trace=true;

会话已更改。

SQL> create view t_view_1 as select * from emp;

视图已创建。

SQL> alter session set sql_trace=false;

会话已更改。

SQL>
这样我们就完成了sql_trace 。
我想大家都会找到刚刚的trace文件,如果不知道的话,可以这样,比较的方便,当然可以根据当前的session 的id 找到Pid ,然后再去trace目录里面找到trace 文件。

SQL> select value from v$diag_info where name='Default Trace File'
  2  ;

VALUE
--------------------------------------------------------------------------------
d:\app\jykj\diag\rdbms\orcl\orcl\trace\orcl_ora_14952.trc

找到文件后,可以tkprof 一下,注意,不要sys=no,直接的,不要带参数。
我们知道,创建视图是一个DDL的操作,肯定是要修改一些的系统表,那么肯定有insert 的操作,那我们直接在trace文件里面查找insert  。
当然,我找到了一个类似这样的一张表,insert into dependency$(d_obj#,d_timestamp,order#,p_obj#,p_timestamp, property, d_attrs)values (:1,:2,:3,:4,:5,:6, :7);
查询一下,果然是我们要找的表。查询后

SQL> select object_name,object_id from dba_objects where object_name='T_VIEW_1';

OBJECT_NAME           OBJECT_ID
-------------------- ----------
T_VIEW_1                  79533

SQL>  select p_obj# from  dependency$ where D_OBJ#='79533';

    P_OBJ#
----------
     73196

SQL> select object_name,object_id from dba_objects where object_id='73196';

OBJECT_NAME           OBJECT_ID
-------------------- ----------
EMP                       73196

终于找到了创建视图的依赖表。然后我家大致的想到了可能有这样的一张表dba_dep%,如果,不能够知道这张表,也没用关系,我们可以这样
select * from dictionary where table_name like '%DEPE%'
这样就完成了我所要做的事情了。

我想从这个小事情上面,反映出的是,我们在想了解Oracle在做某些操作的时候,用到了哪些表,就可以用sql_trace 来完成。它不仅仅是用来查看sql 的执行计划和耗费的。
而且我们可以灵活的运用现有的知识,来探索,解决一些我们不知道的事情。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29497510/viewspace-1339401/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/29497510/viewspace-1339401/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值