知识库 : iUAP DI Shell作业项插入脚本远程执行之场景应用

Edit Document

 

 

 

 

 

 

 

 

iUAP DI Shell作业项插入脚本远程执行之场景应用

 

 

 

作者 魏剑龙


目录

1. 场景介绍

2. 具体实现

3.Linux Linux 的情况

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 会找不到的。

 

Attachments:

iUAP DI Shell作业项插入脚本远程执行之场景应用 - 魏剑龙.docx (application/vnd.openxmlformats-officedocument.wordprocessingml.document)