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

简介: 2014-06-20 Created By BaoXinjian 一、摘要 Oracle 并发程式中Host Type的可执行程式,它的作用是用于调用Unix Shell去执行某些需求 个人觉得Oracle EBS中引入Host去调用unix shell其弥补了很多PLSQL类型程式无法做的...

2014-06-20 Created By BaoXinjian

一、摘要


Oracle 并发程式中Host Type的可执行程式,它的作用是用于调用Unix Shell去执行某些需求

个人觉得Oracle EBS中引入Host去调用unix shell其弥补了很多PLSQL类型程式无法做的某些功能,以unix shell的语法结构直接对服务器进行操作

写host并发程式时,需要较强的Bash语法知识,个人不做DBA,只了解一部分,所以就不具体介绍了,只说明一下Oracle EBS开发Unix Shell时需要注意的地方

1. Host并发程式中必须定义的4个系统参数,自定义参数可以从第5个开始引用

ORA_USER_PASS=$1

ORA_USER_ID=$2

ORA_LOGIN_NAME=$3

ORA_REQUEST_ID=$4

2 Prog文件放置时必须注意读写权限,最好是777,避免无法应用

3 并发程式设定好之后,注意通过fndcpesr建立虚拟连接

ln -s $FND_TOP/bin/fndcpesr $FND_TOP/bin/bxjhosts

4. 文件后缀名不是.sh, 而是.prog

5. 当Shell调用需返回Waring或者Log信息给并发程式管理器时,可通过API<fnd_concurrent><fnd_file.log/output>

fnd_global.INITIALIZE(l_session_id, null, null, null,null, -1, null, null, null, null, $4, null,null,null,null,null,null,-1);

