Shell+sqlldr载数卸数

1、先下载外围系统dat文件到本地服务器

#!/bin/bash
sftp_Host="10.4.1.2"
sftp_userName="gqgl"
sftp_passWord="gqgl"
sftp_port=22
#远端机器文件路径
sftpRemotePath="/myhome"
#下载到本地文件路径
sftpLocalPath="/batchfile"
sftpLoadPath=$sftpRemotePath
fileFilter=$1
cd $sftpLocalPath
# SFTP非交互式操作
sftp_download()
{
echo "下载文件"
    expect <<- EOF
    set timeout 5
    spawn sftp  -P $sftp_port $sftp_userName@$sftp_Host

    expect { 
        "(yes/no)?" {send "yes\r"; expect_continue }
        "*assword:" {send "$sftp_passWord\r"}
    }
    expect "sftp>"
    send "cd $sftpLoadPath \r"
    expect "sftp>"
    set timeout -1
   
    send "get C_CBS_BIFM06_$fileFilter_ADD.dat \r"
    expect "sftp>"
#有多少文件就下载多少个    
    send "get C_CBS_DPFM02_$fileFilter_ADD.ctl \r"
    expect "sftp>"
    send "bye\r"
EOF
}
sftp_download
if [ 1$? -ne 10 ]; then    #返回值不是0,存储过程运行失败  
   echo 1
  exit 1                                                      
fi                                                                                                                    
echo 0                                             
exit 0

2、将外围系统dat文件放进数据库

#!/bin/bash
echo 'start imp table'
id=$1
datenow=$2
tablename=$3
#往后加一天
newdate=$(date -d "$2 1 days" "+%Y%m%d")
echo ${newdate}
#
#ctl文件路径
ctl_path=/dbhome/oracle/etl/
#数据库服务器
db=10.2.4.77
#服务名
servername=gqxt
#端口号
port=1521
#数据库用户名
orauser=equity
#数据库用户名
orapasswd=equity
#昨天
#datenow=$(date -d "1 days ago" +%Y%m%d)

while true
do
uppname=$(echo $tablename | tr 'a-z' 'A-Z')
cd $ctl_path
if [ -d "/${datenow}/" ];then
echo "文件夹已存在"
else 
mkdir ${datenow}
fi
cd $ctl_path/$datenow
if [ -d "/ctl" ];then
echo "文件夹已存在"
else 
mkdir ctl
fi
if [ -d "/logs" ];then
echo "文件夹已存在"
else 
mkdir logs
fi
cd $ctl_path
cp $tablename.ctl $ctl_path/$datenow/ctl

sqlplus -s ${orauser}/${orapasswd}@${db}:${port}/${servername} <<!
update EQUITY_ETL_TAB_LOGS set status='1',begtime=to_char(sysdate,'yyyymmdd hh24:mi:ss'),endtime=null where logid=${id};

exit;
!

sqlldr userid=equity/equity@10.2.4.77:1522/nmoadb control=$ctl_path/ctl/${tablename}.ctl log=$ctl_path/logs/$datenow/${tablename}.log

err_num=$(cat $ctl_path/logs/$datenow/${tablename}.log | grep -A4 ${uppname}:| sed -n '3p' | awk '{print $1}') 
suc_num=$(cat $ctl_path/logs/$datenow/${tablename}.log | grep -A4 ${uppname}:| sed -n '2p' | awk '{print $1}')

echo $err_num
echo $suc_num

if  [ $err_num -eq 0 ];then 
sqlplus -s ${orauser}/${orapasswd}@${db}:${port}/${servername} <<!
update EQUITY_ETL_TAB_LOGS set error_log='$ctl_path/logs/$datenow/${tablename}.log',suc_num='${suc_num}',err_num='${err_num}',status='0',endtime=to_char(sysdate,'yyyymmdd hh24:mi:ss') where logid=${id};
exit;
!
  break;
  else
sqlplus -s ${orauser}/${orapasswd}@${db}:${port}/${servername} <<!
update EQUITY_ETL_TAB_LOGS set error_log='$ctl_path/logs/$datenow/${tablename}.log',suc_num='${suc_num}',err_num='${err_num}',status='2',endtime=to_char(sysdate,'yyyymmdd hh24:mi:ss') where logid=${id};
exit;
!
 sleep 600
fi
done


3、本地表信息导出dat文件

