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。