我们有一个Oracle EBS concurrent program,作为applmgr运行,需要使用SQL * Loader加载数据,并将输入数据移动到存档位置:
sqlldr $w_login \
control=$w_directory/$w_ctrl \
data=$w_directory/$w_data \
log=$w_directory/log/$w_data.log
[[ -f $w_directory/log/$w_data.log ]] && \
mv $w_directory/$w_data $w_directory/archive/$w_data.archive
但是,它在mv
部分失败了:
34 Rows successfully loaded.
0 Rows not loaded due to data errors.
0 Rows not loaded because all WHEN clauses were failed.
0 Rows not loaded because all fields were null.
mv: cannot move `/w_directory/w_data.dat' to `/w_directory/archive/w_data.dat.archive': Permission denied
applmgr
用户对目录和文件具有写权限:
drwxrwxr-x 14 otheruser othergroup 4096 Apr 16 2012 /w_directory
drwxrwxr-x 14 otheruser othergroup 4096 Apr 16 2012 /w_directory/log
drwxrwxr-x 14 otheruser othergroup 4096 Apr 16 2012 /w_directory/archive
-rwxrwxr-x 14 otheruser othergroup 4096 Apr 16 2012 /w_directory/w_data.dat
$ id applmgr
uid=1003(applmgr) gid=1000(dba) groups=1000(dba),1003(othergroup)
我们可以通过命令行applmgr
手动运行上述程序,没有任何问题。但是当作为并发程序运行时,它会因上述错误而失败。我们也已经退回了服务器。
服务器位于RHEL 6.4上。 Oracle EBS是R12.1.3。