Sql_Trace File Identifier

我們?cè)O(shè)置了sql_trace為true之后,trace file會(huì)dump到udump中,但是該目錄下也許已經(jīng)有很多trace file了,或者其他session也設(shè)置了sql_trace為true,也在產(chǎn)生trace file。如何能迅速找到你的session產(chǎn)生的trace file呢?我們可以通過如下語句設(shè)置Sql_Trace File Identifier:

ALTER SESSION SET TRACEFILE_IDENTIFIER = 'my_trace_id';


這樣你的session產(chǎn)生的trace file就會(huì)以設(shè)置的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)只讀取一個(gè)表的部分?jǐn)?shù)據(jù)。其實(shí)我們只選擇表的部分?jǐn)?shù)據(jù)的話,可以用rownum來限制也很方便。但是考慮如下情況:
A表和B表join,我只想A表的部分?jǐn)?shù)據(jù)去連接B表,此時(shí)用sample就方便的多。如果用rownum就需要用一個(gè)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


抽樣表掃描有兩種形式,一種是抽樣表中行數(shù)的一個(gè)百分比,一個(gè)是抽樣表中塊數(shù)的一個(gè)百分比。注意都是百分比。語法如下:

SELECT * FROM employees SAMPLE (1);--返回行數(shù)乘以1%
SELECT * FROM employees SAMPLE BLOCK (1);--返回塊數(shù)乘以1%


也可以在視圖上使用SAMPLE。