Sql_Trace File Identifier

我们设置了sql_trace为true之后,trace file会dump到udump中,但是该目录下也许已经有很多trace file了,或者其他session也设置了sql_trace为true,也在产生trace file。如何能迅速找到你的session产生的trace file呢?我们可以通过如下语句设置Sql_Trace File Identifier:

ALTER  SESSION  SET  TRACEFILE_IDENTIFIER  =   ' my_trace_id ' ;


这样你的session产生的trace file就会以设置的identifier为后缀。

 

SQL >   alter  session  set  tracefile_identifier = ' test_identifier ' ;

Session altered.

SQL
>   alter  session  set  sql_trace = true;

Session altered.

SQL
>   select   *   from  dual;

D
-
X

SQL
>   alter  session  set  sql_trace = false;

Session altered.

然后我们可以看到udump下生成的trace file文件名为:test_ora_4168_test_identifier.trc

Sample Block

抽样表扫描(sample table scan)只读取一个表的部分数据。其实我们只选择表的部分数据的话,可以用rownum来限制也很方便。但是考虑如下情况:
A表和B表join,我只想A表的部分数据去连接B表,此时用sample就方便的多。如果用rownum就需要用一个subquery。

-- 用Sample:
select  A.id,A.name  from  A sample block( 20 ),B 
where  A.id = B.id
-- 用Rownum:
select  A.id,A.name  from  ( select  a.id,a.name  from  a  where  rownum < 100 ) A,B 
where  A.id = B.id


抽样表扫描有两种形式,一种是抽样表中行数的一个百分比,一个是抽样表中块数的一个百分比。注意都是百分比。语法如下:

SELECT   *   FROM  employees SAMPLE ( 1 ); -- 返回行数乘以1%
SELECT   *   FROM  employees SAMPLE BLOCK ( 1 ); -- 返回块数乘以1%


也可以在视图上使用SAMPLE。