热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java调用bat执行的备份Oracle数据库类-mysql教程

packagecom.buckupDB;importjava.io.BufferedReader;importjava.io.File;importjava.io.FileInputStream;importjava.io.Fil

package com.buckupDB;import java.io.BufferedReader;import java.io.File;import java.io.FileInputStream;import java.io.Fil

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;
}

}

linux


推荐阅读
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ... [详细]
  • 本文介绍了关于apache、phpmyadmin、mysql、php、emacs、path等知识点,以及如何搭建php环境。文章提供了详细的安装步骤和所需软件列表,希望能帮助读者解决与LAMP相关的技术问题。 ... [详细]
  • 标题: ... [详细]
  • Oracle优化新常态的五大禁止及其性能隐患
    本文介绍了Oracle优化新常态中的五大禁止措施,包括禁止外键、禁止视图、禁止触发器、禁止存储过程和禁止JOB,并分析了这些禁止措施可能带来的性能隐患。文章还讨论了这些禁止措施在C/S架构和B/S架构中的不同应用情况,并提出了解决方案。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 分享css中提升优先级属性!important的用法总结
    web前端|css教程css!importantweb前端-css教程本文分享css中提升优先级属性!important的用法总结微信门店展示源码,vscode如何管理站点,ubu ... [详细]
  • Android日历提醒软件开源项目分享及使用教程
    本文介绍了一款名为Android日历提醒软件的开源项目,作者分享了该项目的代码和使用教程,并提供了GitHub项目地址。文章详细介绍了该软件的主界面风格、日程信息的分类查看功能,以及添加日程提醒和查看详情的界面。同时,作者还提醒了读者在使用过程中可能遇到的Android6.0权限问题,并提供了解决方法。 ... [详细]
  • 大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记
    本文介绍了大数据Hadoop生态(20)MapReduce框架原理OutputFormat的开发笔记,包括outputFormat接口实现类、自定义outputFormat步骤和案例。案例中将包含nty的日志输出到nty.log文件,其他日志输出到other.log文件。同时提供了一些相关网址供参考。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • PHP组合工具以及开发所需的工具
    本文介绍了PHP开发中常用的组合工具和开发所需的工具。对于数据分析软件,包括Excel、hihidata、SPSS、SAS、MARLAB、Eview以及各种BI与报表工具等。同时还介绍了PHP开发所需的PHP MySQL Apache集成环境,包括推荐的AppServ等版本。 ... [详细]
author-avatar
ZhuJiongJiongnu_441
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有