l_result := fnd_concurrent.set_completion_status(‘WARNING’,'Review log file for details.’);

 

二、案例分析


案例: 创建一个Host并发程式,自定义2个参数,将Host自带的4个系统参数和2个自定义参数在host程式运行后,自动存放至记录表中

1. 创建一个测试表,用以存放Host并发程式传入的参数

create table bxj_hosts_test(
  ora_user_pass varchar2(50),   ->必须定义的系统参数用户及密码
  ora_user_id varchar2(50),       ->必须定义的系统参数用户ID
  ora_login_name varchar2(50), ->必须定义的系统参数用户名
  ora_request_id varchar2(50),   ->必须定义的系统Request_ID
  invoice_id varchar2(50),          ->自定义参数
  invoice_number varchar2(240),->自定义参数
  creation_date date
);

2. 建立一个后缀名为prog的Unix Shell文件,采用Bash语法,其构成为4部分

2.1 定义从并发管理器传入的4个默认系统参数和2个自定义参数

2.2 准备SQL文件用以之后调用,并产生$ORACLE_PATH/bxjhosts.sql

2.3 通过SQLPLUS执行第二步产生的SQL文件

2.4 根据SQLPLUS中的DBMSOUT,产生LOG文件

 1 #/bin/bash  
 2 # +--------------------------------------------+  
 3 # + An example of calling host concurrent      +   
 4 # + Author: Gavin.Bao                          +                                
 5 # +--------------------------------------------+  
 6 #  
 7 # ---------------------------------  
 8 #  Define variable
 9 # ---------------------------------  
10   
11 export ORA_USER_PASS=$1
12 export ORA_USER_ID=$2 
13 export ORA_LOGIN_NAME=$3 
14 export ORA_REQUEST_ID=$4 
15 
16 export INVOICE_ID=$5
17 export INVOICE_NUMBER=$6
18 
19 export ORACLE_PATH="/home/applvis/bts"
20   
21 # ---------------------------------  
22 #  Prepare plsql script  
23 # ---------------------------------  
24   
25 echo "set serveroutput on size 1000000" > $ORACLE_PATH/bxjhosts.sql  
26 echo "set feed off" >> $ORACLE_PATH/bxjhosts.sql  
27 echo "begin" >> $ORACLE_PATH/bxjhosts.sql  
28 echo "  insert into bxj_hosts_test " >> $ORACLE_PATH/bxjhosts.sql  
29 echo "  values ('$ORA_USER_PASS','$ORA_USER_ID','$ORA_LOGIN_NAME', '$ORA_REQUEST_ID', '$INVOICE_ID', '$INVOICE_NUMBER', SYSDATE);" >>$ORACLE_PATH/bxjhosts.sql
30 echo "  commit;" >>$ORACLE_PATH/bxjhosts.sql
31 echo "  dbms_output.put_line('Excuted Sucessfully.');" >> $ORACLE_PATH/bxjhosts.sql  
32 echo "exception when others then" >> $ORACLE_PATH/bxjhosts.sql  
33 echo "  rollback;" >> $ORACLE_PATH/bxjhosts.sql  
34 echo "  dbms_output.put_line('Executed Failed');" >> $ORACLE_PATH/bxjhosts.sql  
35 echo "  dbms_output.put_line('SQLCODE='||SQLCODE);" >> $ORACLE_PATH/bxjhosts.sql  
36 echo "  dbms_output.put_line('SQLERRM='||SQLERRM);" >> $ORACLE_PATH/bxjhosts.sql  
37 echo "end;" >> $ORACLE_PATH/bxjhosts.sql  
38 echo "/" >> $ORACLE_PATH/bxjhosts.sql
39   
40 # --------------------------------  
41 #  Execute plsql script  
42 # --------------------------------  
43   
44 if [ -s $ORACLE_PATH/bxjhosts.sql ]; then  
45     echo -e "Running SQL script to find out bdump directory... \n"   
46     $ORACLE_HOME/bin/sqlplus -s apps/apps > $ORACLE_PATH/bxjhosts.log << EOF  
47     @$ORACLE_PATH/bxjhosts.sql  
48 EOF
49 fi
50 
51 # --------------------------------  
52 #  Execute generate log file
53 # --------------------------------  
54 echo "Check the reslut "
55 echo "------------------------"
56 cat $ORACLE_PATH/bxjhosts.log
57   
58 echo "bxjhosts.sh excuted end"

3. 在application定义Excutable 和 Concurrent Program之前,在Unix环境下测试Prog文件,确保该文件没有问题,不存在语法错误

4. 配置Prog文件读写权限和使用fndcpesr建立bxjhosts.prog的虚拟连接

4.1设定权限: chmod 777 bxjhosts.prog

4.2建立虚拟连接: ln -s $FND_TOP/bin/fndcpesr $FND_TOP/bin/bxjhosts

5. 语法没有任何问题,定义Excutable和Concurrent Program

Unix Shell中前4个参数,系统会默认赋值,从5个参数开始,才真正从并发程式的定义中取值

 

三、案例测试


 Test1. 调用该程式

Test2. 在执行Host并发程式中,因为在Prog中定义了两个文件产生方式如下

Test2.1 SQL文件用以最终Prog Shell最终执行哪段SQL

Test2.2 LOG文件用以最终Prog Shell执行过程中的Log语法

 

Test3. 将Host Prog中的Insert语句执行结果如下,4个系统参数,2个用户自定义参数

 

四、 案例中遇到的问题


Issue1 调用程式时提示无法找到该host文件,无法被执行,原因在于prog文件的权限问题和虚拟连接是否建立

 

Thanks and Regards

ERP技术讨论群: 288307890
技术交流,技术讨论,欢迎加入
Technology Blog Created By Oracle ERP - 鲍新建
相关文章
|
2月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的控制文件与归档日志文件
本文介绍了Oracle数据库中的控制文件和归档日志文件。控制文件记录了数据库的物理结构信息,如数据库名、数据文件和联机日志文件的位置等。为了保护数据库,通常会进行控制文件的多路复用。归档日志文件是联机重做日志文件的副本,用于记录数据库的变更历史。文章还提供了相关SQL语句,帮助查看和设置数据库的日志模式。
【赵渝强老师】Oracle的控制文件与归档日志文件
|
2月前
|
SQL Oracle 关系型数据库
Oracle 从 DMP 文件中恢复指定表的步骤
Oracle 从 DMP 文件中恢复指定表的步骤
124 7
|
2月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
2月前
|
存储 Oracle 关系型数据库
oracle数据恢复—Oracle数据库文件大小变为0kb的数据恢复案例
存储掉盘超过上限,lun无法识别。管理员重组存储的位图信息并导出lun,发现linux操作系统上部署的oracle数据库中有上百个数据文件的大小变为0kb。数据库的大小缩水了80%以上。 取出&并分析oracle数据库的控制文件。重组存储位图信息,重新导出控制文件中记录的数据文件,发现这些文件的大小依然为0kb。
|
2月前
|
Oracle 关系型数据库 数据库
【赵渝强老师】Oracle的参数文件与告警日志文件
本文介绍了Oracle数据库的参数文件和告警日志文件。参数文件分为初始化参数文件(PFile)和服务器端参数文件(SPFile),在数据库启动时读取并分配资源。告警日志文件记录了数据库的重要活动、错误和警告信息,帮助诊断问题。文中还提供了相关视频讲解和示例代码。
|
1月前
|
存储 Oracle 关系型数据库
服务器数据恢复—华为S5300存储Oracle数据库恢复案例
服务器存储数据恢复环境: 华为S5300存储中有12块FC硬盘,其中11块硬盘作为数据盘组建了一组RAID5阵列,剩下的1块硬盘作为热备盘使用。基于RAID的LUN分配给linux操作系统使用,存放的数据主要是Oracle数据库。 服务器存储故障: RAID5阵列中1块硬盘出现故障离线,热备盘自动激活开始同步数据,在同步数据的过程中又一块硬盘离线,RAID5阵列瘫痪,上层LUN无法使用。
|
3月前
|
存储 Oracle 关系型数据库
数据库数据恢复—Oracle ASM磁盘组故障数据恢复案例
Oracle数据库数据恢复环境&故障: Oracle ASM磁盘组由4块磁盘组成。Oracle ASM磁盘组掉线 ,ASM实例不能mount。 Oracle数据库故障分析&恢复方案: 数据库数据恢复工程师对组成ASM磁盘组的磁盘进行分析。对ASM元数据进行分析发现ASM存储元数据损坏,导致磁盘组无法挂载。
|
2月前
|
SQL Oracle 关系型数据库
【赵渝强老师】Oracle的数据文件
在Oracle数据库中,数据库由多个表空间组成,每个表空间包含多个数据文件。数据文件存储实际的数据库数据。查询时,如果内存中没有所需数据,Oracle会从数据文件中读取并加载到内存。可通过SQL语句查看和管理数据文件。附有视频讲解及示例。
|
4月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—异常断电导致Oracle数据库数据丢失的数据恢复案例
Oracle数据库故障: 机房异常断电后,Oracle数据库启库报错:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。数据库没有备份,归档日志不连续。用户方提供了Oracle数据库的在线文件,需要恢复zxfg用户的数据。 Oracle数据库恢复方案: 检测数据库故障;尝试挂起并修复数据库;解析数据文件。
|
4月前
|
人工智能 监控 Shell
常用的 55 个 Linux Shell 脚本(包括基础案例、文件操作、实用工具、图形化、sed、gawk)
这篇文章提供了55个常用的Linux Shell脚本实例,涵盖基础案例、文件操作、实用工具、图形化界面及sed、gawk的使用。
895 2

推荐镜像

更多