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?
  1. package org.ybygjy.basic.oracle;
  2. import java.io.File;
  3. import java.io.FileOutputStream;
  4. import java.io.IOException;
  5. import java.io.InputStream;
  6. import java.nio.ByteBuffer;
  7. import java.nio.channels.Channels;
  8. import java.nio.channels.FileChannel;
  9. import java.nio.channels.ReadableByteChannel;
  10. import java.util.ArrayList;
  11. import java.util.List;
  12. import java.util.Map;
  13. /**
  14. * java外部系统命令模式备份数据库
  15. * @author WangYanCheng
  16. * @version 2010-6-19
  17. */
  18. public class BackupOracleDatabase {
  19. /**
  20. * 封装执行入口
  21. */
  22. public void doWork() {
  23. InnerClass innerInst =
  24. new InnerClass("DB_USER", "DB_PASS", "127.0.0.1:1521/ORCL", "E:/dbback/BACK201006.DMP");
  25. Thread thInst = new Thread(innerInst);
  26. thInst.start();
  27. }
  28. /**
  29. * 用于分担执行命令
  30. * @author WangYanCheng
  31. * @version 2010-6-19
  32. */
  33. class InnerClass implements Runnable {
  34. /** 用户名 */
  35. private String userName;
  36. /** 密码 */
  37. private String userPass;
  38. /** 服务地址 */
  39. private String serverAddr;
  40. /** 输出文件路径 */
  41. private String outFilePath;
  42. /**
  43. * constructor
  44. * @param userName userName
  45. * @param userPass userPass
  46. * @param serverAddr 服务地址必须带<strong>端口</strong>/<strong>SID</strong>
  47. * @param outFilePath outPath
  48. */
  49. public InnerClass(String userName, String userPass, String serverAddr, String outFilePath) {
  50. this.userName = userName;
  51. this.userPass = userPass;
  52. this.serverAddr = serverAddr;
  53. this.outFilePath = outFilePath;
  54. }
  55. /**
  56. * 提供执行的命令串
  57. * @return commStr 命令串
  58. */
  59. private List doBuildCommand() {
  60. List rtnList = new ArrayList();
  61. rtnList.add("EXP");
  62. rtnList.add("@USER@/@PASSWORD@@@SERVER@".replaceAll("@USER@", this.userName)
  63. .replaceAll("@PASSWORD@", this.userPass).replaceAll("@SERVER@", this.serverAddr));
  64. rtnList.add("FILE=/"@FILE@/"".replaceAll("@FILE@", this.outFilePath));
  65. rtnList.add("TABLES=(SY_TABLE_DEF)");
  66. return rtnList;
  67. }
  68. /**
  69. * 构建ProcessBuilder实例
  70. * @param workDir 当前进程工作目录
  71. * @return pbInst ProcessBuilder实例
  72. * @see ProcessBuilder
  73. */
  74. private ProcessBuilder buildProcessBuilder(File workDir) {
  75. new ProcessBuilder();
  76. List commandArray = (doBuildCommand());
  77. ProcessBuilder pbInst = new ProcessBuilder(commandArray);
  78. pbInst.command(commandArray);
  79. Map envMap = pbInst.environment();
  80. envMap.clear();
  81. envMap.putAll(System.getenv());
  82. pbInst.directory(workDir);
  83. pbInst.redirectErrorStream(true);
  84. return pbInst;
  85. }
  86. /**
  87. * 线程执行入口
  88. */
  89. public void run() {
  90. File tmpOutFile = new File(this.outFilePath);
  91. File outDir = tmpOutFile.getParentFile();
  92. ProcessBuilder pbInst = buildProcessBuilder(outDir);
  93. try {
  94. Process proInst = pbInst.start();
  95. final InputStream ins = proInst.getInputStream();
  96. File outFile = new File(outDir, "exp.log");
  97. outFile.createNewFile();
  98. final FileChannel focInst = new FileOutputStream(outFile).getChannel();
  99. Thread innerTh = new Thread() {
  100. ByteBuffer byteBuffer = ByteBuffer.allocate(1024);
  101. public void run() {
  102. ReadableByteChannel rbcObj = Channels.newChannel(ins);
  103. try {
  104. while (rbcObj.read(byteBuffer) != -1) {
  105. byteBuffer.flip();
  106. focInst.write(byteBuffer);
  107. byteBuffer.clear();
  108. }
  109. } catch (IOException ioe) {
  110. ioe.printStackTrace();
  111. }
  112. }
  113. };
  114. // innerTh.setDaemon(true);
  115. innerTh.start();
  116. } catch (IOException ioe) {
  117. ioe.printStackTrace();
  118. }
  119. }
  120. }
  121. /**
  122. * 测试入口
  123. * @param args 参数列表
  124. */
  125. public static void main(String[] args) {
  126. new BackupOracleDatabase().doWork();
  127. }
  128. }

