批量生成控制文件,用sqlldr自动导入多个表的数据

生成控制文件

准备工作:

SQL>set colsep ‘ ‘;    //-域输出分隔符
SQL>set echo off;     //显示start启动的脚本中的每个sql命令,缺省为on
SQL> set echo on //设置运行命令是是否显示语句
SQL> set feedback on; //设置显示“已选择XX行”
SQL>set feedback off;  //回显本次sql命令处理的记录条数,缺省为on
SQL>set heading off;   //输出域标题,缺省为on
SQL>set pagesize 0;   //输出每页行数,缺省为24,为了避免分页,可设定为0。
SQL>set linesize 80;   //输出一行字符个数,缺省为80
SQL>set numwidth 12;  //输出number类型域长度,缺省为10
SQL>set termout off;   //显示脚本中的命令的执行结果,缺省为on
SQL>set trimout on;   //去除标准输出每行的拖尾空格,缺省为off
SQL>set trimspool on;  //去除重定向(spool)输出每行的拖尾空格,缺省为off
SQL>set serveroutput on; //设置允许显示输出类似dbms_output


1、spool control.all;

select ctl_name from (

select ‘spool ctl/‘||lower(table_name)||‘.ctl‘ ctl_name,table_name, 0 cid from user_tables a

union all

select ‘select ‘‘LOAD DATA TRUNCATE into table ‘||table_name,table_name,0.1 cid from user_tables a

union all

select ‘FIELDS TERMINATED BY  x‘||chr(39)||‘03‘||chr(39)||‘ OPTIONALLY ENCLOSED BY ‘||chr(39)||‘"‘||chr(39),table_name, 0.2 cid from user_tables a

union all

select ‘TRAILING NULLCOLS‘,table_name,0.3 cid from user_tables a

union all

select ‘(‘ ,table_name,0.4 cid from user_tables a

union all

select b.tab_column_ora,a.table_name,0.5 cid from user_tables a,tab_column_union b where a.table_name=b.TABLE_NAME

union all

select ‘) ‘‘ from dual;‘ ,table_name,0.6 cid from user_tables a

union all

select ‘spool off‘,table_name,0.7 cid from user_tables a

) aa order by table_name,cid;

spool off;

-----------生成一个新表tab_column_union,tab_column_ora字段对时间类型的col字段进行处理,用gy_etl_download存储过程处理。cid 伪列控制输出顺序。

-----------chr(39)是‘的意思,两个之间的部分有啥显示啥。

-----------------------------------------

备注:生成tab_column_union的存储过程 。

备注:

CREATE OR REPLACE PROCEDURE GY_ETL_DOWNLOAD as

n_count integer;

v_column_ora varchar2(4000);

begin

update tab_column_union set tab_column_db2=null;

for c1 in (select column_name,a.table_name,column_id,data_type from user_tables a,user_tab_columns b where a.table_name=b.TABLE_NAME order by a.table_name,column_id)

loop

n_count:=0;

v_column_ora:=null;

select count(*) into n_count from tab_column_ex where table_name=c1.table_name and tab_column=c1.column_name;

if n_count> 0 then

select ‘to_date‘||‘(‘||c1.column_name||‘,‘||chr(39)||‘yyyy-mm-dd-hh24.mi.ss‘||chr(39)||‘)‘ into v_column_ora from dual;

update tab_column_union set tab_column_ora=tab_column_ora||v_column_ora||‘,‘ where table_name=c1.table_name;

else

if c1.data_type=‘DATE‘ then

select c1.column_name||‘"to_date(:‘||c1.column_name||‘,‘||chr(39)||‘yyyymmdd‘||chr(39)||‘)"‘ into v_column_ora from dual;

update tab_column_union set tab_column_ora=tab_column_ora||v_column_ora||‘,‘ where table_name=c1.table_name;

else

update tab_column_union set tab_column_ora=tab_column_ora||c1.column_name||‘,‘ where table_name=c1.table_name;

end if;

end if;

END LOOP;

update tab_column_union t set tab_column_db2=substr(t.tab_column_db2,1,length(t.tab_column_db2)-1);

update tab_column_union t set tab_column_ora=substr(t.tab_column_ora,1,length(t.tab_column_ora)-1);

COMMIT;

end GY_ETL_DOWNLOAD;

----------------------------------------

2、在sqlplus里运行control.all脚本

SQL>@control.all

批量生成控制文件

3、执行命令脚本,脚本保存为impdata.sh

#!/bin/sh

#获取当前目录

currDir=`dirname $0`

cd $currDir

currDir=`pwd`

#数据库连接串

dbConnStr=joey/jy_123orcl11g

#数据文件保存目录

dataDir=$currDir/data

#控制文件

controlFile=$currDir/ctl/

#设置环境变量

#ORACLE_HOME=/opt/oracle/product/10201

#PATH=$PATH:$ORACLE_HOME/bin

#日志根目录

baseLogDir=$currDir/log

#插入失败数据的记录的目录

badLogDir=$baseLogDir/bad

#执行日志目录  (导入日志)

impLogDir=$baseLogDir/imp

#命令执行日志目录 (错误记录)

cmdLogDir=$baseLogDir/cmd

#创建日志目录

mkdir -p $badLogDir 2> /dev/null

mkdir -p $impLogDir 2> /dev/null

mkdir -p $cmdLogDir 2> /dev/null

for dataFile in `ls ${dataDir}/*.del`

do

logDateSuffix=`date "+%Y%m%d%H%M%S"`

