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

应用介绍

一、设计概述与背景:

在目前SQL Server数据库和Oracle数据库之间进行数据迁移工作,可以使用多种方案,其中采用文本文件作为数据交换的中间介质,具有如下特点:

1、各个主流数据库都支持文本文件的导入、导出功能。

2、使用文本文件进行导入的效率非常高,且文本格式简便,易于加工。

Oracle提供了一个sqlloader命令行程序,能够通过该程序进行文本文件的快速导入,经测试,在直接路径模式下可以达到每秒钟上万条数据的处理能力。但其具有如下缺点:

1、需要针对每个导入表编写一个对应的控制文件。在控制文件里可以设置各种参数和简单的处理逻辑。

2、使用SQLLDR命令自身也存在各种参数,而这些参数又非常繁琐不易理解。

f2024fd58bf48a59b91d5f90289c201c.png

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

故本解决方案探讨了一个自动生成控制文件、调度文件并自动完成数据导入的几乎全自动的流程。以便节省迁移周期、提高工作效率。

解决方案主要思路如下:

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导入。

8458e9cd5681c279711f50168fdef2f0.png

四、日志数据的检查

为方便统计和分析导入完成后的日志信息,本解决方案提供了一个日志分析的小应用程序,可以针对指定目录进行日志文件的分析。

如需进行日志统计,只需要执行E:\Online\统计Log.exe,如果默认路径未进行修改,直接敲回车即可,否则需要输入对应路径。

程序将自动抽取日志目录下的所有扩展名为.log的文件,并提取有效信息展示在输出窗口。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/564189.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STL中“大”、“小”和“相等”的概念

STL 中关联容器内部的元素是排序的。STL 中的许多算法也涉及排序、查找。这些容器和算法都需要对元素进行比较&#xff0c;有的比较是否相等&#xff0c;有的比较元素大小。 在 STL 中&#xff0c;默认情况下&#xff0c;比较大小是通过<运算符进行的&#xff0c;和>运算…

oracle 分割字符成数组,oracle依据分隔符将字符串分割成数组函数

