当前位置:  数据库>oracle

Java 调用bat执行的备份Oracle数据库 类

    来源: 互联网  发布时间:2017-04-04

    本文导语: package com.buckupDB; import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.FileNotFoundException;import java.io.FileOutputStream;import java.io.IOException;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.io.PrintWriter;import ...

package com.buckupDB;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.swing.filechooser.FileSystemView;
import org.apache.tomcat.dbcp.dbcp.BasicDataSource;
import com.pm360.mda.platform.db.DBConn;
import com.pm360.mda.platform.util.DBUtil;
import com.pm360.mda.platform.util.Logger;
import com.pm360.mda.platform.util.StringUtil;























/**
 *
 * 数据备份  impdp / expdp
 * @author ZQD32
 *
 */
public class BuckupdpDB {






 /**
  * //获取桌面路径
  * @return
  */
  private static String getDesktopPath()
  {
   FileSystemView fsv = FileSystemView.getFileSystemView();
   File file= fsv.getHomeDirectory();
       return file.getPath();
  }
 
 
  /**
   * 获取时间字符
   * @return
   */
  private static String getDateTime()
  {
   Date date=new Date();
   String str=date.toLocaleString();
   str=str.replaceAll(":", "-");
   str=str.replaceAll(" ", "-");
      return str;
  }
 
  /**开启指定进程
   * @param map
   */
  private static void runingProcess(Map map)
  {
   String strPath = StringUtil.formatDbColumn(map.get("Paths"));
   strPath = strPath.replace(" ", "" "");
   try
   {
    StringBuilder sb=new StringBuilder("cmd /c start "+strPath+"\temp.bat");
    Process p = Runtime.getRuntime().exec(sb.toString());
  }
   catch (IOException e)
   {
   e.printStackTrace();
  }
  }
 
  /**
   * 执行备份文件
   * @return
   * @throws IOException
   */
  public static String expingProcess(Map map)
  {  
   if(productionExpBat(map).equalsIgnoreCase("good"))
   {
    runingProcess(map);
   }
   else
   {
    return "false";
   }
    return "true";
  }
 
  /**
   * 执行导入文件
   * @return
   * @throws IOException
   */
  public static String impingProcess(Map map)
  {
   if(productionImpBat(map).equalsIgnoreCase("good"))
   {
    runingProcess(map);
   }
   else
   {
    return "false";
   }
    return "true";
  }
 
  /**
   * 获取 连接信息
   * @param sid
   * @param user
   */
  private static Map getConnInfo()
  {
   Map map =new HashMap();
  
   try {
    BasicDataSource init = (BasicDataSource)new InitialContext().lookup("java:comp/env/jdbc/**");
    String url =init.getUrl();
    //获取Oracle数据库实例名
    map.put("sid", url.substring(url.lastIndexOf(":")+1));
    //获取oracle数据库登录名
    map.put("user",init.getUsername());
    //获取oracle数据库登密码
    map.put("pwd", init.getPassword());
   } catch (NamingException e) {
    e.printStackTrace();
   }
   return map;
  }
 
 
 /**
  *
  * 生成 导出配置Bat文件
  */
  private static String productionExpBat(Map map)
  {
      //得到数据库登录的信息
   Map ConnInfoMap =getConnInfo();
   //生成数据泵配置文件
   productionExpdpPar(map);
   //设置一个标志
   String flag="";
   //创建个缓存 数据集
   List tmpBat=new ArrayList();
   //获取模板 文件
   File Afile=new File(StringUtil.formatDbColumn(map.get("Paths"))+"\processBat\dp\expdpDB.bat");
   //生成空白的bat临时文件
   File Bfile=new File(StringUtil.formatDbColumn(map.get("Paths"))+"\temp.bat");
   //申明读取缓冲器
   BufferedReader br=null;
   try {
    //设置读取缓冲器 文件指向
    br = new BufferedReader(new InputStreamReader(new FileInputStream(Afile)));
   } catch (FileNotFoundException e1) {
    e1.printStackTrace();
   }
   //获取   rar 备份 文件的名字
   String filename=StringUtil.formatDbColumn(map.get("FILENAME"));
   if(filename==null||filename.equals("")){
    //默认为 DBProjBuckup
    filename="DBProjBuckup";
   }
   filename=filename+"_"+getDateTime();







































































































































   try {
    try {
     while(br.ready())//判断是否还有可读信息
     {
      //读取一行数据
      String str=br.readLine().toString();
      //设置数据库的实例
      if(str.startsWith("set sid")){
       str="set sid="+ConnInfoMap.get("sid");
      }
      //设置数据登录名
      else if(str.startsWith("set user")){
       str="set user="+ConnInfoMap.get("user");
      }
      //设置数据登密码
      else if(str.startsWith("set pwd")){
       str="set pwd="+ConnInfoMap.get("pwd");;
      }
      //设置备份项目id过滤
      else if(str.startsWith("set proj_id")){
       str="set proj_id="+StringUtil.formatDbColumn(map.get("PROJ_ID"));
      }
      //设置备份文件名
      else if(str.startsWith("set filename")){
       str="set filename="+filename;
      }
      //桌面路径
      else if(str.startsWith("set Desktop")){
       str="set Desktop="+getDesktopPath();
      }
      //dmp文件存放路径**************该路径需要查取的
      else if(str.startsWith("set savePth")){
       str="set savePth="+getDumpPath();
      }
      tmpBat.add(str);
     }
     //关闭缓冲器
     br.close();
    } catch (IOException e) {
     try {
      br.close();
     } catch (IOException e1) {
      e1.printStackTrace();
     }
     e.printStackTrace();
    }
   
    //设定写数据缓冲器   文件指向
    PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(Bfile)),true);
    for(String str : tmpBat)
    {
     //按行写入
     pw.println(str);  
    }
    //pw.println("del /q BuckupParfile.par"); 
    //pw.println("del /q temp.bat"); 
   
