更多讨论请见 
http://community.csdn.net/Expert/topic/4166/4166029.xml?temp=.4519922环境:Windows 2000, Oracle9.1 Weblogic
我调用以下脚本备份数据,为什么不能备份?
生成了 bac.dmp文件,但是速度很慢,好像一直卡死了,只有2k,我在DOS模式下,执行:
exp testgs/[email protected] file=e:\\test\\c.dmp owner=testgs
生成的文件是42K。
问题在哪里?请高手指点,谢谢!<%@ page contentType="text/html;charset=gb2312" errorPage="error.jsp"%><%@ page import="java.sql.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.text.*"%><script language="JavaScript">
<%   
   String strCmd = "exp testgs/[email protected] file=e:\\test\\abc.dmp owner=testgs";
   Process p = Runtime.getRuntime().exec(strCmd);
   try {
      BufferedReader bufferedReader = new BufferedReader(new
          InputStreamReader(p.getInputStream()));
      String ls_1;
      while ( (ls_1 = bufferedReader.readLine()) != null) {
        System.out.println(ls_1);
      }
      p.waitFor();
    }
    catch (InterruptedException ex1) {
      System.out.println(ex1.getMessage());
    }
    %>
      window.alert("备份成功");
</script>
有同事说是这样的情况:
直接在DOS模式下执行bat文件,用户是系统登陆的用户,有exp的操作权限
如果通过B/S执行bat文件,用户是另一个身份,较低级别的用户。
各位如何看待这个问题?

解决方案 »

  1.   

    你在你的E:\test\ 这个目录下 写个批处理 例如a.bat
    内容如下 exp testgs/[email protected] file=%date:~-10%.dmp
    然后在写个javabean来调用这个批处理
    一般 那个批处理可以写到window的计划任务里面去 每天 或是每月备份一次 都可以
      

  2.   

    上面 要是考虑安全性的话 备份全部都放在服务器端
    因为用户名和密码都是写在那个批处理上面在
    所以只要那个批处理足够安全  在用javabean 或者servlet调用来备份也是安全的
    要么干脆在服务器上面的计划任务 也是安全的
      

  3.   

    谢谢楼上各位。
    我找了一下资料,也询问了几个做Java/Oracle朋友的朋友,他们说都是采用自动备份的方式,也就是定时备份,目前我给客户那边也是用自动备份的方式做的。
    当时发这个帖子,主要是因为需求里面:客户要求手动备份/恢复数据库,业务员不太懂技术,客户说要怎么做,他全部答应了,而且写在合同中了。我是在他们签了合同后,才接手这个项目的。我把问题情况再说明一下:
    假定 backup.bat文件是一个备份批处理。
    Process p = Runtime.getRuntime().exec("cmd.exe /c backup.bat"); // 此处省略backup.bat的路径
    那么出现这样情况:
    exp命令阻塞,cpu占有率为0,当我停止Weblogic的时候,exp命令开始执行,并且备份成功。
    现在怀疑是不是exp命令不能再Java中采用多线程的方式调用。