`
单眼皮小猪
  • 浏览: 122766 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java调用exp备份oracle数据库解决进程挂起问题

 
阅读更多
oracle备份数据库,这个问题因为进程挂起很是让我费劲,最后还是多亏了网友的力量,顺利解决,但是项目在运行当中,不知道是什么原因还是会出现进程挂起问题,重启一起tomcat,这个问题就解决了,本人水平有限,不知道具体是什么问题。
现将能用的代码贴出来,备份,以待后用。
实现的功能:备份全部数据库、备份两张数据表
需要前台传递进来一个备份标识:1:备份全部数据库,2:备份两张数据表
类名:IEEM060501Action.java
package com.jysd.ms.action;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.Date;
import java.util.Properties;
import com.jysd.ms.exception.BaseException;
import com.jysd.ms.util.ReadSystemConfig;
import com.jysd.ms.util.TimeCountUtil;
import com.opensymphony.xwork2.ActionSupport;

public class IEEM060501Action extends ActionSupport {

	private static final long serialVersionUID = 1L;
	private Runtime runtime = Runtime.getRuntime();   
	private Process process = null ;   
    //返回前台数据
	private String message;
    //备份文件地址
    private String backupUrl ;
    //备份文件名

    private String dmpName;
    //备份方式
    private int backupMode;
    //备份类型
    private int backupType;
	private Properties properties = new Properties() ;
    /**
	* @方法名称: execute
	* @描述: 数据备份管理初始化方法   
	* 创建人:
	* @return String
	* @param @return     
	*/
	public String execute()throws BaseException{
		InputStream in = ReadSystemConfig.class.getClassLoader().getResourceAsStream("backupOracle.properties");
		try {
			properties.load(in);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		backupUrl = properties.getProperty("backupurl");
		return SUCCESS;
	}
	/**
	* @方法名称: backup
	* @描述: 备份数据库

	* 创建人:
	* @return String
	* @param @return
	* @param @throws BaseException     
	*/
	public String backup()throws BaseException{
		//从配置文件中读取数据库信息,并备份数据库
		boolean backupFlag = backupOracleDB(getExpString());
		if(backupFlag){
			message="备份成功!";
		}else{
			message="备份失败!";
		}
		return "backJson";
	}
   /**
	* @方法名称: backupOracleDB
	* @描述: 备份、还原 oracle 数据库的方法   
	* 创建人:
	* @return boolean
	* @param @param cmdStr 备份命令 ( 即导出 )
	* @param @return     
	*/
	public boolean backupOracleDB(String cmdStr) {   
		boolean isSuccess = true;
		try {   
			process = runtime .exec(cmdStr);
			String line = null; 
			BufferedReader br = new BufferedReader(new InputStreamReader(process.getErrorStream()));  
		   //读取ErrorStream很关键,这个解决了挂起的问题。  
		   while ((line = br.readLine()) != null){  
		        System.out.println(line);  
		    }  
		   br = new BufferedReader(new InputStreamReader(process.getInputStream()));  
		   while ((line = br.readLine()) != null){  
		        System.out.println(line);  
		    }  
		   //process.waitFor();  
			if(process.waitFor()!=0){
				isSuccess = false;
			}
		}catch (Exception e) {   
			e.printStackTrace();
			isSuccess = false;
		}   
		return isSuccess ;   
	}   
    /**
	* @方法名称: getLeftMenu
	* @描述: 获取备份数据库的执行语句,备份文件名称,以当前时间命名
	* @创建人:
	* @return String
	* @param @throws BaseException     
	*/
	private String getExpString()throws BaseException{
		StringBuffer sbu = new StringBuffer();
		try {
			InputStream in = ReadSystemConfig.class.getClassLoader().getResourceAsStream("backupOracle.properties");
			properties.load(in);
			 sbu.append("exp ");
			 sbu.append(properties.getProperty("username")).append("/");
			 sbu.append(properties.getProperty("password")).append("@");
			 //sbu.append(properties.getProperty("ipaddress")).append("/");
			 sbu.append(properties.getProperty("databasename")).append(" file=");
			 sbu.append(properties.getProperty("backupurl"));
			 Date date = new Date();
			 if(dmpName==null){
				 dmpName = TimeCountUtil.dateToString(date,"yyyy.MM.dd.HH.mm.ss");
			 }else{
				 dmpName += TimeCountUtil.dateToString(date,"yyyy.MM.dd.HH.mm.ss");
			 }
			 dmpName = dmpName.replace(" ","");
			 dmpName = dmpName.replace(".dmp","");
			 sbu.append(dmpName).append(".dmp");
			 //等于2,仅备份监测数据(实时表、日结表数据)
			 if(backupMode==2)
				 sbu.append(" TABLES=(").append(properties.getProperty("realtable")).append(",").append(properties.getProperty("daytable")).append(")");
	      } catch (Exception e) {   
	         e.printStackTrace();
	      }
	      System.out.println(sbu.toString());
		return sbu.toString();
	}
	/**
	 * 读取数据库信息

	 */
	/*private static Properties properties = new Properties() ;
	static {
        InputStream in = ReadSystemConfig.class.getClassLoader().getResourceAsStream("backupOracle.properties");
        try {
			properties.load(in);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}*/
	
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	public String getBackupUrl() {
		return backupUrl;
	}
	public void setBackupUrl(String backupUrl) {
		this.backupUrl = backupUrl;
	}
	public String getDmpName() {
		return dmpName;
	}
	public void setDmpName(String dmpName) {
		this.dmpName = dmpName;
	}
	public int getBackupMode() {
		return backupMode;
	}
	public void setBackupMode(int backupMode) {
		this.backupMode = backupMode;
	}
	public int getBackupType() {
		return backupType;
	}
	public void setBackupType(int backupType) {
		this.backupType = backupType;
	}
	
}


backupOracle.properties
username=1234
password=1234
ipaddress=192.168.1.126
backupurl=D\:/
databasename=orcl
realtable=table1
daytable=table2
分享到:
评论

相关推荐

    java实现oracle数据库备份.pdf

    ### Java 实现 Oracle 数据库备份的关键知识点 #### 一、背景与需求分析 在软件开发过程中,数据库备份是一项重要的工作,它可以确保数据的安全性,在发生意外情况时能够迅速恢复数据。传统的备份方式通常通过...

    java程序调用bat文件,执行oracel数据库备份

    这个批处理文件通常会包含一系列的DOS命令,用于调用Oracle的工具,如`expdp`(数据泵导出)或`exp`来执行数据库的备份。一个基本的`expdp`命令示例如下: ```bat expdp username/password directory=BACKUP_DIR dump...

    ORACLE数据库备份用bat脚本

    本文将详细讲解如何利用批处理脚本(BAT)进行Oracle数据库的备份,并探讨如何通过Java代码实现定时备份。 首先,让我们理解"Oracle数据库备份用bat脚本"的概念。批处理脚本是Windows操作系统中的一种命令文件,...

    oracle实现数据库的备份与还原

    本主题将深入探讨如何使用C#编程语言来实现Oracle数据库的备份与还原过程。 首先,理解Oracle数据库的备份原理是必要的。Oracle提供多种备份方式,包括物理备份(如数据文件、控制文件的拷贝)和逻辑备份(如导出/...

    java调用aoracle数据库

    java调用aoracle数据库

    labview 调用oracle数据库

    本篇将详细讲解如何利用LabVIEW调用Oracle数据库,包括ODBC连接、创建表、写入数据以及查询与更新操作。 首先,要实现LabVIEW与Oracle数据库的连接,我们需要借助ODBC(Open Database Connectivity)驱动程序。ODBC...

    java代码oracle数据库批量插入

    ### Java代码实现Oracle数据库批量插入的关键知识点 #### 1. JDBC连接配置 - **JDBC URL**: `jdbc:oracle:thin:@IP:1521:orcl`,这里的URL指定了连接到Oracle数据库的方式。其中`@IP:1521:orcl`中的IP是指数据库...

    本地java实现远程oracle备份还原

    本教程将详细阐述如何使用Java编程语言实现远程Oracle数据库的备份与还原功能,尤其适用于两台不在同一IP段的服务器之间操作。 首先,我们需要理解Oracle数据库备份的基本概念。备份是为了防止数据丢失,通常分为...

    java备份还原oracle数据库汇编.pdf

    【Java备份Oracle数据库】 在Java中,我们可以通过执行操作系统命令(DOS命令)来备份Oracle数据库。这个过程通常涉及到调用Oracle的`exp`或`expdp`实用程序,它是一个用于导出数据库对象的数据泵工具。在提供的...

    oracle数据库自动备份脚本

    本文将详细介绍一种通过`exp`命令配合`crontab`定时任务实现Oracle数据库自动备份的方法。这种方式适用于大多数Oracle环境,并提供了两种备份方案:一是针对特定用户的单独数据备份;二是通过SYS用户进行整个数据库...

    java备份还原oracle数据库.pdf

    Java通过`Runtime.getRuntime().exec()`方法可以执行操作系统命令,这在上述代码中用于调用Oracle的`exp`(导出)和`imp`(导入)工具,这两个工具分别用于数据库的备份和恢复。 2. **Oracle的exp和imp工具**: -...

    自动备份数据库java源码

    总的来说,这个Java源码项目提供了一个基础的SQL Server数据库自动备份解决方案,使用者可以根据自己的需求进行扩展,例如增加对其他数据库的支持,优化备份策略,或者添加更复杂的安全性和监控功能。对于学习数据库...

    Java连接oracle数据库实现成绩查询

    在本课程设计中,我们利用Java编程语言与Oracle数据库相结合,构建了一个功能完善的学生成绩管理系统。这个系统针对管理员、教师和学生三个角色,提供了不同的权限和操作功能,旨在实现成绩的有效管理和查询。 首先...

    java调用oracle存储过程或者函数

    在Java编程中,调用Oracle数据库的存储过程和函数是常见的任务,这通常涉及到JDBC(Java Database Connectivity)API的使用。以下将详细介绍这个过程,包括必要的步骤、使用的类和方法,以及可能遇到的问题和解决...

    vb.net操作Oracle数据库增删改查以及存储过程调用1

    VB.NET 操作 Oracle 数据库增删改查以及存储过程调用 在本篇文章中,我们将详细介绍如何使用 VB.NET 操作 Oracle 数据库,包括增删改查操作以及存储过程的调用。 VB.NET 操作 Oracle 数据库的准备工作 在开始操作...

    Oracle数据库备份恢复工具

    本工具"Oracle数据库备份恢复工具"是基于MFC(Microsoft Foundation Classes)界面开发的,旨在提供一个简单易用的平台,帮助用户轻松完成Oracle数据库的备份与恢复任务。 首先,我们来了解Oracle数据库备份的基本...

    ORACLE数据库 ORACLE数据库

    Oracle数据库是全球最广泛使用的商业关系型数据库管理系统之一,由美国甲骨文公司(Oracle Corporation)开发和维护。Oracle数据库以其高效、稳定和强大的功能在金融、电信、医疗、政府等多个领域得到广泛应用。本篇...

    unix AIX 环境下 exp 备份 Oracle 分区表实例

    本文将深入解析如何在Unix AIX环境下使用exp工具备份Oracle分区表,包括环境配置、备份策略及恢复流程,旨在提供一个全面的操作指南。 ### 环境配置 #### 系统与软件版本 - **硬件平台**: IBM P570服务器,为备份...

Global site tag (gtag.js) - Google Analytics