echo "table name is ------$1"
export FILE_PATH='/hqtTest/'
export FILE_DATE=$(date +%Y%m%d)
export FILE_TIME=$(date +%H%M%S)
pwd
if [ -d "${FILE_PATH}${FILE_DATE}" ];then
echo ${FILE_PATH}${FILE_DATE}"  is created"
else 
mkdir ${FILE_PATH}${FILE_DATE}
echo $FILE_PATH$FILE_DATE
fi
export S=C_GQGL_
export LOGO=_
export ALL=_ALL
export DATA_FILE=$FILE_PATH$FILE_DATE/$S$1$LOGO${FILE_DATE}$ALL.dat
export CTL_FILE=$FILE_PATH$FILE_DATE/$S$1$LOGO${FILE_DATE}$ALL.ctl
export ORACLE_BASE=/oracle
export ORACLE_HOME=$ORACLE_BASE/product/11.2.0/dbhome_1
export ORACLE_GW=$ORACLE_BASE/product/gw11.2.0/dbhome_1
export ORACLE_SID=gqxt
export ORACLE_TERM=xterm
export ORA_NLS33=$ORACLE_HOME/nls/data
export TNS_ADMIN=$ORACLE_HOME/network/admin
export ORACLE_OWNER=oracle
export NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS"
export PATH=/usr/sbin:$PATH
export PATH=$ORACLE_HOME/bin:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib64:/usr/lib64:/usr/local/lib64:/usr/X11R6/lib64/
export CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib
export LC_ALL=zh_CN.UTF_8
export NLS_LANG='SIMPLIFIED CHINESE_CHINA.ZHS16GBK'
export equity_shinfo_sql="select a.id||'$|$'||a.bus_id from equity_shinfo a where rownum <10;"
#本行社基本信息表 EQUITY_BANK_INF
export EQUITY_BANK_INF_SQL="select ID||'$|$'||BUS_ID||'$|$'||NAME||'$|$'||TYPE||'$|$'||CARD_TYPE||'$|$'||CARD_NO||'$|$'||LEGEL||'$|$'||ADDRESS||'$|$'||ESTAB_DATE||'$|$'||STOCK||'$|$'||YEAR||'$|$'||INVEST_STOCK||'$|$'||PERFER_STOCK||'$|$'||BUSINESS_TERM||'$|$'||STOCK_JE_LAST_YEAR||'$|$'||TOTAL_ASSETS||'$|$'||CAPITAL_QUAR1||'$|$'||CAPITAL_QUAR2||'$|$'||CAPITAL_QUAR3||'$|$'||CAPITAL_QUAR4||'$|$'||SUPERVISE_GRATE||'$|$'||REMARK||'$|$'||REMARK1||'$|$'||REMARK2||'$|$'||REMARK3||'$|$'||REMARK4||'$|$'||IS_EFFECT||'$|$'||WF_STATUS||'$|$'||WF_DATE||'$|$'||CREATE_ORG||'$|$'||CREATE_USER||'$|$'||CAPITAL||'$|$'||IS_HIGH_RISK||'$|$'||IS_LISTED||'$|$'||CURRENT_PRICE from EQUITY_BANK_INF where WF_STATUS='2';"
export EQUITY_BANK_INF_COUNT_SQL="select count(*)from EQUITY_BANK_INF  where WF_STATUS='2';"
#黑名单信息表 EQUITY_BLACK_LIST_INF
export EQUITY_BLACK_LIST_INF_SQL="select ID||'$|$'||BUS_ID||'$|$'||NAME||'$|$'||CUST_TYPE||'$|$'||CARD_TYPE||'$|$'||CARD_NO||'$|$'||IS_EFFECT||'$|$'||ADDR||'$|$'||BELONG_ORG||'$|$'||BLACK_RSON||'$|$'||OTHER_RSON||'$|$'||CHOOSE_RSON||'$|$'||DETIAL_RSON||'$|$'||REMARK||'$|$'||REMARK1||'$|$'||REMARK2||'$|$'||REMARK3||'$|$'||REMARK4||'$|$'||CREATE_ORG||'$|$'||CREATE_USER||'$|$'||DATA_FROM||'$|$'||OLD_NAME||'$|$'||WF_STATUS from EQUITY_BLACK_LIST_INF where WF_STATUS='2';"
export EQUITY_BLACK_LIST_INF_COUNT_SQL="select count(*)from EQUITY_BLACK_LIST_INF where WF_STATUS='2';"
if [ ${1} = "EQUITY_BANK_INF" ]; then
    export EXCUTE_SQL=${EQUITY_BANK_INF_SQL}
    export EXCUTE_COUNT_SQL=${EQUITY_BANK_INF_COUNT_SQL}
elif [ ${1} = "EQUITY_BLACK_LIST_INF" ]; then
    export EXCUTE_SQL=${EQUITY_BLACK_LIST_INF_SQL}
    export EXCUTE_COUNT_SQL=${EQUITY_BLACK_LIST_INF_COUNT_SQL}
else
    echo "未匹配到对应的表"
