各位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:权限被拒绝”错误)。请问各位大哥大姐,该如何解决这个权限问题?希望能提供一个完整的思路、方案,小弟感激不尽!
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:权限被拒绝”错误)。请问各位大哥大姐,该如何解决这个权限问题?希望能提供一个完整的思路、方案,小弟感激不尽!
网上搜下,大致有2种原因,你可以参考
1.防火墙
2.读取环境变量http://www.chinalinuxpub.com/bbs/showthread.php?t=6959用sqlplus登录能正常连接么
Oracle是正常的,Linux下目前没有防火墙,而且,直接在安装Oracle的那个操作系统用户下面写个Java程序,在里面调用EXP命令执行导出备份,然后直接在终端下编译运行,是可以成功执行的。但是放在web工程里面就不行,找不到EXP命令。
现在Tomcat是以安装Oracle的那个操作系统用户启动的,工程发布后其所属用户也就是这个用户,但Java里面还是找不到EXP命令。
在exp前面加上相对于当前路径来说exp的位置,应该是ORACLE_HOME/bin下面