数据仓库 Or SOA
SOA、DataStage、Unix、Java EE、Oracle、Data Migration、Data Integration

2007年8月13日

Sql_Trace File Identifier和Sample Block(抽样表扫描)

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。


posted @ 2009-08-25 16:01 羽翼渐丰 阅读(398) | 评论 (0) | 编辑 收藏
 
ETL时先disable外键约束再load数据
Kimball在他的ETL Toolkit一书中,一直强调:对于有外键约束的表,为了提高load的速度,可以先将外键约束disable,加载完成后再enable(当然另外一个原因是进入数据仓库的数据都是规范的,甚至可以考虑不使用外键约束,即违反约束的数据在Transformation部分就应该解决掉,当然这是设计问题了)。ps:另外两个提高load速度的方法分别为使用sql loader和insert、update分离。当时还不是明白这个过程怎么具体实现,今天看《oracle concept》看到下面话终于明白了一些:
Flexibility for Data Loads and Identification of Integrity Violations
You can disable integrity constraints temporarily so that large amounts of data can be loaded without the overhead of constraint checking. When the data load is complete,you can easily enable the integrity constraints, and you can automatically report any new rows that violate integrity constraints to a separate exceptions table.
看来oracle这点上做的比较完善,还可以将违反完整性约束的数据自动记录到一个exception表中。
posted @ 2008-01-15 16:12 羽翼渐丰 阅读(1467) | 评论 (4) | 编辑 收藏
 
删除重复数据的3种方法

今天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要学的东西太多了,什么时候是个头啊。上面的方法不是很难理解,但也还没有完全理解,有机会实际试试。

posted @ 2008-01-08 10:04 羽翼渐丰 阅读(426) | 评论 (0) | 编辑 收藏
 
在load的时候去掉sequential file的header和footer
今天在论坛看到的方法,先记录下来:
方法一:
在sequential file stage中有个属性可以ignore第一行。对于footer,如果footer使用了与正文不同的格式,可以用使用transformer stage和 @INROWNUM stage来将footer去掉。
方法二:
在sequential file的filter option中使用sed -e '$d' -e '1d'来讲header和footer去掉。
方法三:
写个before job subroutine,可以先对这个文件做各种处理,不过我想也是subroutine中调用DSExecute sed -e '$d' -e '1d'。当然Basic中也有专门对sequential file处理的函数。
posted @ 2007-08-13 19:37 羽翼渐丰 阅读(660) | 评论 (0) | 编辑 收藏
 
 
<2007年8月>
日一二三四五六
2930311234
567891011
12131415161718
19202122232425
2627282930311
2345678

 导航

  • BlogJava
  • 首页
  • 发新随笔
  • 发新文章
  • 联系
  • 聚合
  • 管理

 统计

  • 随笔: 18
  • 文章: 2
  • 评论: 8
  • 引用: 0

常用链接

  • 我的随笔
  • 我的评论
  • 我的参与
  • 最新评论

留言簿(3)

  • 给我留言
  • 查看公开留言
  • 查看私人留言

随笔分类

  • DataStage(14) (rss)
  • Java EE(2) (rss)
  • Oracle(1) (rss)
  • SOA (rss)

随笔档案

  • 2009年8月 (1)
  • 2008年1月 (2)
  • 2007年8月 (7)
  • 2007年7月 (6)
  • 2007年6月 (1)
  • 2007年5月 (1)
  • 2006年4月 (1)

搜索

  •  

最新评论

  • 1. re: DataStage中不能删除Job[未登录]
  • 如何执行 DS.CHECKER
  • --Jone
  • 2. re: ETL时先disable外键约束再load数据
  • 我们用到的比较常规的也是disable外键约束,删除index.因为upsert用的就比较少了,至于SQL loader,没怎么用过。
  • --robustyang
  • 3. re: datastage中Orchadmin命令的使用(转) [未登录]
  • 안녕하세요
  • --안녕하세요
  • 4. re: datastage中Orchadmin命令的使用(转) [未登录]
  • SDFSDF
  • --FD
  • 5. re: ETL时先disable外键约束再load数据
  • 您好,关于dagtatage的交流,请加我的MSN:timesheet@live.cn
  • --timesheet

阅读排行榜

  • 1. DataStage中不能删除Job(3750)
  • 2. DataStage官方文档学习笔记(3210)
  • 3. 调用dsjob的shell script(2629)
  • 4. datastage中Orchadmin命令的使用(转) (2261)
  • 5. DataStage中可以执行routine,命令行以控制的地方(1799)

评论排行榜

  • 1. ETL时先disable外键约束再load数据(4)
  • 2. datastage中Orchadmin命令的使用(转) (2)
  • 3. DataStage中不能删除Job(1)
  • 4. DataStage官方文档学习笔记(1)
  • 5. An Eclipse plug-in install problem when language is Chinese(0)

Powered by: 博客园
模板提供:沪江博客
Copyright ©2025 羽翼渐丰