oracle根据分隔符将字符串分割成数组函数--创建表类型create or replace type mytype as table of number;--如果定义成varchar--CREATE OR REPLACE type mytype as table of varchar2(4000);-- 将字符串分割成数组function my_split(piv_str in varchar2, piv_delimiter in va…

C++ vector,STL vector

vector 是顺序容器的一种。vector 是可变长的动态数组&#xff0c;支持随机访问迭代器&#xff0c;所有 STL 算法都能对 vector 进行操作。要使用 vector&#xff0c;需要包含头文件 vector。 在 vector 容器中&#xff0c;根据下标随机访问某个元素的时间是常数&#xff0c;在…

sql查询oracle数据,sql-server – 从SQL Server查询Oracle数据库

我有一个Oracle 11g XE数据库,我想将其转移到SQL Server Express 2005中.起初我以为我只是在Oracle中生成表作为SQL,操纵数据格式,并在SQL Server中运行查询.这适用于小型表,但我有几个表有几十万行,有些表有数百万行,所以这个解决方案不起作用.然后我创建了一个包含以下内容的…

C++ list,STL list

list 是顺序容器的一种。list 是一个双向链表。使用 list 需要包含头文件 list。双向链表的每个元素中都有一个指针指向后一个元素&#xff0c;也有一个指针指向前一个元素。 在 list 容器中&#xff0c;在已经定位到要增删元素的位置的情况下&#xff0c;增删元素能在常数时间…

Oracle010316,安装oracle后登录时出现 ERROR: ORA-01031 insufficient privileges

运行环境&#xff1a;在自己笔记本电脑上安装测试操作系统版本&#xff1a;64位win8.1oracle版本&#xff1a;64位 oracle 11g安装oracle 成功后//以管理员身份登录oracle在cmd里输入命令 sqlplus / as sysdba然后 报错 ERROR: ORA-01031 insufficient privileges解决办法&…

C++ 双向队列

deque 也是顺序容器的一种&#xff0c;同时也是一个可变长数组。要使用 deque&#xff0c;需要包含头文件 deque。所有适用于 vector 的操作都适用于 deque。 deque 和 vector 有很多类似的地方。在 deque 中&#xff0c;随机存取任何元素都能在常数时间内完成。它相比于 vect…

C++ 函数对象

如果一个类将()运算符重载为成员函数&#xff0c;这个类就称为函数对象类&#xff0c;这个类的对象就是函数对象。函数对象是一个对象&#xff0c;但是使用的形式看起来像函数调用&#xff0c;实际上也执行了函数调用&#xff0c;因而得名。 函数对象的例子。 #include <i…

sencha app watch php,我的第一个基于SenchaTouch的WebApp

经过进一周的各种折腾&#xff0c;各种想放弃&#xff0c;各种纠结&#xff0c;最终还是顺利的完成了SenchaTouch的开发&#xff0c;回想起来感觉“甜甜的”&#xff0c;也充分体会到Sencha MVC开发模式的好处&#xff0c;以及SenchaTouch.js和Extjs的强大和牛逼&#xff0c;不…

C++关联容器,STL关联容器

关联容器内部的元素都是排好序的&#xff0c;有以下四种。 set&#xff1a;排好序的集合&#xff0c;不允许有相同元素。multiset&#xff1a;排好序的集合&#xff0c;允许有相同元素。map&#xff1a;每个元素都分为关键字和值两部分&#xff0c;容器中的元素是按关键字排序的…

linux练习 串口跟进程6,linux下串口测试程序

linux下串口测试程序通过简单的参数配置&#xff0c;执行文件串口号波特率#include stdio.h#include stdlib.h#include unistd.h#include sys/types.h#include sys/stat.h#include fcntl.h#include errno.h#include sys/time.h#include time.h#include string.h#include sys/io…

C++ pair类模板

在学习关联容器之前&#xff0c;首先要了解 STL 中的 pair 类模板&#xff0c;因为关联容器的一些成员函数的返回值是 pair 对象&#xff0c;而且 map 和 multimap 容器中的元素都是 pair 对象。pair 的定义如下&#xff1a; template <class_Tl, class_T2> struct pair…

kali linux关闭进程,技术|如何使用 Kali Linux 黑掉 Windows

Kali Linux 派生自 Debian Linux&#xff0c;主要用于渗透测试&#xff0c;拥有超过 300 个的预安装好的渗透测试工具。Metasploit 项目中 Metasploit 框架支持 Kali Linux 平台&#xff0c;Metasploit 是一个用于开发和执行安全利用代码(security exploit)的工具。让我们来使用…

C++ multiset

multiset 是关联容器的一种&#xff0c;是排序好的集合&#xff08;元素已经进行了排序&#xff09;&#xff0c;并且允许有相同的元素。 不能直接修改 multiset 容器中元素的值。因为元素被修改后&#xff0c;容器并不会自动重新调整顺序&#xff0c;于是容器的有序性就会被破…

linux命令中的cp,Linux高级技术:关于cp命令中拷贝所有的写法

Linux高级技术&#xff1a;关于cp命令中拷贝所有的写法发布时间:2007-09-30 21:39:36来源:红联作者:GiftPot今天在编写一个脚本的时候&#xff0c;发现一个比较奇怪的问题&#xff1a;就是在使用cp拷贝当前目录下所有文件到目标目录的时候&#xff0c;源和目标目录大小不同。原…

C++ set

set 是关联容器的一种&#xff0c;是排序好的集合&#xff08;元素已经进行了排序&#xff09;。set 和 multiset 类似&#xff0c;它和 multiset 的差别在于 set 中不能有重复的元素。multiset 的成员函数 set 中也都有。 不能直接修改 set 容器中元素的值。因为元素被修改后…

linux内核实现ipsec,IP XFRM配置示例:利用linux kernel自带的IPSec实现,手动配置IPSec...

1、拓扑192.168.18.101 <> 192.168.18.1022、配置192.168.18.101ip xfrm state add src 192.168.18.101 dst 192.168.18.102 proto esp spi 0x00000301 mode tunnel auth md5 0x96358c90783bbfa3d7b196ceabe0536b enc des3_ede 0xf6ddb555acfd9d77b03ea3843f2653255afe8e…

linux 内核 82540网卡,Linux网卡as4.2 编译安装及配置准备

Linux网卡as4.2 编译安装及配置准备[日期&#xff1a;2008-03-28]来源&#xff1a;Linux公社作者&#xff1a;Linux整理[字体&#xff1a;大 中 小]确定make gcc kernel-devel包必须安装,没安装的话需要手动安装查看是否安装方法rpm -aq|gccrpm -aq|makerpm -aq|kernel-devel解…

C++ 容器适配器

STL 中的容器适配器有 stack、queue、priority_queue 三种。它们都是在顺序容器的基础上实现的&#xff0c;屏蔽了顺序容器的一部分功能&#xff0c;突出或增加了另外一些功能。 容器适配器都有以下三个成员函数&#xff1a; push&#xff1a;添加一个元素。top&#xff1a;返…

linux管理进程和计划任务,Linux进程和计划任务管理

本章结构#查看进程#控制进程#at一次性任务设置#crontab周期性任务设置程序和进程的关系#程序保存在硬盘、光盘等介质中的可执行代码和数据静态保存的代码#进程在cpu及内存中运行的程序代码动态执行的代码父、子进程&#xff1a;每个进程可以创建一个或多个进程查看进程ps#ps命令…