fi
sqlplus equity/equity <<EOF
set echo off
set feedback off
set pagesize 0
set linesize 4000
set trimspool on
set term off
set termout on
set heading off
spool $DATA_FILE
$EXCUTE_SQL
spool off                  
exit;
EOF
sed -i '/^SQL/d' $DATA_FILE
sed -i '/^$/d' $DATA_FILE
export COUNT_RESULT=`
sqlplus -S equity/equity <<COUNT
set echo off
set term off
set heading off
${EXCUTE_COUNT_SQL}
exit;
COUNT
`
echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>
        <CTLFILES>
                <CTLFILE>
                        <FILE_NAME>${S}${1}${LOGO}${ADD}.dat</ FILE_NAME>
                        <TABLE_NAME>${1}</TABLE_NAME>
                        <SYS_NAME>股权管理系统</SYS_NAME>
                        <DATA_DT>${FILE_DATE}</DATA_DT>
                        <LOAD_TIME>${FILE_TIME}</LOAD_TIME>
                        <ROW_COUNT>${COUNT_RESULT}</ROW_COUNT>
                        <LIST_SEP>&|&</LIST_SEP>
                </CTLFILE>
        </CTLFILES>" > $CTL_FILE
echo 0
exit 0

4、本地表信息文件传到其他服务器

#!/bin/bash
 
#SFTP配置信息
#用户名
export USER='ftpcs'
#密码
export PASSWORD='123'
#待上传文件根目录
export FILE_PATH='/hqtTest/'
export FILE_DATE=$(date +%Y%m%d)
export SRCDIR=${FILE_PATH}${FILE_DATE}
#FTP目录
DESDIR='/u01/oradata/data/export'
#IP
IP='10.2.2.12'
#端口
PORT='22'

#获取文件
cd ${SRCDIR} ;
echo $SRCDIR
#目录下的所有文件
#FILES=`ls` 
#查找目录下,指定后缀的文件集合,支持通配符
FILES=`find ${SRCDIR} -name '*.*'`
 
#for FILE in ${FILES}
#do
#    echo ${FILE}
#    #发送文件 (关键部分)
#    lftp -u ${USER},${PASSWORD} sftp://${IP}:${PORT} <<EOF
#    cd ${DESDIR}/
#    lcd ${SRCDIR}
#    mput ${FILE}
#    by
#EOF

ftp -v -n ${IP} <<EOF
    user ${USER} ${PASSWORD}
    binary
    hash
    cd ${DESDIR}/
    lcd ${SRCDIR}
    prompt
    mput *
    bye
EOF
done


 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Seal^_^【送书活动第一期】——《Vue.js+Node.js全栈开发实战(第2版)》

Seal^_^【送书活动第一期】——《Vue.jsNode.js全栈开发实战&#xff08;第2版&#xff09;》 一、参与方式二、本期推荐图书2.1 前 言2.2 作者简介2.3 图书简介2.4 本书特色2.5 编辑推荐2.6 书籍目录 三、正版购买 一、参与方式 1、关注博主的账号。 2、点赞、收藏、评论博主的…

C++练级之路——类和对象(下)

目录 1、构造函数初始化列表 2、类型转换 3、explicit关键字 4、static成员 5、友元 友元函数 友元类 6、内部类 7、匿名对象 8、拷贝构造时的一些编译器优化 差不多结束了&#xff0c;类和对象&#xff01; 1、构造函数初始化列表 初始化列表&#xff1a;以一个冒号…

了解MySQL的复制

了解MySQL的复制 MySQL的复制允许数据从一个MySQL数据库服务器&#xff08;主服务器&#xff09;复制到一个或多个MySQL数据库服务器&#xff08;从服务器&#xff09;。复制在数据库的扩展性和数据备份方面扮演着重要角色&#xff0c;特别是在大型企业和高可用性的应用场景中…

时序预测 | Transformer时间序列预测 Matlab代码

文章目录 效果一览文章概述源码设计参考资料 效果一览 文章概述 1.时序预测 | Transformer时间序列预测 Matlab代码 2.单变量时间序列预测&#xff1b; 3.多指标评价&#xff0c;评价指标包括&#xff1a;R2、MAE、MBE等&#xff0c;代码质量极高&#xff1b; 4.excel数据&…

Git使用总结(不断更新中)

branch 本地分支操作 删除本地分支 git branch -d <local-branch-name>远端分支操作 从远端分支创建本地分支 git checkout -b <local-branch-name> origin/<remote-branch-name>git ignore 如果工程的代码文件中有不希望上传到远端的文件&#xff0c;…

Java数据类型以及范围

数据类型&#xff1a; 取值范围&#xff1a; 取值&#xff1a;

将 Notepad++ 添加到右键菜单

目录 方式一&#xff1a;添加注册表&#xff08;手动&#xff09; 方式二&#xff1a;添加注册表&#xff08;一键添加&#xff09; 有时安装了notepad后&#xff0c;在txt文件上右键&#xff0c;在弹出的菜单栏中没有【通过 Notepad 打开】&#xff0c;如下&#xff1a; 这…

