日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 运维知识 > windows >内容正文

windows

Shell_Oracle Erp和其他系统Interface资料传输通过Shell进行控制(案例)

發(fā)布時(shí)間:2025/3/15 windows 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Shell_Oracle Erp和其他系统Interface资料传输通过Shell进行控制(案例) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

2014-06-26 Created By BaoXinjian

一、摘要


當(dāng)不同的系統(tǒng)資料進(jìn)行交換,可以很多種方式,如MQ,DBLink

當(dāng)接觸一些信息安全比較嚴(yán)的項(xiàng)目,很多公司都是采用unix shell直接進(jìn)行拋轉(zhuǎn)文件的方式進(jìn)行

使用unix shell拋傳文件的時(shí),就必須區(qū)分哪些文件已被讀取,哪些文件未被讀取,讀取成功之后文件如何處理,讀取失敗后的文件如何處理

?

之前做的一個(gè)保險(xiǎn)項(xiàng)目,其處理不同系統(tǒng)之間所有的interface data資料,都是通過unix shell去控制,其安全性會(huì)比較高

本文只是介紹程式的基本結(jié)構(gòu),不糾結(jié)與語(yǔ)法,真正的控制Shell文件會(huì)涉及到跟多的部分,如驗(yàn)證,初始化環(huán)境變量等等

Step1. 通過一個(gè)unix shell去讀取一個(gè)文件夾interface下所有的文件名,

Step2. 將其插入到一個(gè)contorl table中,插入之前先判斷該文件名是否存在,如果存在就不再插入,避免重復(fù)記錄

Step3. 通過utl_file讀取contorl table中未被處理的data file

Step4. 讀取文件成功后,將該文件transfer到另一個(gè)文件夾success

Step5. 讀取文件失敗后,將該文件transfer到另一個(gè)文件夾failed

?

二、案例實(shí)現(xiàn)


案例:從另外系統(tǒng)拋傳interface dat files資料,并存放在/home/applvis/bts/interface中,通過unix shell去控制文件讀取

Step1. 建立control table,用以測(cè)試unix shell將未讀取的文件名存放至該表中

1 create table bxj_interface_control_tb( 2 batch_id number, 3 file_seq number, 4 file_name varchar2(240), 5 record_count number, 6 success_record number, 7 failure_record number, 8 process_status varchar2(50), 9 request_id number, 10 user_id number, 11 user_name varchar2(240), 12 creation_date date 13 ) 14 15 create sequence bxj_batch_id_sq start with 1000

Step2. 確認(rèn)存放interface dat資料文件夾下有5個(gè)文件,所以當(dāng)unix shell處理后,這個(gè)5個(gè)文件必須存放至contorl表中

Step3. 確認(rèn)存在的三個(gè)interface存放dat資料、log存放Shell運(yùn)行的日志、sql存放SQL執(zhí)行文件

Step4. 最關(guān)鍵的一步,建立Unix Shell,本人不是DBA出生,雖然學(xué)過Bash語(yǔ)法,但是不省精通,大家湊活著看

