Oracle sqlloader自动化导入迁移工具—可批量生成千万控制文件与批处理文件|一键执行(推荐)

很多时候,数据迁移需要同时针对上百个表格进行处理,在有限的停机时间内,如每个表都编写这样的控制文件和对应的调度文件,然后在数据迁移过程,逐个点击调度文件完成数据的导入,将严重影响效率且容易出错。本解决方案探讨了sqlloader一个自动生成控制文件、调度文件并自动完成数据导入的几乎全自动的流程。以便节省迁移周期、提高工作效率。

预览截图

应用介绍

一、设计概述与背景:

在目前SQL Server数据库和Oracle数据库之间进行数据迁移工作,可以使用多种方案,其中采用文本文件作为数据交换的中间介质,具有如下特点:
1、各个主流数据库都支持文本文件的导入、导出功能。
2、使用文本文件进行导入的效率非常高,且文本格式简便,易于加工。

Oracle提供了一个sqlloader命令行程序,能够通过该程序进行文本文件的快速导入,经测试,在直接路径模式下可以达到每秒钟上万条数据的处理能力。但其具有如下缺点:
1、需要针对每个导入表编写一个对应的控制文件。在控制文件里可以设置各种参数和简单的处理逻辑。
2、使用SQLLDR命令自身也存在各种参数,而这些参数又非常繁琐不易理解。


很多时候,数据迁移需要同时针对上百个表格进行处理,在有限的停机时间内,如每个表都编写这样的控制文件和对应的调度文件,然后在数据迁移过程,逐个点击调度文件完成数据的导入,将严重影响效率且容易出错。

故本解决方案探讨了一个自动生成控制文件、调度文件并自动完成数据导入的几乎全自动的流程。以便节省迁移周期、提高工作效率。
解决方案主要思路如下:
1、首先按照预定逻辑从Oracle数据库中取得表结构信息,并依赖这些信息生成控制文件和对应的调度文件。
2、从需要迁移的SQL Server目标端数据库或其它数据库里,按照Oracle表结构,导出数据并形成txt文件,
存放在特定目录下。
3、有一个定时程序检查该目录,如果存在文件,则自动查找对应的调度文件,将该文件处理完毕。
4、存在一个检查日志的工具,能够自动检查导入后的数据信息摘要,找到可供使用的信息。

二、生成SQLLDR控制文件及对应的调度文件

1、在目标数据库按先后顺序执行 CreateTable.sql和Create_SQLLDR.pck

–2、如果需要批量生成控制文件,按照顺序如下执行:
–2.1在PL/SQL中,新建一个SQL窗口里执行如下语句:

begin
  Create_SQLLDR.GenAllTabCtrl();
end;  
/
select msg from t_output order by idx;

–2.2将Select出来的信息拷贝出来,注意需要全部获取。
–2.3在PL/SQL中新建一个命令窗口,将拷贝出来的信息,执行即可生成。

–3、如果需要批量生成运行的BAT文件,按照如下顺序执行:
–3.1在PL/SQL中,新建一个SQL窗口里执行如下语句:

begin
  Create_SQLLDR.GenAllTabRunBat();
end;  
/
select msg from t_output order by idx;

–3.2将Select出来的信息拷贝出来,注意需要全部获取。
–3.3在PL/SQL中新建一个命令窗口,将拷贝出来的信息,执行即可生成。

–4、如果需要修改生成文件里的信息,必须首先指明对应的变量,否则将以默认值生成文件的内容,具体可以设定的变量请查看包里的说明,示例代码如下:

begin
	Create_SQLLDR.Init_DbServer:='ERPDEV';
	Create_SQLLDR.init_DbUsr:='用户名';
	Create_SQLLDR.Init_DbPwd:='数据库密码';
	Create_SQLLDR.GenAllTabRunBat();
end;  
/

–5、相关说明
–影响生成控制文件的属性包括有:

