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。