
Java调用Shell脚本运行SQL*Loader和存储过程
5星
- 浏览量: 0
- 大小:None
- 文件类型:None
简介:
简介:本文介绍如何通过Java程序执行Shell脚本,进而运行SQL*Loader工具及数据库存储过程,实现数据高效导入与处理。
在Java代码中调用执行shell脚本时遇到以下四个错误:1. sqlldr: command not found;2. sqlplus:command not found;3. 0750: You may need to set ORACLE_HOME to your Oracle software directory;4. Message 2100 not found; No message file for product=RDBMS, facility=UL。在Linux环境中,有三个用户可以执行该shell脚本,分别是两个dba用户:oracle、erm 和一个web 用户:erm,在任意目录下均无问题。
检查了所有用户的环境变量发现没有异常(/home/oracle/.profile 与 /home/erm/.profile 环境变量文件为隐藏文件需使用 ls -a 命令查看)。在网上查找解决方案后,有以下几种处理方法:
1. 若oracle_home目录缺失执行权限,则无法进入bin目录。可以尝试更改相关目录的访问权限:chmod 755 $oracle_home;chmod 755 $oracle_home/lib;对$oracle_home/rdbms/mesg目录赋予权限。当需要非Oracle用户使用sqlldr时,除了配置环境变量外还需赋予该用户相应目录的访问权。
2. 使用sh直接执行shell和在Java中调用shell的区别在于需在shell文件内添加oracle用户的环境变量即 . /home/oracle/.bash_profile ,否则会报错:Message 2100 not found; No message file for product=RDBMS... facility=UL。然而,尝试这种方法后仍然出现错误。
最终发现,在Linux环境下直接执行shell脚本时sqlldr命令和sqlplus命令均正常运行;而在Java代码中调用该脚本却报错,由此推断问题可能在于环境变量配置不正确。将oracle的所有环境变量复制到shell脚本段落件内并在Java中进行测试后,所有错误得以解决。
具体实现方式请参见相关文档或代码示例内容。
全部评论 (0)