INIT_PATH varchar2(200); --初始化导入路径 INIT_CTRL_DIR varchar2(20);
–控制文件的路径,默认为E:\online INIT_CTRL_EXT varchar2(20); --控制文件的默认扩展名 INIT_TERMINATED varchar2(10);
–数据文件里的字段分割符,默认为|,可以为WHITESPACE(空格)、x’09’(制表符) APPEND_OR_TRUNC varchar2(30); --插入模式还是覆盖模式 可选项:Append、TRUNCATE、INSERT、REPLACE
Init_DateFormat varchar2(50); --数据文件里的日期字段的文本展示格式
Init_TimeStampFormat varchar2(50); --数据文件里的时间戳字段的文本展示格式 Init_RawFun
varchar2(50); --数据文件里Raw类型所对应的函数名称

–影响生成调度文件的属性有:

  INIT_PATH     varchar2(200); --初始化导入路径
  INIT_CMD_DIR  varchar2(20); --BAT运行文件的路径,默认为cmd
  INIT_CMD_EXT  varchar2(20); --BAT运行文件的扩展名,默认为bat
  INIT_DATA_DIR varchar2(20); --数据文件的路径
  INIT_DATA_EXT varchar2(20); --数据文件的扩展名,默认为txt
  Init_log_Dir  varchar2(20); --日志文件的路径,默认为log
  Init_log_Ext  varchar2(20); --日志文件的扩展名,默认为.log
  Init_Bad_Dir  varchar2(20); --坏文件的路径,默认为bad
  Init_Bad_Ext  varchar2(20); --坏文件的扩展名,默认为.bad
  Init_Bak_Dir  varchar2(20); --已经导入完成后的文件路径,为数据文件路径的子目录
  
  Init_DbServer   varchar2(30); --数据库服务名
  init_DbUsr      varchar2(30); --数据库登录用户
  Init_DbPwd      varchar2(30); --数据库登录密码
  Init_Max_Error  varchar2(30); --SQLLDR最大导入错误数
  Init_Other_Para varchar2(300); --SQLLDR的导入其他参数

  Move_Data_flag  boolean; --导入完成是否转移数据文件,默认为true=转移
  Pause_Over_flag boolean; --导入完成后是否暂停   

–包提供了针对单个表生成的过程,分别对应GenOneTabCtrl、GenOneTabRunBat,均需传入指定的表名。

–6、一些调用的示例:
–6.1 库存组的SQLLDR控制文件

begin
    create_sqlldr.GenAllTabCtrl();
end;
/

–6.2 只生成以BD开头的表名的控制文件

begin
    create_sqlldr.GenAllTabCtrl(' and table_name like ''BD%''');
end;
/

–6.3 稍微复杂点的控制文件生成

begin
  Create_SQLLDR.INIT_TERMINATED := ':';       --使用";"作为导入数据的分割符
  Create_SQLLDR.APPEND_OR_TRUNC := 'TRUNCATE'; --使用此控制文件将首先清空表的内容,再进行插入
  Create_SQLLDR.Init_Other_Para := 'Direct=true'; --使用直接路径模式生成对应的控制文件,可以自定义任何符合SQLLDR的参数
  create_sqlldr.GenAllTabCtrl(' and table_name like ''BD%''');
end;
/

三、执行循环扫描指定目录的批处理文件

默认情况下,只要数据文件对应的调度文件存在,使用如下步骤即可完成数据文件的自动导入:
1、解压缩Online.Rar至E:根目录
2、将对应的数据文件存放至E:\Online\data目录下
3、执行E:\Online\main.bat,该批处理将自动找到数据文件对应的调度文件,并执行SQLLDR导入。


四、日志数据的检查

为方便统计和分析导入完成后的日志信息,本解决方案提供了一个日志分析的小应用程序,可以针对指定目录进行日志文件的分析。
如需进行日志统计,只需要执行E:\Online\统计Log.exe,如果默认路径未进行修改,直接敲回车即可,否则需要输入对应路径。
程序将自动抽取日志目录下的所有扩展名为.log的文件,并提取有效信息展示在输出窗口。

点赞(1) 打赏

立即下载

温馨提示: 你需要支付 ¥38.00 元后才可以下载, 支付后会自动弹出百度网盘下载链接和密码,如遇到下载链接失效或技术疑问,可咨询客服!

也可以通过购买VIP会员,享受全年365天全站付费资源无限制下载服务,详情点击下面按钮!

相关下载

评论列表 共有 0 条评论

暂无评论