各位Oracle及Linux高手帮帮忙啊。
B/S结构的系统,Linux+Oracle10g+Apache Tomcat。
客户要求在系统中实现对数据库的备份,目前看就只有通过Runtime类调用EXP命令实现。
问题:据现在所知,系统是以root用户在Linux下运行的,但Oracle是用系统用户oracle(用户组:dba,oinstall)创建的,所以现在的问题是程序中调用如下语句不成功,发生“ora-12546 TNS:权限被拒绝”错误:
String cmdArray[] =new String[]{"sh","-c","  "};
cmdArray[2] = "exp system/"+password+" file="+path+" full=y";
Process proc = Runtime.getRuntime().exec(cmdArray);
new StreamThread(proc.getErrorStream(), "INFO").start();
new StreamThread(proc.getInputStream(), "INFO").start();
int exitValue = proc.waitFor();其中StreamThread是一个内部类:
class StreamThread extends Thread {        InputStream is;
        String type;        StreamThread(InputStream is, String type) {
            this.is = is;
            this.type = type;
        }        public void run() {
            try {
                InputStreamReader isr = new InputStreamReader(is);
                BufferedReader br = new BufferedReader(isr);
                String line = null;
                while ((line = br.readLine()) != null) {
//                    System.out.println(type + ">" + line);
                }
            } catch (IOException ioe) {
                
       }
}执行后exitValue开始为127(是因为root用户找不到exp这个命令文件),等把root用户添加到dba和oinstall组并为root用户设好Oracle环境变量后,exitValue返回1(就是:“ora-12546 TNS:权限被拒绝”错误)。请问各位大哥大姐,该如何解决这个权限问题?希望能提供一个完整的思路、方案,小弟感激不尽!

解决方案 »

  1.   

    不懂linux和java,帮你顶下
    网上搜下,大致有2种原因,你可以参考
    1.防火墙
    2.读取环境变量http://www.chinalinuxpub.com/bbs/showthread.php?t=6959用sqlplus登录能正常连接么
      

  2.   

    回复楼上,谢谢关注。
    Oracle是正常的,Linux下目前没有防火墙,而且,直接在安装Oracle的那个操作系统用户下面写个Java程序,在里面调用EXP命令执行导出备份,然后直接在终端下编译运行,是可以成功执行的。但是放在web工程里面就不行,找不到EXP命令。
    现在Tomcat是以安装Oracle的那个操作系统用户启动的,工程发布后其所属用户也就是这个用户,但Java里面还是找不到EXP命令。
      

  3.   

    应该是路径问题,你打印一下当前路径
    在exp前面加上相对于当前路径来说exp的位置,应该是ORACLE_HOME/bin下面