iUAP DI Shell作业项插入脚本远程执行之场景应用
作者 : 魏剑龙
目录
1. 场景介绍
表输入:
文本输出:输出到 ftp 中,共享
总体流程是这样的,通过 shell 应用转换项,将原库的表导出到 ftp 中,再通过 shell 脚本作业项,通过远程调用目标库机器的 bat 脚本,把 ftp 中的数据下载到目标库机器上,而后调用 SQL Loader 导入到目标库。
2. 具体实现
Shell 作业项,插入的脚本为:
****************************************************************************
cmdkey.exe /add:20.2.52.38 /user:aeduan\administrator /pass:daydayup
PsExec.exe \\20.2.52.38 -u aeduan\administrator -p daydayup -d -s "D:\shell\test.bat"
cmdkey.exe /delete:20.2.52.38
*********************************************************************
这调用的是 20.2.52.38 远程机器的脚本 D:\shell\test.bat 。 注意,在此前,要安装 PsToolS (包含 PsExec ),可以去微软的官网上下载安装,解压后,把所有内容拷贝到 C:\Windows\System32 下,就是 Path 路径。这是 windows 到 windows 的通信方式, window 到 linux 和 linux 到 linux 又有所不同。
***************************test.bat**********************************
@echo on
ftp -s:d:\shell\ftpcmd.txt
echo ftp succssful
ping -n 2 127.0.0.1
sqlldr userid=weijl/weijl control=d:\shell\input.ctl
*********************************************************************
其中所有的路径切记,用绝对路径,以免找不到 。 ping – n 2 127.0.0.1 主要是为了等待文件下载完成,根据需要可以调整参数,比如 ping – n 10 127.0.0.1 ,这样就 ping 了 10 次,等待的时间就长了。
***************************ftpcmd.txt********************************
open 20.12.6.180
anonymous
get /pub/file.csv D:\shell\file.csv
bye
*********************************************************************
O pen 表示开启到目标主机的连接,之后就是用户名和密码: anonymous 表示匿名登录。
get 表示下载文件,并且可重命名, bye 表示结束会话,退出。具体可以百度查询 FTP 命令相关资料。
*******************************input.ctl*****************************************
LOAD DATA
INFILE "d:\shell\file.csv"
APPEND INTO TABLE test
FIELDS TERMINATED BY ","
(id,username)
*********************************************************************
这个可以查阅 SQL Loader 相关资料。
最后 ,需要强调的是, test.bat , ftpcmd.txt 和 input.ctl 在远程目标机器上。
3.Linux 到 Linux 的情况
至于 W i ndows 到 Linux 和 Linux 到 Linux 类似,只是 Windows 到 Windows 要提前安装 Cygwin 模拟 Linux 。
首先,要实现到目标数据库机器的无密码登录,下图脚本的前六行,就是实现这一目的的。如果已经实现了无密码登录,可以省去前六行。 注意:前六行要在 Linux 终端或 Cygwin 中运行,因为要输入密码。
也可以这么做:
之后,要在目标数据库机器上,部署下面文件 :
*** ******************* ***********ftp2.sh********************* *******************
ftp -i -n <<!
open 20.12.6.180
user anonymous \n
passive
get /pub/file.csv /home/oracle/file.csv
bye
!
****************** ************** input2.ctl *********************** ****************
LOAD DATA
INFILE "/home/oracle/file.csv"
APPEND INTO TABLE test
FIELDS TERMINATED BY ","
(id, username)
****************** ***************** **test2.sh** ******* **************************
#!/bin/sh
sh /home/oracle/ftp2.sh
echo ...
echo ...
sqlldr userid=lzt02/1 control=/home/oracle/input2.ctl
*************** ******************* *test_forword.sh*********** ********** **********
#!/bin/bash
su - oracle -c "sh /home/oracle/test2.sh"
*************************************************** *************************** *
之所以这么做, su – oracle 是因为 oracle 是安装在 oracle 用户上,登录的时候用的是 root 用户,如果不这么做, sqlldr 会找不到的。