sqlldr $dbConnStr \

silent=all errors=10000 \

data=$dataFile \

log=$impLogDir/`basename ${dataFile}`.$logDateSuffix.imp \

bad=$badLogDir/`basename ${dataFile}`.$logDateSuffix.bad \

control= $controlFile/`basename ${dataFile}`.ctl \

> /dev/null \

2>> $cmdLogDir/`basename ${dataFile}`.${logDateSuffix}.log

done

运行脚本  $./impdata.sh

时间: 2024-10-09 22:23:44

批量生成控制文件,用sqlldr自动导入多个表的数据的相关文章

sqlldr批量生成控制文件

参考文档:http://askjoey.blog.51cto.com/7594056/1671852 环境:oracle11g,redhat linux 1.建立基础表 create table TAB_COLUMN_UNION(  TAB_COLUMN_ORA    VARCHAR2(4000),  TAB_COLUMN_SOURCE VARCHAR2(4000),  TABLE_NAME        VARCHAR2(500))tablespace SDATA  pctfree 10  i

轻量级ORM 利用T4模板 批量生成多文件 实体和业务逻辑 代码

FluentData,它是一个轻量级框架,关注性能和易用性. 下载地址:FlunenData.Model 利用T4模板,[MultipleOutputHelper.ttinclude]批量生成多文件 基本语法: 1. 初始化:获取MultipleOutputHelper.ttinclude文件模板 在T4模板导入 //导入MultipleOutputHelper.ttinclude文件 路径 <#@include file="$(SolutionDir)\ORM.Model\T4\Mult

MapReduce生成HFile文件,再使用BulkLoad导入HBase中(完全分布式运行)

声明: 若要转载, 请标明出处. 前提: 在对于大量的数据导入到HBase中, 如果一条一条进行插入, 则太耗时了, 所以可以先采用MapReduce生成HFile文件, 然后使用BulkLoad导入HBase中. 引用: 一.这种方式有很多的优点: 1. 如果我们一次性入库hbase巨量数据,处理速度慢不说,还特别占用Region资源, 一个比较高效便捷的方法就是使用 "Bulk Loading"方法,即HBase提供的HFileOutputFormat类. 2. 它是利用hbase

图解SSIS监视文件夹并自动导入数据

原文:图解SSIS监视文件夹并自动导入数据 演示案例:让系统自动监视文件夹,并把文件夹下面的excel文件导入到sql中,之后清空目录.这个过程以往都需要写程序来实现或者定时执行,现在可以用ssis来订制任务完成. 在阅读本文之前,你先要学会如何用ssis来批量导入数据,可以参考我先前的blog文章,这里我们用相同的数据交换背景来演示.http://blog.csdn.net/jinjazz/archive/2008/07/25/2710169.aspx 1.建立测试环境,目录为F:/excel

php学习之道:php中soap的使用实例以及生成WSDL文件,提供自动生成WSDL文件的类库——SoapDiscovery.class.php类

1. web service普及: Webservice soap wsdl区别之个人见解 Web Service实现业务诉求:  Web Service是真正"办事"的那个,提供一种办事接口的统称. WSDL提供"能办的事的文档说明":  对要提供的服务的一种描述格式.我想帮你的忙,但是我要告诉你我都能干什么,以及干这些事情需要的参数类型. SOAP提供"请求"的规范:  向服务接口传递请求的格式,包括方法和参数等.你想让人家办事,总得告诉人家

新建的Android里没有R文件和设置自动导入包

今天又遇到一些小问题,记录一下,以后方便回忆吧. 之前还好好的工程,一溜烟的功夫出来个报错“can not reslove symbol  'R'”, 而且在app/build/generated/source目录下并没有r文件夹, 其实,不用理报错,只有运行一下,自动就会生R文件 还有补充的另一个问题, 刚开始导入包导不进去,谁知道,可直接设置自动导入包,就在这~~,在File了的stetings里

asp.net asp.net application 升级到 asp.net web 解决找不到控件 批量生成.designer文件

颇费周折后,其实很简单,只需要生成designer文件后,重新保存所有页面即可.就是懒得写.懒真的是一种病,手上不能懒,脑子里更不能懒,否则就是给自己挖坑,仔细认真,注意细节!!!! PS:注意修改path变量为自己需要生成的web项目路径 需要注意的是,CodeBehind的路径是绝对路径 参考链接https://oomake.com/question/4935 对于VS2015 ...这里有一个用于从WebSite项目切换到适用于我的Web应用程序项目的VB示例.没有其他解决方案为我工作,这

T4批量生成多文件

http://www.cnblogs.com/zengxiangzhan/p/3250105.html Manager.ttinclude <#@ assembly name="System.Core"#> <#@ assembly name="System.Data.Linq"#> <#@ assembly name="EnvDTE"#> <#@ assembly name="System.X

AFS Tool Excel 宏编写的工具 批量生成Excel 文件

AFS Tool Excel 宏编写的工具,文章最后附上工具下载. 主要实现的功能是在Excel中通过宏的编写, 按照一个模板,把大量的数据分类并生成多个Excel文件 AFS Tool中一共有3个Sheet: Info.Data.Cover Sheet: Info 中主要是用户操作界面及软件说明,只有一个生成文件的按钮, 点击的时候,会提示保存生成文件的路径,文件名按一定的格式生成. Sheet: Data中主要是存储要处理的数据 Sheet: Cover中主要是生成文件的模板,生成的Exce