java oracle数据备份_Java备份Oracle数据库

package org.ybygjy.basic.oracle;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.nio.ByteBuffer;

import java.nio.channels.Channels;

import java.nio.channels.FileChannel;

import java.nio.channels.ReadableByteChannel;

import java.util.ArrayList;

import java.util.List;

import java.util.Map;

/**

* java外部系统命令模式备份数据库

* @author WangYanCheng

* @version 2010-6-19

*/

public class BackupOracleDatabase {

/**

* 封装执行入口

*/

public void doWork() {

InnerClass innerInst =

new InnerClass("DB_USER", "DB_PASS", "127.0.0.1:1521/ORCL", "E:/dbback/BACK201006.DMP");

Thread thInst = new Thread(innerInst);

thInst.start();

}

/**

* 用于分担执行命令

* @author WangYanCheng

* @version 2010-6-19

*/

class InnerClass implements Runnable {

/** 用户名 */

private String userName;

/** 密码 */

private String userPass;

/** 服务地址 */

private String serverAddr;

/** 输出文件路径 */

private String outFilePath;

/**

* constructor

* @param userName userName

* @param userPass userPass

* @param serverAddr 服务地址必须带端口/SID

* @param outFilePath outPath

*/

public InnerClass(String userName, String userPass, String serverAddr, String outFilePath) {

this.userName = userName;

this.userPass = userPass;

this.serverAddr = serverAddr;

this.outFilePath = outFilePath;

}

/**

* 提供执行的命令串

* @return commStr 命令串

*/

private List doBuildCommand() {

List rtnList = new ArrayList();

rtnList.add("EXP");

rtnList.add("@USER@/@PASSWORD@@@SERVER@".replaceAll("@USER@", this.userName)

.replaceAll("@PASSWORD@", this.userPass).replaceAll("@SERVER@", this.serverAddr));

rtnList.add("FILE=/"@FILE@/"".replaceAll("@FILE@", this.outFilePath));

rtnList.add("TABLES=(SY_TABLE_DEF)");

return rtnList;

}

/**

* 构建ProcessBuilder实例

* @param workDir 当前进程工作目录

* @return pbInst ProcessBuilder实例

* @see ProcessBuilder

*/

private ProcessBuilder buildProcessBuilder(File workDir) {

new ProcessBuilder();

List commandArray = (doBuildCommand());

ProcessBuilder pbInst = new ProcessBuilder(commandArray);

pbInst.command(commandArray);

Map envMap = pbInst.environment();

envMap.clear();

envMap.putAll(System.getenv());

pbInst.directory(workDir);

pbInst.redirectErrorStream(true);

return pbInst;

}

/**

* 线程执行入口

*/

public void run() {

File tmpOutFile = new File(this.outFilePath);

File outDir = tmpOutFile.getParentFile();

ProcessBuilder pbInst = buildProcessBuilder(outDir);

try {

Process proInst = pbInst.start();

final InputStream ins = proInst.getInputStream();

File outFile = new File(outDir, "exp.log");

outFile.createNewFile();

final FileChannel focInst = new FileOutputStream(outFile).getChannel();

Thread innerTh = new Thread() {

ByteBuffer byteBuffer = ByteBuffer.allocate(1024);

public void run() {

ReadableByteChannel rbcObj = Channels.newChannel(ins);

try {

while (rbcObj.read(byteBuffer) != -1) {

byteBuffer.flip();

focInst.write(byteBuffer);

byteBuffer.clear();

}

} catch (IOException ioe) {

ioe.printStackTrace();

}

}

};

// innerTh.setDaemon(true);

innerTh.start();

} catch (IOException ioe) {

ioe.printStackTrace();

}

}

}

/**

* 测试入口

* @param args 参数列表

*/

public static void main(String[] args) {

new BackupOracleDatabase().doWork();

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值