    //关闭缓冲器
    pw.close(); 
   
    flag="good";
   } catch (FileNotFoundException e) {
    flag="error";
    e.printStackTrace();
   }  
   return flag;
  }
 
  /**
   * 获取数据泵数据存储路径
   * @return
   */
  private static String getDumpPath()
  {
  //select OS_PATH from sys.dir$ where  OS_PATH like '%dpdump'
   String dumpPath=null;
   Connection conn=null;
   try {
   conn=DBConn.getConnection("***");//该方法自己写
   dumpPath = (String)DBUtil.getResultFieldValue(conn, "select OS_PATH from sys.dir$ where  OS_PATH like '%\dpdump\'");
   } catch (SQLException e) {
   Logger.error(e);
  }finally{
   try
   {
    conn.close();
   } catch (SQLException e)
   {
    Logger.error(e);
   }
  }
   return dumpPath;
  }
 
  /**
   * 配置数据泵的参数
   * @param map
   * @return
   */
  private static String productionExpdpPar(Map map)
  {
      String  proj_id = StringUtil.formatDbColumn(map.get("PROJ_ID"));
   //获取模板 文件
   File Afile=new File(StringUtil.formatDbColumn(map.get("Paths"))+"\processBat\dp\BuckupParfile.par");
   //生成空白的bat临时文件
   File Bfile=new File(StringUtil.formatDbColumn(map.get("Paths"))+"\BuckupParfile.par");
   try {
    //申明读取缓冲器  //设置读取缓冲器 文件指向
    BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(Afile)));











































































































    //设定写数据缓冲器   文件指向
    PrintWriter pw= new PrintWriter(new OutputStreamWriter(new FileOutputStream(Bfile)),true);
    
    try {
     while(br.ready())//判断是否还有可读信息
     {
      //读取一行数据
      String str=br.readLine().toString();
      str=str.replace("%proj_id%", proj_id);
      pw.println(str);  
     }
     br.close();
     pw.close();
    } catch (IOException e) {
     e.printStackTrace();
    }
   } catch (FileNotFoundException e) {
   e.printStackTrace();
   }
   return "";
  }
 
  /**
   * 生成导入配置bat文件
   * @param map
   * @return
   */
  private static String productionImpBat(Map map)
  {
      //获取   rar 备份 文件的名字
   String FilePath=StringUtil.formatDbColumn(map.get("FilePath"));
   String FileName = FilePath.substring(FilePath.lastIndexOf('\')+1);
      
      //生成 导入前清理 sql 文件 
      productionClearSql(map);
     
      Map ConnInfoMap =getConnInfo();
  
  
  
   //设置一个标志
   String flag="";
   //创建个缓存 数据集
   List tmpBat=new ArrayList();
   //获取模板 文件
   File Afile=new File(StringUtil.formatDbColumn(map.get("Paths"))+"\processBat\dp\impdpDB.bat");
   //生成空白的bat临时文件
   File Bfile=new File(StringUtil.formatDbColumn(map.get("Paths"))+"\temp.bat");
   //申明读取缓冲器
   BufferedReader br=null;
   try {
    //设置读取缓冲器 文件指向
    br = new BufferedReader(new InputStreamReader(new FileInputStream(Afile)));
   } catch (FileNotFoundException e1) {
    e1.printStackTrace();
   }
  
   try {
    try {
     while(br.ready())//判断是否还有可读信息
     {
      //读取一行数据
      String str=br.readLine().toString();
      //设置数据库的实例
      if(str.startsWith("set sid")){
       str="set sid="+ConnInfoMap.get("sid");
      }
      //设置数据登录名
      else if(str.startsWith("set user")){
       str="set user="+ConnInfoMap.get("user");
      }
      //设置数据登密码
      else if(str.startsWith("set pwd")){
       str="set pwd="+ConnInfoMap.get("pwd");
      }
      //设置备份文件 路径
      else if(str.startsWith("set FilePath")){
       str="set FilePath="+FilePath;
      }
      //dump路径
      else if(str.startsWith("set Dumpfile")){
       str="set Dumpfile="+getDumpPath();
      }
      //文件名
      else if(str.startsWith("set FileName")){
       str="set FileName="+FileName;
      }
      tmpBat.add(str);
     }
     //关闭缓冲器
     br.close();
    } catch (IOException e) {
     try {
      br.close();
     } catch (IOException e1) {
      e1.printStackTrace();
     }
     e.printStackTrace();
    }
   
    //设定写数据缓冲器   文件指向
    PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(Bfile)),true);
    for(String str : tmpBat)
    {
     //按行写入
     pw.println(str);  
    }
    pw.println("ECHO watting …………………………");
    pw.println("sqlplus %user%/%pwd%@%sid%  @UpdateParentId.sql ");
    pw.println("del /q UpdateParentId.sql");
    pw.println("del /q impClearing.sql");
    pw.println("del /q temp.bat");
    //关闭缓冲器
    pw.close(); 
    flag="good";
   } catch (FileNotFoundException e) {
    flag="error";
    e.printStackTrace();
   }  
  
   return flag;
  }
























































































































  /**
   * 生成导入前sql清理文件
   * @param map
   * @return
   */
  private static String productionClearSql(Map map)
  {
    //获取项目id
    //StringUtil.formatDbColumn(map.get("PROJ_ID"))  这个是即将导入  项目的   新的父id
      String proj_id =getProjId(map);
   //创建个缓存 数据集
   List tmpBat=new ArrayList();
   //获取模板 文件
   File Afile=new File(StringUtil.formatDbColumn(map.get("Paths"))+"\processBat\dp\impClearing.sql");
   //生成空白的bat临时文件
   File Bfile=new File(StringUtil.formatDbColumn(map.get("Paths"))+"\impClearing.sql");
   //申明读取缓冲器
   BufferedReader br=null;
   try {
    //设置读取缓冲器 文件指向
    br = new BufferedReader(new InputStreamReader(new FileInputStream(Afile)));
   } catch (FileNotFoundException e1) {
    e1.printStackTrace();
   }
   try {
    try {
     while(br.ready())//判断是否还有可读信息
     {
      //读取一行数据
      String str=br.readLine().toString();
      //设置备份文件名  %proj_id%
      str = str.replace("%proj_id%", proj_id);
      tmpBat.add(str);
     }
     //关闭缓冲器
     br.close();
    } catch (IOException e) {
     try {
      br.close();
     } catch (IOException e1) {
      e1.printStackTrace();
     }
     e.printStackTrace();
    }
   
    //设定写数据缓冲器   文件指向
    PrintWriter pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(Bfile)),true);
    for(String str : tmpBat)
    {
     //按行写入
     pw.println(str);  
    }
    pw.println("exit");  
    //关闭缓冲器
    pw.close(); 
   } catch (FileNotFoundException e) {
    e.printStackTrace();
   }  
  
   return "";
  }



























































 
  /**
   * 生成导入   项目的id  和   更新语句
   * @param map
   * @return
   */
  private static String getProjId(Map map)
  {
   String FilePath=StringUtil.formatDbColumn(map.get("FilePath"));
   FilePath = FilePath.substring(FilePath.lastIndexOf("-")+1, FilePath.lastIndexOf('.'));
  
   File UpParentId=new File(StringUtil.formatDbColumn(map.get("Paths"))+"\UpdateParentId.sql");
   PrintWriter pw;
  try {
   pw = new PrintWriter(new OutputStreamWriter(new FileOutputStream(UpParentId)),true);
   pw.println("update cm_proj t  set t.parent_proj_id='"+StringUtil.formatDbColumn(map.get("PROJ_ID"))+"',t.parent_path=('"
     +getProjPath(StringUtil.formatDbColumn(map.get("PROJ_ID")))+"'||';'||'"+FilePath+"') where t.proj_id='"+FilePath+"';"); 
   pw.println("commit;");
   pw.println("exit");
   //关闭缓冲器
   pw.close();
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  }
   return FilePath;
  }
 
  /**
   * 获取父级路径
   * @param map
   * @return
   */
  private static String getProjPath(String proj_id)
  {
   String projPath=null;
   Connection conn=null;
   try {
   conn=DBConn.getConnection("***");//该方法自己写
   projPath = (String)DBUtil.getResultFieldValue(conn, "select  parent_path  from cm_proj  where proj_id ='"+proj_id+"'");
   conn.close();
  } catch (SQLException e) {
   Logger.error(e);
  }finally{
   try
   {
    conn.close();
   } catch (SQLException e)
   {
    Logger.error(e);
   }
  }
   return projPath;
  }



















































}


    
 
 

