使用spool和sqlldr导表的shell脚本_yanxiazhiqiu的博客-程序员宅基地

技术标签: spool sqlldr  

脚本可以一次将一张表导出到另一个数据库中的同一张表中,表名作为shell脚本的输入参数,在使用前需配置两个数据库的相关参数。不过spool对大数据的表执行速度较慢。

#!/bin/sh

if [[ $# -ne 1 ]]
then
 echo "usage: $0 TABLENAME>/dev/null"
 exit
fi

DBSCHEMA=from_user 
DBPWD=pwd_of_from_user
DB=from_db

TODBSCHEMA=to_user
TODBPWD=pwd_of_to_user
TODB=to_db

SQLPATH=$HOME/dbdata/sql/
DATAPATH=$HOME/dbdata/data/
CTLPATH=$HOME/dbdata/ctl/
LOGPATH=$HOME/dbdata/log/
BADPATH=$HOME/dbdata/bad/

TABLENAME=$1
SQLNAME=$TABLENAME.sql
TXTNAME=$TABLENAME.txt
CTLNAME=$TABLENAME.ctl
LOGNAME=$TABLENAME.log
BADNAME=$TABLENAME.bad


if [ -f $SQLPATH/$SQLNAME ]
then
rm -f $SQLPATH/$SQLNAME
fi

if [ -f $DATAPATH/$TXTNAME ]
then
rm -f $DATAPATH/$TXTNAME
fi

if [ -f $CTLPATH/$CTLNAME ]
then
rm -f $CTLPATH/$CTLNAME
fi



sqlplus -s $DBSCHEMA/[email protected]$DB <<EOF
SET HEADING OFF  
SET ECHO OFF  
SET FEEDBACK OFF  
SET PAGES 0  
SET LINESIZE 32766
SET LONG 1999999
SET TRIMOUT ON
SET TRIMSPOOL ON
SET NEWPAGE NONE
SET SQLBLANKLINES OFF
SET TRIMS ON
SET TIMING OFF
SET SERVEROUTPUT ON
SET VERIFY OFF
COLUMN SQL_TEXT FORMAT A32766 WORD WRAPPED
SPOOL $SQLPATH/$SQLNAME

SELECT 'SELECT ''"''||' ||
       REPLACE(REPLACE(wmsys.wm_concat(DECODE(DATA_TYPE,'DATE','TO_CHAR('||COLUMN_NAME||'~''YYYY/MM/DD HH24:MI:SS'''||')',COLUMN_NAME)), ',', '||''","''||' || chr(10)),'~',',') ||
       '||''"'' SQL_TEXT FROM $TABLENAME;' SQL_TEXT
  FROM (SELECT *
          FROM DBA_TAB_COLUMNS 
         WHERE TABLE_NAME = '$TABLENAME'
           AND OWNER = '$DBSCHEMA'
         order by column_id);

spool off

spool $CTLPATH/$CTLNAME

select 'load data' || chr(10) || 'infile ' ||
       '''$DATAPATH/$TXTNAME''' || chr(10) ||
       'append into table ' || '$TABLENAME' || chr(10) ||
       'fields terminated by '',''' || chr(10) || 'trailing nullcols' || chr(10) || 'optionally enclosed by ''"'''||
       chr(10) || '(' || chr(10) ||
       REPLACE(wmsys.wm_concat(decode(DATA_TYPE,
                              'DATE',
                              COLUMN_NAME || ' ' || DATA_TYPE || ' ' ||
                              '''YYYY/MM/DD HH24:MI:SS''',
                              COLUMN_NAME)),',',','||chr(10)) || ')'
  from (select *
          from dba_tab_columns a
         where a.TABLE_NAME = '$TABLENAME'
           and a.OWNER = '$DBSCHEMA'
         order by a.COLUMN_ID);

spool off

spool $DATAPATH/$TXTNAME
@$SQLPATH/$SQLNAME
spool off

exit;
EOF

sqlldr userid=$TODBSCHEMA/[email protected]$TODB control=$CTLPATH/$CTLNAME log=$LOGPATH/$LOGNAME bad=$BADPATH/$BADNAME


版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/yanxiazhiqiu/article/details/48662459

智能推荐

[windbg] windbg 常用调试命令总结_池塘码农的博客-程序员宅基地_windbg 查看寄存器

1.显示所有线程 ~ // 显示所有线程 ~*2.显示堆栈 kb // 显示当前堆栈 ~0 k // 显示第0个线程的堆栈,主线程

插入排序_creat2012的博客-程序员宅基地

排序的知识博大精深,不是一蹴而就的。

g++和gcc编译工具编译文件区别_qq_28219531的博客-程序员宅基地

三个测试文件加一个Makefile文件mian.c#include &lt;iostream&gt;#include "test.h" int main(int argc, char *argv[]){ int fd; process(fd); processcplus(fd); }test.c#include &lt;stdi

[ACM - 动规]数塔_同学少年的博客-程序员宅基地

Problem Description在讲述DP算法的时候,一个经典的例子就是数塔问题,它是这样描述的:有如下所示的数塔,要求从顶层走到底层,若每一步只能走到相邻的结点,则经过的结点的数字之和最大是多少?已经告诉你了,这是个DP的题目,你能AC吗?Input输入数据首先包括一个整数C,表示测试实例的个数,每个测试实例的第一行是一个整数N(1 Ou

oracle修改基础表结构文件,oracle数据库基础实战笔记_面小团的博客-程序员宅基地

本文包含以下内容:1)Centos oracle 11g express安装与使用;2)oracle最基本的增insert into、删delete、改update set、查select、Merge、distinct、drop操作等。3)视图作用;4)Shell脚本批量执行.sql文件;1.Linux oracle 安装——CentOS6.5安装Oracle Express EditionOra...

