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调用aoracle数据库
Web方式备份数据库,备份是时,调用WinRAR进行压缩存储。备份之后提供ftp下载页面进行下载。... 解决无需控制服务器就能备份oracle数据库的目的。C#2003+asp.net1.1开发,运行时,请配置好"Web.config"中的所有配置项.
NULL 博文链接:https://weishaoxiang.iteye.com/blog/1237809
自己写的小程序:自动定时定点备份oracle数据库,可以任意设置多个时间点、时间周期备份数据库,比如备份时间点设置为7点、13点、21点,时间周期为30天。那么第31天7点的备份,将冲点第一天7点的备份,以免硬盘空间...
通过odbc连接oracle数据库,可以用来连接数据库,写入数据库,查询及更新
ORACLE数据库备份用bat脚本 基于imp和exp自已写的bat脚本,轻松实现备份数据 还可以自已写一个JAVA代码来调用实现定时批量备份
java调用oracle存储过程或者函数
本文讲述如何在Oracle通过任务和管道的应用,异步调用存储过程的方法。并且介绍了其基本原理和具体实现测试。
2、调用Oracle内置的Exp.exe程序导出指定Oracle用户的所有数据对象; 3、可设置备份时间,可根据当前数据导出时间命名导出文件,可使用Zip格式压缩导出文件; 4、保存导出日志文件,记录命令行和窗口输出...
vb.net操作Oracle数据库增删改查以及存储过程调用1
java链接oracle数据库生成xml文件,通过dom4j-1.6.1.jar为核心的方法,链接oracle数据库,在规定的目录下生成xml文件。xml文件带规定格式。
使用Java操作oracle数据库 调用存储过程
使用java调用timesten实现Oracle入库 1、要安装好timesten 2、需要配好system dsn ttdemo 3、创建表和存储过程 以上略 4、java内容如下: package com; import java.sql.Connection; import ...
oracle insert数据成功之后调用触发器,触发器调用存储过程,存储实时调用java http
Java调用oracle存储过程
描述了如何对Oracle数据库进行设置,并给出了利用Oracle数据库调用编译完成的Java类的方法
java调用access数据库
这是Oracle数据库连接封装类,许多刚学习数据库的人不知道怎么使用Java连接Oracle数据库,这里我给出封装类,大家可以直接调用。
你还在为如何调用oracle中的存储过程和函数而烦恼吗,请看看该文档。
Java调用oracle函数返回oracle类(类似)集合