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

2014-06-26 BaoXinjian

一、摘要



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

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

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

之前做的一个保险项目,其处理不同系统之间所有的interface data资料,都是通过unix 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个文件名

********************作者:鲍新建********************

Unix Shell_Oracle Erp和其他系统Interface资料传输通过Shell进行控制(案例)(架构),布布扣,bubuko.com

时间: 2024-10-12 20:59:03

Unix Shell_Oracle Erp和其他系统Interface资料传输通过Shell进行控制(案例)(架构)的相关文章

Unix Shell_Oracle EBS基于主机文件Host开发详解(案例)

2014-06-20 BaoXinjian 一.摘要 Oracle 并发程式中Host Type的可执行程式,它的作用是用于调用Unix Shell去执行某些需求 个人觉得Oracle EBS中引入Host去调用unix shell其弥补了很多PLSQL类型程式无法做的某些功能,以unix shell的语法结构直接对服务器进行操作 写host并发程式时,需要较强的Bash语法知识,个人不做DBA,只了解一部分,所以就不具体介绍了,只说明一下Oracle EBS开发Unix Shell时需要注意的

android 系统学习资料

android系统学习资料见以下网址,希望对大家有点帮助! http://cache.baiducontent.com/c?m=9d78d513d9901df918b0cf281a17a771682097133bc0a16368a4925f92144c30437197bd30521413a0b16b6671b83957fd844065470237c6eadf893acacd943f5f8e3045700bf13105d269b8bb4332b724872b9eb86de3aeb772cda188

系统域名与应用主机切换的变更案例

系统域名与应用主机切换的变更案例 1.DNS server 配置 Alan已经将新域名erp.djicorp.com绑定到10.10.0.251.--已经实施 2.备份 应用层软件备份:--已经在20140701 14:00执行 cd /u01/erpdb tar czvf /erpbk/apps_$(date +%Y%m%d).tar.gz apps 数据库软件备份:--已经在20140701 14:00执行 cd /u01/erpdb tar czvf /erpdb_bk/db_$(date

linux系统下重启tomcat的shell脚本

linux系统下重启tomcat的shell脚本: tomcat_home=/opt/apache-tomcat-6.0.32 #找到tomcat进程的id并kill掉 ps -ef |grep tomcat |awk {'print $2'} | sed -e "s/^/kill -9 /g" | sh - #删除日志文件,如果你不先删除可以不要下面一行 rm $tomcat_home/logs/* -rf #删除tomcat的临时目录 rm $tomcat_home/work/*

.Net程序随系统开机启动(仿Foxmail托盘效果控制)

对于使.NET程序随系统开机启动,最常用的可能就是向在注册表中注册开机启动项,或是建立Windows服务,使程序随系统启动而启动.这里以WinForm程序为例,测试Demo分享,同时附上对于程序托盘的简单操作,仿Foxmail的托盘显示效果,好的产品都是细细打磨出来的呀!1.WinForm程序添加注册表和移除注册表(1).创建一个WinForm程序,界面如下(很简单):(2).主要实现代码:(注册表开机启动位置:SOFTWARE\Microsoft\Windows\CurrentVersion\

建筑材料系统 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发

框架介绍: 1.基于 ASP.NET MVC4.0 + WebAPI + EasyUI + Knockout 的架构设计开发 2.采用MVC的框架模式,具有耦合性低.重用性高.生命周期成本低.可维护性高.有利软件工程化管理等优点 3.采用WebAPI,客户端完全摆脱了代理和管道来直接进行交互 4.采用EasyUI前台UI界面插件,可轻松的打造出功能丰富并且美观的UI界面 5.采用Knockout,,提供了一个数据模型与用户UI界面进行关联的高层次方式(采用行为驱动开发) 6.数据访问层采用强大的

亿级流量电商详情页系统的大型高并发与高可用缓存架构实战

对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中最常见的一种应用技术.然而,行业里很多朋友对缓存技术的了解与掌握,仅仅停留在掌握redis/memcached等缓存技术的基础使用,最多了解一些集群相关的知识,大部分人都可以对缓存技术掌握到这个程度.然而,仅仅对缓存相关的技术掌握到这种程度,无论是对于开发复杂的高并发系统,或者是在往Java高级工程师.Java资深工程师.Java架构师这些高阶的职位发展的过程中,都是完全不够用的.技术成长出现瓶颈,在自己

C#对接SAP【生产系统对接ERP,实现工单资料下载】

企业如果上了ERP系统,比如SAP.用友.金蝶或者E10等等,只需要ERP里面提供相应的接口,则可以直接将PMC创建的工单信息抛转至 MTS 系统,当该工单生产完成之后,MTS 将完成数据回传至 ERP,方便货仓进行入仓与扣数,这篇文章介绍 MTS 与 SAP 之间如何对接. 1.SAP里面必须有一个Function,类似 MSSQL里面的存储过程一样,根据用户传入的参数,返回所需要的数据,这一部分程序通过 ABAP 完成,不在本文的讲述范围之类,这里略过. 2.MTS连接到 SAP,Call对

多光谱光子型山火智能预警监测系统宣传资料

产品名称:多光谱山火智能预警监测系统 公司名称:深圳市银星华电科技有限公司 产品功能:山火监测.山火报警.山火精确识别:线路电晕放电情况实时监测. 高压输电线路因山火引发的跳闸事故严重影响电网的安全稳定运行,各项研究表明山火是输电线路跳闸主要因素之一.目前防山火的措施有感温探测.感烟探测.气体探测.激光探测.机器视觉.火焰探测.红外探测等技术.我公司研发的多光谱光子型山火监控系统.基于紫外检测方式利用地球表面在正常情况下不存在的日盲波段的紫外光源信号作为山火精确判别依据,并辅以红外.可见光和气象