您可能感兴趣的文章:

  • VB编写的DLL不能被JAVA调用,用C将VB编写的DLL包装起来,做成一个新的DLL;用C编写的DLL可以被JAVA调用,用JAVA再进行一层的包装,因为JAV
  • 请问从一个java程序中如何调用另一java程序,并控制可以其状态(最小化、最大化、结束程序),还有怎样知道那个被调用的程序结束。
  • 可不可以用java调用其他语言的编译结果?(好象asp调用com那样)
  • 请问如何在Java中调用一个VB所写的DLL?如何调用这个Dll的方法?如何取得和设置这个Dll的属性值?谢谢!
  • ###java调用COM组件或COM调用java组件(EJB)解决办法。###
  • java线程怎么调用java的application.class?
  • 求救!!如何在java程序中调用外部非java的exe文件?
  • 急!请问有分析java程序性能瓶颈的工具吗?例如,统计 java 程序中函数调用次数?
  • java.awt 和java.util都有List,想调用awt的List而出现Ambiguous class错误怎么办?
  • 一个.java文件中怎样来调用另一个.java文件中的变量及其它东西!
  • java调用sh脚本遇到export命令会卡住,sh不能调用子sh
  • Java能调用OLE对象吗?怎样利用Java生成Excel报表?
  • java打包后如何调用?
  • 请问Java可否调用MsSQL的存储过程,如何调用?
  • 奇怪?我在jsp中调用java类。java类本身编译没错,但jsp中的引用Tomcat总是报错。
  • java能否调用dll或ocx
  • 如何用java调用word?来者给分!·!!!!!
  • 怎么在java里调用一个oracle的procedure呢?
  • 我在APPLET里调用JAVAMAIL发邮件,出现java.security.AccessControlException: access denied (java.util.PropertyPermission * read,write)的错误???
  • 求教!!!VC应用调用Java模块可行吗?
  • 通过java备份恢复mysql数据库的实现代码
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • redhat7.3下,java程序打印中文直接用java命令执行正常,用crontab执行java命令为乱码
  • 如何用JAVA执行本机Linux操作系统的可执行文件?一定给分!在线等待!
  • 我刚看java,知道它的目标代码是解释执行的,目标执行速度快吗?
  • 怎么在java程序中执行系统命令或其他可执行程序(像批处理一样)?
  • 请问JAVA如何执行(调用)操作系统命令,如dir,然后把执行结果存入变量或文件,谢谢!
  • 谁有办法用java执行于java.exe不在一个目录的class文件?
  • 在java中如何启动非java的可执行程序?
  • java里有什么函数可以检查 java 代码并执行它?
  • 请问大侠:都说JSP比ASP执行速度快, 但这和JAVA本身速度慢(靠虚拟机执行) 有何关系???
  • 我用telnet登陆到linux下运行了一个java程序,在关闭了telnet后怎么能让这个java程序继续执行
  • 我用telnet登陆到linux下运行了一个java程序,在关闭了telnet后怎么能让这个java程序继续执行,请高手指点一下
  • 请问大侠:都说JSP比ASP执行速度快, 但这和JAVA本身速度慢(靠虚拟机执行)有何关系???
  • java怎样生成可执行文件?
  • msdos中如何用java命令执行程序
  • 急求:如何在linux定期执行某个java程序?(在线等!)
  • 如何定时执行一个java程序
  • java文件的执行问题.
  • 我在执行javac命令的时候没有问题,但是在执行java命令的时候却报如下错误
  • TEXTPAD怎么执行JAVA 的?
  • 请问如何在Java中执行SQL的块语句?
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3