文档章节

oracle 数据批量导入工具

一贱书生
 一贱书生
发布于 2016/06/16 20:37
字数 1006
阅读 13
收藏 0

#!/bin/ksh---- 如果文件的第一个字符不是#说明使用的是Bsh,如果第一个字符是#则使用Csh,
如果第一个字符#后面跟!/bin/ksh,说明该脚本使用指定的shell 执行,即为/bin目录下的ksh解释执行. ‘#’是注释符,‘!’紧跟着‘#’一起表示在执行这个脚本时
使用其后的“/bin/ksh”解释器执行脚本文件中后面的内容。
同时“/bin/ksh”表示解释器所在的路径

basedir是一般工作目录。

homedir是登录后的目录(终端)。

 

 

 

/bin 二进制可执行命令

/dev 设备特殊文件
/etc 系统管理和配置文件
/etc/rc.d 启动的配置文件和脚本
/home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
/sbin 超级管理命令,这里存放的是系统管理员使用的管理程序
/tmp 公共的临时文件存储点
/root 系统管理员的主目录
/mnt 系统提供这个目录是让用户临时挂载其他的文件系统
/lost+found这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
/proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/var 某些大文件的溢出区,比方说各种服务的日志文件
/usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录,其中包含:

/usr/x11R6 存放x window的目录
/usr/bin 众多的应用程序
/usr/sbin 超级用户的一些管理程序
/usr/doc linux文档
/usr/include linux下开发和编译应用程序所需要的头文件
/usr/lib 常用的动态链接库和软件包的配置文件
/usr/man 帮助文档
/usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin 本地增加的命令
/usr/local/lib 本地增加的库根文件系统

 

#表数据导入

HOMEDIR=$PWD--当前目录

THISNAME=`basename $0`

usage(){
        echo
        echo "Oracle库表数据导入"
        echo "========================="
        echo
        echo "Usage:"
        echo "  $THISNAME -Uuser -Ffilename -Ttblname "
        echo
        echo "Parameter:"
        echo "  -U  用户名/密码@服务名"
        echo "  -F  数据文件名"
        echo "  -T  表名"
        echo
        exit 1
}

# 参数分析
#echo "入参个数[$#]"
if [ $# -ne 3 -a $# -ne 6 ] ;then
    usage ;
fi

while getopts U:P:F:T: OPTION
do
        case $OPTION in
                U)      DBUSR=$OPTARG
                                #echo "用户名:[${DBUSR}]"
                        ;;
                F)      DATAFILE=$OPTARG
                                #echo "导入文件名:[${DATAFILE}]"
                        ;;
                T)      TBLNAME1=$OPTARG
                            TBLNAME=${TBLNAME1};
                                #echo "导入文件名:[${TBLNAME1}]"
                        ;;
                ?)      usage ;;
                *)      usage ;;
        esac
done

rm ${TBLNAME}.ctl
#下载表数据
#    if [ -z "$DBUSR" ] || [-z "$DATAFILE"] || [-z "$TBLNAME1"]; then
#        echo "Usage:load -U 用户名/密码@服务名 -F  数据文件名 -T  表名\n"
#        exit
#    fi
    
    
    
    echo "表[$TBLNAME]开始导入\n"
    SQLFILD="COLUMN_NAME ||decode(sign(DATA_LENGTH-255),1,concat(concat('   char(', DATA_LENGTH), ')')) "
    sqlwhere="table_name=upper('$TBLNAME')"
        
    SQLS="select ${SQLFILD}  from user_tab_columns where ${sqlwhere} order  by table_name,column_id;"
        
    #echo $SQLS
    
    sqlplus -S ${DBUSR} <<-!!! >/dev/null
        set colsep '|'
        set heading off
        set feedback off
        set pagesize 0
        set linesize 3000
        set echo off
        set termout off
        set verify off
        set numwidth 16
        set trimspool on
    
        spool ${TBLNAME}.a
    
        ${SQLS}
        spool off
    !!!
    HEAD="load data infile '${DATAFILE}' append into
 table ${TBLNAME} FIELDS TERMINATED BY \"|\" TRAILING NULLCOLS ("
        cat ${TBLNAME}.a | sed 's/$/,/g' | sed 's/ *//g'|sed -n '1,$p' > ${TBLNAME}.b
        cat ${TBLNAME}.b | sed '$s/,//'|sed -n '1,$p' > ${TBLNAME}.a
       
       #echo "控制文件头:[${HEAD}]"
        echo $HEAD>${TBLNAME}.txt
        echo ")">tail.txt
    cat ${TBLNAME}.txt ${TBLNAME}.a tail.txt>${TBLNAME}.c