1 #/bin/bash 2 # +--------------------------------------------+ 3 # + An example of calling host concurrent + 4 # + Author: Gavin.Bao + 5 # +--------------------------------------------+ 6 # 7 # --------------------------------- 8 # Define variable 9 # --------------------------------- 10 export ORA_USER_PASS=$1 11 export ORA_USER_ID=$2 12 export ORA_LOGIN_NAME=$3 13 export ORA_REQUEST_ID=$4 14 15 export FOLDER_PATH="/home/applvis/bts/interface/" 16 export INTERFACE_PATH="/home/applvis/bts/interface" 17 export SQL_PATH="/home/applvis/bts/sql" 18 export LOG_PATH="/home/applvis/bts/log" 19 20 # ------------------------------------------- 21 # Loop the file name and store it into array 22 # ------------------------------------------- 23 x=0 24 for filename in ${FOLDER_PATH}*; 25 do 26 array[$x]=`basename $filename` 27 let "x+=1" 28 done 29 30 for interface_name in ${array[*]} 31 do 32 echo $interface_name 33 done 34 35 # --------------------------------- 36 # Prepare plsql script 37 # --------------------------------- 38 echo "set serveroutput on size 1000000" > $SQL_PATH/bxjinterface.sql 39 echo "set feed off" >> $SQL_PATH/bxjinterface.sql 40 echo "declare" >> $SQL_PATH/bxjinterface.sql 41 echo " n_count number;" >> $SQL_PATH/bxjinterface.sql 42 echo " n_batch_id number := &1;" >> $SQL_PATH/bxjinterface.sql 43 echo " v_file_name varchar2(240) := '&2';" >> $SQL_PATH/bxjinterface.sql 44 echo "begin" >> $SQL_PATH/bxjinterface.sql 45 echo " select count(*) into n_count " >> $SQL_PATH/bxjinterface.sql 46 echo " from bxj_interface_control_tb where file_name = v_file_name;" >> $SQL_PATH/bxjinterface.sql 47 echo " if (n_count = 0) then" >> $SQL_PATH/bxjinterface.sql 48 echo " insert into bxj_interface_control_tb " >> $SQL_PATH/bxjinterface.sql 49 echo " values (bxj_batch_id_sq.nextval,n_batch_id,v_file_name,0,0,0,'N',$ORA_REQUEST_ID,$ORA_USER_ID,'$ORA_LOGIN_NAME',sysdate);" >>$SQL_PATH/bxjinterface.sql 50 echo " end if;" >>$SQL_PATH/bxjinterface.sql 51 echo " commit;" >>$SQL_PATH/bxjinterface.sql 52 echo " dbms_output.put_line('Excuted Sucessfully.');" >> $SQL_PATH/bxjinterface.sql 53 echo "exception when others then" >> $SQL_PATH/bxjinterface.sql 54 echo " rollback;" >> $SQL_PATH/bxjinterface.sql 55 echo " dbms_output.put_line('Executed Failed');" >> $SQL_PATH/bxjinterface.sql 56 echo " dbms_output.put_line('SQLCODE='||SQLCODE);" >> $SQL_PATH/bxjinterface.sql 57 echo " dbms_output.put_line('SQLERRM='||SQLERRM);" >> $SQL_PATH/bxjinterface.sql 58 echo "end;" >> $SQL_PATH/bxjinterface.sql 59 echo "/" >> $SQL_PATH/bxjinterface.sql 60 61 # ------------------------------------------- 62 # Execute plsql script and generate the log 63 # ------------------------------------------- 64 if [ -s $SQL_PATH/bxjinterface.sql ]; then 65 echo -e "Running SQL script to find out bdump directory... \n" 66 length=${#array[@]} 67 echo $length 68 for((i=0;i<$length;i++)) 69 do 70 $ORACLE_HOME/bin/sqlplus -s apps/apps >> $LOG_PATH/bxjinterface.log << EOF 71 @$SQL_PATH/bxjinterface.sql $i '${array[$i]}' 72 EOF 73 done 74 fi 75 76 # -------------------------------- 77 # show log file 78 # -------------------------------- 79 echo "Check the reslut " 80 echo "------------------------" 81 cat $LOG_PATH/bxjinterface.log 82 83 echo "bxj shell end"

?

三、案例測(cè)試


Test1. 調(diào)用建立的Shell文件,讀取文件名

?Test2. Unix Shell執(zhí)行時(shí),產(chǎn)生的Log文件

Test2. Unix Shell執(zhí)行時(shí),產(chǎn)生的SQL文件

Test3. 查看Contorl table中是否存在5個(gè)文件名

?

?

總結(jié)

以上是生活随笔為你收集整理的Shell_Oracle Erp和其他系统Interface资料传输通过Shell进行控制(案例)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。