Sql_Trace File Identifier 我們設(shè)置了sql_trace為true之后,trace file會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:
這樣你的session產(chǎn)生的trace file就會以設(shè)置的identifier為后綴。
然后我們可以看到udump下生成的trace file文件名為:test_ora_4168_test_identifier.trc Sample Block 抽樣表掃描(sample table scan)只讀取一個表的部分數(shù)據(jù)。其實我們只選擇表的部分數(shù)據(jù)的話,可以用rownum來限制也很方便。但是考慮如下情況: A表和B表join,我只想A表的部分數(shù)據(jù)去連接B表,此時用sample就方便的多。如果用rownum就需要用一個subquery。
抽樣表掃描有兩種形式,一種是抽樣表中行數(shù)的一個百分比,一個是抽樣表中塊數(shù)的一個百分比。注意都是百分比。語法如下:
也可以在視圖上使用SAMPLE。
今天google分析函數(shù)row_number()的時候發(fā)現(xiàn)的,覺得很好: 表demo是重復(fù)拷貝自dba_objects,有88萬左右,不重復(fù)的是27323,沒有索引 方法一:delete from demo a where a.rowid <> (select max(rowid) from demo b where b.object_id=a.object_id); 耗時:幾個小時以上 方法二: delete from demo where rowid in (select rid from (select rowid rid,row_number() over(partition by object_id order by rowid) rn from demo) where rn <> 1 ); 耗時:30秒 方法三: create table demo2 as select object_id,owner... from (select demo.*,row_number() over(partition by object_id order by rowid) rn from demo) where rn = 1; truncate table demo; insert into demo select * from demo2; drop table demo2; 共耗時: 10秒,適合大數(shù)據(jù)量的情況,產(chǎn)生更少回滾量; 學到了分析函數(shù)row_number(),對于object_id和rowid也有了一些認識。oracle要學的東西太多了,什么時候是個頭啊。上面的方法不是很難理解,但也還沒有完全理解,有機會實際試試。