转载于:https://www.cnblogs.com/telwanggs/p/6255087.html

Java备份Oracle数据库相关推荐

  1. Java web程序中备份oracle数据库

    Java web程序中备份oracle数据库 1.生成备份文件: public ActionForward createDmp(ActionMapping mapping, ActionForm fo ...

  2. java对Oracle数据库查询_java 连接Oracle数据库 查询

    java 连接Oracle数据库 查询 (2014-03-03 16:07:15) 标签: it 在ADF要先引入jar包 Oracle JDBC ;不然加载驱动不会成功. public static ...

  3. java中oracle.链接,java连接Oracle数据库的方法解析

    本文主要对java连接Oracle数据库方法进行步骤解析,具有很好的参考价值,需要的朋友一起来看下吧 Oracle数据库先创建一个表和添加一些数据 1.先在Oracle数据库中创建一个student表 ...

  4. scala 连接oracle_一分钟教你学会用java连接Oracle数据库

    package java_jdbc; //java连接Oracle数据库 import java.sql.Connection; import java.sql.DriverManager; impo ...

  5. oracle出错如何备份数据,备份oracle数据库出错

    备份oracle数据库出错 input datafile fno=00027 name=/index/neas_standard01.dbf input datafile fno=00035 name ...

  6. oracle权限培训,Java培训-ORACLE数据库学习【2】用户权限

    查询用户拥有的权限: 1.查看所有用户:select *from dba_users;select *from all_users;select *from user_users; 2.查看用户或角色 ...

  7. Windows下自动备份Oracle数据库

    Windows下自动备份Oracle数据库 先说说为啥要搞这么个玩意 那是上线前几天[这不是讲故事],测试环境用的数据库崩了[为啥崩了不知道].之前造的一堆测试数据全都没得了[].然后急急忙忙的恢复环 ...

  8. java访问oracle集群,JAVA查询Oracle数据库集群连接字符串

    下载必备最新排行装机分类.游戏手机驱动源码LinuxMac小游戏.商城招聘百科知道软件盒子论坛3G版 本站搜索 新闻资讯 软件下载 当前位置: 网站首页 > 编程开发 > 编程语言 > ...

  9. java连接数据库 oracle,Oracle数据库之一分钟教你学会用java连接Oracle数据库

    本文主要向大家介绍了Oracle数据库之一分钟教你学会用java连接Oracle数据库,通过具体的内容向大家展现,希望对大家学习Oracle数据库有所帮助. package java_jdbc; // ...

最新文章

  1. Docker核心技术之Docker Compose
  2. 通俗易懂:图卷积神经网络入门详解
  3. javascript 构造函数类和原型 prototyp e定义的属性和方法的区别
  4. MYSQL:约束?添加约束?删除约束?以及一些其他修饰?
  5. Linux网络安装(PXE + DHCP+TFTP+ Kickstart+ FTP)
  6. python最大公约数和最小公倍数_python怎么求最大公约数和最小公倍数
  7. 解决 LINK : fatal error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏
  8. C#之委托的个人理解
  9. JAVA入门[6]-Mybatis简单示例
  10. Pecl和Pear的区别和联系?
  11. 台式计算机型号在哪里看,台式电脑主板型号在哪里看
  12. Altium Designer——PCB中更改线宽的技巧总结
  13. oracle 判断节气,FullCalendar应用——整合农历节气和节日
  14. jQuery HTML5文件上传美化插件jQuery.filer
  15. 使用LDAP Directory的好处
  16. 2016国内热门的企业级SaaS应用
  17. 游戏玩家的计算机配置,游戏玩家的PC都爱用什么配置?Steam十一月硬件调查数据告诉你...
  18. 前端初中级面试题及部分答案
  19. AutoJs学习-免ROOT免无障碍画圆球
  20. JavaSE 第七章集合 Collection

热门文章

  1. centos 自动补全c语言,YouCompleteMe自动补全C语言大型项目 ycm
  2. (11)FPGA面试技能提升篇(Cadence)
  3. 02.vs2015编译qt动态库
  4. 【嵌入式Linux】嵌入式Linux应用开发基础知识之串口应用编程
  5. 数据结构之顺序表和有序表查找其实现
  6. L2TP协议笔记2---L2TP主要协议报文分析
  7. 数组名不等于指针---sizeof()函数求数组大小错误问题
  8. 嵌入式Linux系统编程学习之八基于文件指针的文件操作
  9. 线程控制、如何给面试官描述线程不安全的情况?模拟黄牛抢票展现不安全的情况及解决方式、互斥锁加锁解锁
  10. 【LeetCode】剑指 Offer 51. 数组中的逆序对