c语言基础总结

1. c语言概述 c语言是计算机编程语言的一种&#xff0c;编程语言用于人和机器交流。 1.1 c语言特点 简洁 ​ c语言的语法简单&#xff0c;语句清晰明了&#xff0c;使得程序易于阅读和理解 高效 ​ c语言的执行效率高&#xff0c;可以用于开发需要高性能的应用程序 可移…

[C++][算法基础]求约数(试除法)

给定 n 个正整数 &#xff0c;对于每个整数 &#xff0c;请你按照从小到大的顺序输出它的所有约数。 输入格式 第一行包含整数 n。 接下来 n 行&#xff0c;每行包含一个整数 。 输出格式 输出共 n 行&#xff0c;其中第 i 行输出第 i 个整数 的所有约数。 数据范围 1≤…

Django模型的字段类型

Django模型中最重要并且也是唯一必须执行的就是字段定义。字段在类中进行定义&#xff0c;对应于实体数据库的字段。另外&#xff0c;定义模型字段名时为了避免冲突&#xff0c;不建议使用模型API中已经定义的关键字。 字段类型用以指定数据库的数据类型&#xff0c;例如Integ…

瑞芯微RK3328(ROC-RK3328-PC)buildroot 开发QT的hello world

第一部分&#xff1a;编译rk3328 sdk 0. 环境 - EC-R3328PC&#xff08;ROC-RK3328-PC&#xff09; - ubuntu18&#xff08;100GB&#xff09; 1. 安装依赖 sudo apt-get updatesudo apt-get install repo git-core gitk git-gui gcc-arm-linux-gnueabihf u-boot-tools devi…

C++ //练习 12.26 用allocator重写第427中的程序。

C Primer&#xff08;第5版&#xff09; 练习 12.26 练习 12.26 用allocator重写第427中的程序。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 代码块 /************************************************************************…

Linux入门攻坚——19、sed入门、bash脚本编程续

sed&#xff1a;Stream EDitor&#xff0c;流编辑器&#xff0c;行编辑器&#xff1a;实现文本编辑时是逐行进行的。 用法&#xff1a; sed [option]... script inputfile... script&#xff1a;‘地址命令’&#xff0c;如1,4d sed是将文件内容读取后放入自己的编辑…

Junit 历史-ApiHug准备-测试篇-008

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 背景 J…

【人工智能书籍】一本书读懂AIGC:ChatGPT、AI绘画、智能文明与生产力变革(PDF分享)

今天又来给大家推荐一本人工智能方面的书籍<一本书读懂AIGC&#xff1a;ChatGPT、AI绘画、智能文明与生产力变革>。本书以通俗易懂的方式从各个层面介绍了AIGC的基础知识&#xff0c;并辅以大量案例引领读者了解AIGC的应用实践&#xff0c;让读者可以更快速地利用AIGC改善…

02节-51单片机-LED模块

文章目录 1.点亮一个LED灯2.LED闪烁3.LED流水灯 1.点亮一个LED灯 #include <REGX52.H> void main() {P20xFE; //1111 1110while(1){} }2.LED闪烁 增加延时&#xff0c;控制LED的亮灭间隙 延时函数的添加依靠STC-ISP软件的延时函数功能代码自动生成&#xff0c;如图 #i…

递归 python

↵一、简单理解 解决问题的一种方法&#xff0c;它将问题不断的分成更小的子问题&#xff0c;直到子问题可以用普通的方法解决。通常情况下&#xff0c;递归会使用一个不停调用自己的函数。 【注】&#xff1a;每一次递归调用都是在解决一个更小的问题&#xff0c;如此进行下…

数据库管理-第171期 Oracle是用这种方式确保读一致的(20240418)

数据库管理171期 2024-04-18 数据库管理-第171期 Oracle是用这种方式确保读一致的&#xff08;20240418&#xff09;1 基本概念2 用处3 注意事项总结 数据库管理-第171期 Oracle是用这种方式确保读一致的&#xff08;20240418&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#x…

Docker文档阅读笔记-How to Run GUI Based Applications inside Docker?

以后的文档阅读笔记不在一一介绍。以后只总结干货和重点。 Step 1 使用Systemctl命令启动docker服务&#xff1a; systemctl start docker // to start the docker service. systemctl status docker // to check the status . systemctl restart docke…

mybatis创建入门流程体验

mysql数据库中建表 drop table if exists tb_user;create table tb_user(id int primary key auto_increment,username varchar(20),password varchar(20),gender char(1),addr varchar(30) );INSERT INTO tb_user VALUES (1, zhangsan, 123, 男, 北京); INSERT INTO tb_user …
最新文章