Java备份Oracle数据库
Java线程、Process、ProcessBuilder
2010 年 6 月 20 日
文章内容描述了使用Java执行外部Oracle导出命令备份数据库功能的示例,依据此例子进行修改制造一些bug,然后将会对Java外部命令这块会有一个更加清晰的认知(个人观点仅供参考,不许拍砖,哈)
小细节
-
·试着把innerTh.start()这段给注释掉,然后再把用户名或密码写错。·有些程序是不会在命令行有输出的,比如最直接的plsqldev.exe、MindManager.exe·试着把将要执行的命令改成我们本地相关.exe程序,如上面所例或干脆TM.exe试试。
|
回页首
|
|
代码示例:
[java] view plaincopy print?
- 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 服务地址必须带<strong>端口</strong>/<strong>SID</strong>
- * @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();
- }
- }
|
转载于:https://www.cnblogs.com/telwanggs/p/6255087.html
Java备份Oracle数据库相关推荐
- Java web程序中备份oracle数据库
Java web程序中备份oracle数据库 1.生成备份文件: public ActionForward createDmp(ActionMapping mapping, ActionForm fo ...
- java对Oracle数据库查询_java 连接Oracle数据库 查询
java 连接Oracle数据库 查询 (2014-03-03 16:07:15) 标签: it 在ADF要先引入jar包 Oracle JDBC ;不然加载驱动不会成功. public static ...
- java中oracle.链接,java连接Oracle数据库的方法解析
本文主要对java连接Oracle数据库方法进行步骤解析,具有很好的参考价值,需要的朋友一起来看下吧 Oracle数据库先创建一个表和添加一些数据 1.先在Oracle数据库中创建一个student表 ...
- scala 连接oracle_一分钟教你学会用java连接Oracle数据库
package java_jdbc; //java连接Oracle数据库 import java.sql.Connection; import java.sql.DriverManager; impo ...
- oracle出错如何备份数据,备份oracle数据库出错
备份oracle数据库出错 input datafile fno=00027 name=/index/neas_standard01.dbf input datafile fno=00035 name ...
- oracle权限培训,Java培训-ORACLE数据库学习【2】用户权限
查询用户拥有的权限: 1.查看所有用户:select *from dba_users;select *from all_users;select *from user_users; 2.查看用户或角色 ...
- Windows下自动备份Oracle数据库
Windows下自动备份Oracle数据库 先说说为啥要搞这么个玩意 那是上线前几天[这不是讲故事],测试环境用的数据库崩了[为啥崩了不知道].之前造的一堆测试数据全都没得了[].然后急急忙忙的恢复环 ...
- java访问oracle集群,JAVA查询Oracle数据库集群连接字符串
下载必备最新排行装机分类.游戏手机驱动源码LinuxMac小游戏.商城招聘百科知道软件盒子论坛3G版 本站搜索 新闻资讯 软件下载 当前位置: 网站首页 > 编程开发 > 编程语言 > ...
- java连接数据库 oracle,Oracle数据库之一分钟教你学会用java连接Oracle数据库
本文主要向大家介绍了Oracle数据库之一分钟教你学会用java连接Oracle数据库,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. package java_jdbc; // ...
最新文章
- Docker核心技术之Docker Compose
- 通俗易懂:图卷积神经网络入门详解
- javascript 构造函数类和原型 prototyp e定义的属性和方法的区别
- MYSQL:约束?添加约束?删除约束?以及一些其他修饰?
- Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)
- python最大公约数和最小公倍数_python怎么求最大公约数和最小公倍数
- 解决 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
- C#之委托的个人理解
- JAVA入门[6]-Mybatis简单示例
- Pecl和Pear的区别和联系?
- 台式计算机型号在哪里看,台式电脑主板型号在哪里看
- Altium Designer——PCB中更改线宽的技巧总结
- oracle 判断节气,FullCalendar应用——整合农历节气和节日
- jQuery HTML5文件上传美化插件jQuery.filer
- 使用LDAP Directory的好处
- 2016国内热门的企业级SaaS应用
- 游戏玩家的计算机配置,游戏玩家的PC都爱用什么配置?Steam十一月硬件调查数据告诉你...
- 前端初中级面试题及部分答案
- AutoJs学习-免ROOT免无障碍画圆球
- JavaSE 第七章集合 Collection
热门文章
- centos 自动补全c语言,YouCompleteMe自动补全C语言大型项目 ycm
- (11)FPGA面试技能提升篇(Cadence)
- 02.vs2015编译qt动态库
- 【嵌入式Linux】嵌入式Linux应用开发基础知识之串口应用编程
- 数据结构之顺序表和有序表查找其实现
- L2TP协议笔记2---L2TP主要协议报文分析
- 数组名不等于指针---sizeof()函数求数组大小错误问题
- 嵌入式Linux系统编程学习之八基于文件指针的文件操作
- 线程控制、如何给面试官描述线程不安全的情况?模拟黄牛抢票展现不安全的情况及解决方式、互斥锁加锁解锁
- 【LeetCode】剑指 Offer 51. 数组中的逆序对