Linux 使用Runtime 调用sqlldr出错java.io.IOException: error=13, Permission denied

李学广 发布于 2014/02/12 09:27
阅读 7K+
收藏 0

我是用sftp上传文件至linux服务器,文件所属用户和组如下:

-rw-r--r--. 1 vsSftp sftp-user 26341 2月  11 19:05 192.168.0.116_PMS_BUSINESS_1392109500-20140211170500.txt
-rw-r--r--. 1 vsSftp sftp-user 26341 2月  11 20:05 192.168.0.116_PMS_BUSINESS_1392114000-20140211182000.txt
在tomcat中对这些文件调用Runtime执行sqllldr命令,并将数据入库,结果报一下错误:

java.io.IOException: Cannot run program "/home/oracle/app/oracle/product/11.2.0/client_1/bin": java.io.IOException: error=13, Permission denied
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:460)
        at java.lang.Runtime.exec(Runtime.java:593)
        at java.lang.Runtime.exec(Runtime.java:466)
        at com.handaer.cmd.CmdLauncher.executeCommand(CmdLauncher.java:23)
        at com.handaer.task.SqlLoadTask$1.run(SqlLoadTask.java:42)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303)
        at java.util.concurrent.FutureTask.run(FutureTask.java:138)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
Caused by: java.io.IOException: java.io.IOException: error=13, Permission denied
        at java.lang.UNIXProcess.<init>(UNIXProcess.java:148)
        at java.lang.ProcessImpl.start(ProcessImpl.java:65)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:453)
        ... 10 more
2014-02-12 08:06:02,688 [pool-1-thread-2] INFO com.handaer.task.SqlLoadTask - ==========waitFor返回值:0
2014-02-12 08:06:02,689 [pool-1-thread-2] INFO com.handaer.task.SqlLoadTask - 线程:pool-1-thread-2===入库 用时:0秒=== 命令:sqlldr userid=log/logpwd@192.168.0.122:1521/orcl readsize=20971520 bindsize=20971520 direct=true parallel=true log=/home/sqlload/192.168.0.116_PMS_BUSINESS_1392159000-20140212065000.log control=/home/sqlload/192.168.0.116_PMS_BUSINESS_1392159000-20140212065000.ctl
百思不得其解,难道是因为文件权限问题吗?有没有高手遇到过?

加载中
0
李学广

-rwxr-x--x. 1 oracle oinstall  1469905 2月   8 17:13 sqlldr

另外bin下的sqlldr是具有执行权限的,按理说不应该报出这样的错误啊

0
李学广

找到原因了,是拼接命令的时候有问题,我换成了数组,就完全ok了!

  /** 执行参数数组 */
    private static final String[] cmdarray =
    { sqlldrPath+"/sqlldr", "userid=log/logpwd@****** :1521/orcl", "control=", "", "direct=true", "log=", "", "skip=1",
            "errors = 50" };

返回顶部
顶部