cat ${TBLNAME}.c | sed 's/char(/  char(/g'|sed -n '1,$p'>${TBLNAME}.ctl
             
        rm ${TBLNAME}.txt
        rm tail.txt
        rm ${TBLNAME}.a
        rm ${TBLNAME}.b
        rm ${TBLNAME}.c
         
    if [ $? -ne 0 ]; then
        echo "生成表[$TBLNAME]控制文件失败\n"
    fi
    echo "生成表[$TBLNAME]控制文件完成,导入数据,请查看结果\n"

sqlldr ${DBUSR} control=${TBLNAME}.ctl log=${TBLNAME}.log bad=${TBLNAME}.bad  errors=10000
retcode=`echo $?`
case "$retcode" in
0) echo "\nSQL*Loader execution successful" ;;
1) echo "\nSQL*Loader execution exited with EX_FAIL, see logfile" ;;
2) echo "\nSQL*Loader execution exited with EX_WARN, see logfile" ;;
3) echo "\nSQL*Loader execution encountered a fatal error" ;;
*) echo "unknown return code";;
esac
echo "表[$TBLNAME]导入结束\n"

 

© 著作权归作者所有

一贱书生
粉丝 20
博文 724
码字总数 600123
作品 0
私信 提问
Oracle + Mybatis实现批量插入、更新和删除示例代码

前言 Mybatis是web工程开发中非常常用的数据持久化的框架,通过该框架,我们非常容易的进行数据库的增删改查。数据库连接进行事务提交的时候,需要耗费的资源比较多,如果需要插入更新的数据...

一看就喷亏的小猿
2018/11/22
0
0
HybridDB for MySQL计算规格全面加速OLAP场景

计算规格是HybridDB for MySQL最新推出的OLAP增强版本,通过自研的列式存储引擎CStore全面加速分析场景。 主打毫秒级实时数据更新+百亿大表任意维度毫秒级分析,在完备的SQL能力上,同时支持...

问璞
2018/11/14
0
0
Oracle数据转移Mysql中遇到的问题以及解决办法

前几天因工作需要我得将Oracle数据库中几十张表转移到Mysql中,由于之前没有相关经验,上网简单百度后选用Navcat Premium软件工作。 Navcat Premium进行数据转移有三种办法:1、复制表 2、导...

littleant2
2015/07/30
0
0
sqlldr,将数据批量导入Oracle数据库

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wzglwh/article/details/83715629 哈喽,大家好,今天分享一个如何把文本数据快速导入到Oracle数据库的一个方...

王亨
2018/11/04
0
0
oracle 导入数据无法终止

oracle导入数据时,表和数据完全导入,导入命令不提示导入成功,在等待,这样我就无法进行批量导入,请问是什么原因导致的啊?

南北024
2011/08/24
768
4

没有更多内容

加载失败,请刷新页面

加载更多

NIO基于长度域的报文在Netty下的解码

1, 先复习一下粘包/拆包 1.1, 粘包/拆包的含义 TCP是个“流”协议, 并不了解上层业务数据的具体含义, 它会根据TCP缓冲区的实际情况进行包的划分,所以在业务上认为,一个完整的包可能会被TCP...

老菜鸟0217
今天
8
0
从零开始搭建spring-cloud(2) ----ribbon

在微服务架构中,业务都会被拆分成一个独立的服务,服务与服务的通讯是基于http restful的。Spring cloud有两种服务调用方式,一种是ribbon+restTemplate,另一种是feign。 其实我们已经在上...

Vincent-Duan
今天
17
0
get和post的区别?

doGet:路径传参。效率高,安全性差(get的传送数据量有限制,不能大于2Kb) doPOST:实体传参。效率低,安全性好 建议: 1、get方式的安全性较Post方式要差些,包含机密信息的话,建议用Pos...

花无谢
昨天
4
0
当谈论迭代器时,我谈些什么?

当谈论迭代器时,我谈些什么? 花下猫语:之前说过,我对于编程语言跟其它学科的融合非常感兴趣,但我还说漏了一点,就是我对于 Python 跟其它编程语言的对比学习,也很感兴趣。所以,我一直...

豌豆花下猫
昨天
14
0
10天学Python直接做项目,我做了这5件事

初学者如何尽快上手python? 市面上关于如何学python的资料很多,但是讲的都太复杂。 我就是很简单的几句话,从小白到开发工程师,我只做了五件事。 我觉得任何商业计划书如果不能用几句话讲...

Python派森
昨天
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部