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:
这样你的session产生的trace file就会以设置的identifier为后缀。
然后我们可以看到udump下生成的trace file文件名为:test_ora_4168_test_identifier.trc Sample Block 抽样表扫描(sample table scan)只读取一个表的部分数据。其实我们只选择表的部分数据的话,可以用rownum来限制也很方便。但是考虑如下情况: A表和B表join,我只想A表的部分数据去连接B表,此时用sample就方便的多。如果用rownum就需要用一个subquery。
抽样表扫描有两种形式,一种是抽样表中行数的一个百分比,一个是抽样表中块数的一个百分比。注意都是百分比。语法如下:
也可以在视图上使用SAMPLE。
今天google分析函数row_number()的时候发现的,觉得很好: 表demo是重复拷贝自dba_objects,有88万左右,不重复的是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秒,适合大数据量的情况,产生更少回滚量; 学到了分析函数row_number(),对于object_id和rowid也有了一些认识。oracle要学的东西太多了,什么时候是个头啊。上面的方法不是很难理解,但也还没有完全理解,有机会实际试试。