2014-06-26 Created By BaoXinjian

一、摘要


当不同的系统资料进行交换,可以很多种方式,如MQ,DBLink

当接触一些信息安全比较严的项目,很多公司都是采用unix shell直接进行抛转文件的方式进行

使用unix shell抛传文件的时,就必须区分哪些文件已被读取,哪些文件未被读取,读取成功之后文件如何处理,读取失败后的文件如何处理

之前做的一个保险项目,其处理不同系统之间所有的interface data资料,都是通过unix shell去控制,其安全性会比较高

本文只是介绍程式的基本结构,不纠结与语法,真正的控制Shell文件会涉及到跟多的部分,如验证,初始化环境变量等等

Step1. 通过一个unix shell去读取一个文件夹interface下所有的文件名,

Step2. 将其插入到一个contorl table中,插入之前先判断该文件名是否存在,如果存在就不再插入,避免重复记录

Step3. 通过utl_file读取contorl table中未被处理的data file

Step4. 读取文件成功后,将该文件transfer到另一个文件夹success

Step5. 读取文件失败后,将该文件transfer到另一个文件夹failed

二、案例实现


案例:从另外系统抛传interface dat files资料,并存放在/home/applvis/bts/interface中,通过unix shell去控制文件读取

Step1. 建立control table,用以测试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. 确认存放interface dat资料文件夹下有5个文件,所以当unix shell处理后,这个5个文件必须存放至contorl表中

Step3. 确认存在的三个interface存放dat资料、log存放Shell运行的日志、sql存放SQL执行文件

Step4. 最关键的一步,建立Unix Shell,本人不是DBA出生,虽然学过Bash语法,但是不省精通,大家凑活着看

 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"

三、案例测试


Test1. 调用建立的Shell文件,读取文件名

Test2. Unix Shell执行时,产生的Log文件

Test2. Unix Shell执行时,产生的SQL文件

Test3. 查看Contorl table中是否存在5个文件名

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

  1. 【转】BPM与ERP,OA系统的区别和关系

    一.区别: 1.定位不同:OA主要管人,BPM主要管业务,ERP主要是对资源管理.虽然三者都涉及到"数据"."表单"."流程". 但仔细研究 ...

  2. oracle erp crm系统,企业集成ERP和CRM系统的模式体验

    企业集成ERP和CRM系统的模式体验 2008-11-02 eNet&Ciweek 为了减少这种风险,企业应该部署单向集成,也就是CRM只有在通过业务流程审核的情况下才可以查询和改变财务数据. ...

  3. SAP ERP 安全管理平台系统

    系统引言 SAP全日志安全管理系统(SAP ERP安全管理平台, 简称AMS-L系统)是一款面向SAP ERP 系统的网络安全管理工具,提供基于SAP系统用户业务行为的常态化监管,是对SAP现有日志体 ...

  4. android 手机资料互传,不同系统手机资料互传so easy

    不同系统手机资料互传so easy 体验三:手机之间数据传输 (1)ios设备向安卓设备传输数据 有了这款东芝TransferJet适配器,ios设备与安卓设备之间传输数据又多了一种选择,并且可以实现 ...

  5. 全新企业ERP/MES/B2ME系统的构建理念和产品研发模式

    新一代企业ERP/MES/B2ME系统的构建和研发,对设计师或程序员提出了新的问题和挑战, 新一代信息系统的研发,要求打破管理与开发的界限,脱离代码和框架束缚. 视频概述:极简模式快速构建信息系统管理 ...

  6. linux读文件整个过程,linux下文件资料传输实现全过程

    linux下文件资料传输实现全过程 (8页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 17.90 积分 实用标准文案/***************** ...

  7. 有赞商城如何对接ERP、CRM系统?

    有赞商城是什么应用? 有赞是一家帮助门店商家数字化升级的SaaS平台,可以打通线上线下,实现高效经营联动增长.帮助每一位重视产品和服务的商家私有化顾客资产.拓展互联网客群.提高经营效率,全面助力商家成 ...

  8. IFS系统成本资料来源

    IFS系统成本资料来源 省略中间过程,直接给出结果如下: 表名: inventory_part_config_tab 栏位名:  latest_purchase_price 对应COST3 最近采购单 ...

  9. ERP有哪些系统?运用在哪些行业?

    国内目前市面上ERP系统五花八门,但能真正快速匹配企业业务,且可以进行快速迭代二次开发的系统并不多见. 所以在选择ERP系统的时候可以参考下面这张表格中的内容: 目前常见的ERP软件大概可以分为三大类 ...

最新文章

  1. MATLAB【十四】————调用深度库生成exe,批量运行三层文件夹下图片,保存结果
  2. Directx11教程(11) 增加一个debug宏
  3. Linux下CST和UTC时间的区别以及不一致的解决方法
  4. java中什么是反转_Java中如何将字符串反转
  5. Acer 4750 安装黑苹果_黑苹果系统安装通用教程图文版
  6. 『WPF』实现拖动文件到窗体(控件)
  7. cad求和插件_黑科技 | 无BIM建模下平面CAD自动生成门窗表
  8. springboot+web文件上传和下载
  9. 面试官是如何看程序员的简历
  10. sqlplus 命令导入数据文件
  11. 东航建设漏洞管理平台的探索实践
  12. 用Python实现模糊聚类(传递闭包法)
  13. 计算机win7系统还原,win7还原系统——win7系统还原出厂设置
  14. postman删除workspace
  15. R语言学习笔记5_参数的假设检验
  16. BUUCTF Crypto BabyRSA
  17. springboot毕设项目基于的医院就医平台m11a1(java+VUE+Mybatis+Maven+Mysql)
  18. keil软件不显示.h文件问题
  19. layui使用label标签
  20. javascript 实现类似超市排队结账算法,求最少时间

热门文章

  1. 常用的mysql sql_mode
  2. python tfidf特征变换_Spark MLlib机器学习开发指南(4)--特征提取--TF-IDF
  3. js文件里获取路由 vue_【源码拾遗】从vue-router看前端路由的两种实现
  4. Pc-98 android,PC安卓多功能搞机助手3.98
  5. 朋友圈为何总给我推HERMES?
  6. 在阿里巴巴工作是一种怎样的体验?
  7. 面试中听到这句话是不是代表凉了?
  8. 作者:龚南宁,数据堂(北京)科技股份有限公司对外合作部副总监
  9. 【软件工程】软件开发的本质
  10. 【Java】Socket多客户端Client-Server聊天程序