apm 固件发送mavlink信息给上位机_彩云的笔记的博客-程序员宅基地

固件代码mavlink_msg_position_target_local_ned_send(MAVLINK_COMM_0,//chanAP_HAL::millis(), // time boot msMAV_FRAME_LOCAL_NED,0,1, // x in metres2, // y in metres3, // z in metres NED frame4, // vx in m/s5, // vy in m/s6666, // vz in m/s N

随便推点

大数据应用之Windows平台Hbase客户端Eclipse开发环境搭建_数据饕餮的博客-程序员宅基地

大数据应用之Windows平台Hbase客户端Eclipse环境搭建-Java版作者:张子良版权所有,转载请注明出处引子:  大数据的场景下,NoSql型数据库的优势不言而喻,但是涉及NoSQL数据库的实际动手开发的东西多是Linux平台,大多语焉不详,至于Windows平台介绍的东西就更少了,而且大多无法运行。本文就Windows平台基于Eclipse搭建Hbase环境客户端开发

使用 scikit-learn 实现多类别及多标签分类算法_weixin_30598225的博客-程序员宅基地

多标签分类格式对于多标签分类问题而言,一个样本可能同时属于多个类别。如一个新闻属于多个话题。这种情况下,因变量yy需要使用一个矩阵表达出来。而多类别分类指的是y的可能取值大于2,但是y所属类别是唯一的。它与多标签分类问题是有严格区别的。所有的scikit-learn分类器都是默认支持多类别分类的。但是,当你需要自己修改算法的时候,也是可以使用scikit-learn实现多类别分类的前期数据...

Java进阶之路(三) 计算机网络(OSI七层协议、TCP/IP、拥塞控制、HTTPS)_CSTopDown的博客-程序员宅基地_osi拥塞控制

计算机网络网络层次划分分为TCP/IP4层模型划分和OSI7层模型,对应关系如下OSI七层协议、TCP/IP[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aBjNcuyX-1618216037651)(./images/七层模型.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hcyhbtCz-1618216037653)(./images/七层四层五层模型.jpg)][外链图片转存失败,源站可能有防盗链机制,建议将图片保存

第四章LINUX命令行入门基础_weixin_33941350的博客-程序员宅基地

第四章LINUX命令行入门基础4.1 Linux命令行概述4.1.1 Linux命令行的作用与意义快速、批量、自动化地管理系统。还可实现智能化、可视化管理(需要开发人员配合开发管理界面)4.1.2 Linux命令行介绍4.1.3 Linux命令行的开启与退出退出:快捷键Ctrl+d /exit/logout4.1.4 Linux命令行提示符介绍(1)#号,是超级用户root登陆后的...

大顶堆建立,插入,删除_G1940103663的博客-程序员宅基地

头文件和结构体:#include&lt;stdio.h&gt;#include&lt;malloc.h&gt;#include&lt;stdlib.h&gt;#define Maxsize 10000typedef struct HNode { int* data; int size; int max;}Heap;初始化:Heap* CreatHeap(int max){ Heap* h; h = (Heap*)malloc(sizeof(Heap)); h-&gt;data

内置对象session 与httpSession对象是同一个东西么?_其实我们都没错的博客-程序员宅基地

1.内置对象session1.概念session对象指的是客户端与服务器端的一次会话,从客户端连接到服务器端的一个Web应用程序的开始,直到客户端与服务器端断开为止。2.session对象的IDWeb服务器会给每一个用户自动创建一个session对象,为每一个对象分配一个唯一标识的String类型的sessionID,这个ID用于区分其他用户。这样每一个用户都对应着一个session对象,不同用户的session对象互不相同。session对象调用getID()方法就可以获取当前session对象的