原创于2006年12月30日,2009年10月15日迁移至此。
本文主要是针对关于数据增量抽取的模拟实现——原理 进行实现的
实现的环境:
业务@R_502_6274@:Oracle9i
数据仓库@R_502_6274@:sqlServer2000
1、前提sqlServer服务器已经安装Oracle驱动,不再详细累述
2、创建链接@R_502_6274@
打开企业管理器->安全性-链接服务器-右键新建
通常情况当链接@R_502_6274@创建好,进行打开的时候都会弹出一下错误窗口:
一般情况下运行C:Program FilesCommon FilesSystemOle DBmtxoci81_win2k.reg该文件后,重启sqlServer@R_502_6274@,再重新连接;
如果仍有问题,重启操作系统,即可OK。
3、创建Oracle环境脚本
-- 创建 Oracle 业务系统表结构 CREATE TABLE SourceTable -- 创建测试数据 DECLARE -- Local variables here BEGIN -- Test statements here FOR i IN 1..365 LOOP INSERT INTO SourceTable END LOOP END; |
4、创建sqlServer数据仓库环境脚本
-- 创建系统参数表内 CREATE TABLE ExtractTaskList ( GO -- 创建数据仓库目标表 CREATE TABLE TargetTable ( GO |
5、创建sqlServer数据仓库ETL脚本
脚本考虑到现实的问题,已经做了许多取舍,不再追求全部动态实现,旨在给定一个模板,在有限的范围内可以更改每次抽取的周期,每次时间的跨度,抽取的字段,表等等;数据字典表仅仅利用了其中的四个字段:任务名称,当前抽取时间、结束时间、抽取状态。
CREATE PROCEDURE p_org_Extract BEGIN DECLARE @BeginDate DATETIME, SELECT @Num = COUNT(TaskName) FROM ExtractTaskList IF @Num != 1 -- 获取列表中的当前任务的时间戳和状态 -- 如果上次执行未成功,这样取值效率会高一些,则从数据仓库表中直接读取 -- 如果数据仓库无数据,则从业务系统中直接读取,也可以设置一个默认的初始化时间 -- 如果仍无数据,则表示无数据可抽取,退出执行 -- 更新当前开始时间和结束时间 -- 如果 @sql 执行失败,同样记录状态和时间 -- 记录每次运行的时间运行情况,可提供相应参考 SELECT @BeginDate = DATEADD(DD,@BeginDate) END RETURN FAIL: -- 记录错误 UPDATE ExtractTaskList RETURN 0 END |
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。