Java代码远程操作oracle数据库,执行sql文件、备份、回滚

前提简述

Sqlplus

是一个用于与OracleDatabase交互和执行查询的工具,所以我们要安装的是命令行工具。

imp|exp

是oracle导入导出工具,由于要备份回滚,所以我们也要安装这两个命令工具。

下载工具包

oracle官网去下载三个包:

依赖基础库:instantclient-basic-windows.x64-12.1.0.2.0.zip

sqlplus命令行工具:instantclient-sqlplus-windows.x64-12.1.0.2.0.zip

imp|exp工具:instantclient-tools-windows.x64-12.1.0.2.0.zip

sdk:instantclient-sdk-windows.x64-12.1.0.2.0.zip

安装工具

SQL*Plus命令行工具无需执行exe安装,所以只需将下载回来的两个文件解压到同一个目录即可,解压后文件名应该为instantclient_12_1,在运行工具之前我们需要在windows中配置以下环境变量,先右键计算机->属性->高级系统设置->环境变量:

在系统变量中找到Path并在后面加上刚才解压后instantclient_12_1的目录与sdk子目录

E:\instantclient_12_1\;E:\instantclient_12_1\sdk;

再新增两个变量到系统环境中

TNS_ADMIN=E:\instantclient_12_1

NLS_LANG=AMERICAN_AMERICA.UTF8

或者:编写个bat脚本,内容如下,然后执行一下脚本就好(env.bat)

set Path=%Path%;E:\instantclient_12_1\;E:\instantclient_12_1\sdk;

set TNS_ADMIN=E:\instantclient_11_2

set NLS_LANG=AMERICAN_AMERICA.UTF8

到此则一切工具安装完毕!

测试:

运行cmd->sqlplus:

运行cmd->exp:

运行cmd->imp:

java代码调用:代码找中env.bat就是上述讲到的环境变量bat脚本

public class SqlplusTest {     public static void main(String[] args) {         // 执行sql文件         String ip = "192.168.75.76";         String port = "1521";         String user = "system";         String password = "oracle";         String serviceId = "hsoradb";         String basePath = "F:/eclipse/workspace/MyTest/src/sqlplus";         String sqlplusPath = "E:/instantclient_12_1/";         String sqlPath = "C:/Users/liqiao13413/Desktop/test.sql";         String cmd = "cd /d " + basePath + " && env.bat " + sqlplusPath + " && sqlplus " + user + "/" + password + "@"+ ip + ":" + port + "/" + serviceId + " @" + sqlPath;         ICommandLineClient client = new LocalWindowsCommandClient();         ComposeResponse reponse = client.execute(cmd);         System.out.println(reponse.getExitCode());         System.out.println(reponse.getData());         // 导出数据dump         String dumpPath = "E:/database.dump";         String backupCmd = "cd /d " + basePath + " && env.bat " + sqlplusPath + " && exp " + user + "/" + password + "@"+ ip + ":" + port + "/" + serviceId + " file=" + dumpPath + " full=y";         ComposeResponse backUpreponse = client.execute(backupCmd);         System.out.println(backUpreponse.getData());         System.out.println(backUpreponse.getExitCode());         // 导入数据dump         String rollbackCmd = "cd /d " + basePath + " && env.bat " + sqlplusPath + " && imp " + user + "/" + password+ "@" + ip + ":" + port + "/" + serviceId + " file=" + dumpPath + " full=y";         ComposeResponse rollbackreponse = client.execute(rollbackCmd);         System.out.println(rollbackreponse.getData());         System.out.println(rollbackreponse.getExitCode());         client.disconnect();     } }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java达人

关于等待队列(Condition Queue)

我们都熟悉wait/notify,它主要是实现线程间协作的,其常用的使用模式如下: public synchronized void produce(T t) ...

27480
来自专栏FreeBuf

HTTP认证的底层技术简析与揭秘

写在前面的话 HTTP认证实现的基础是Web服务器与浏览器之间能够安全地交换类似用户名和密码这样的用户凭证,我们也可以把HTTP认证当作是摘要验证(Digest...

21590
来自专栏游戏杂谈

使用Perl的File::Path模块删除非空文件夹

不过那个只是针对单个的文件,使用unlink方法就可以了(未测试过只读文件删除的情况- -!),那如果要删除指定的一个文件夹,有三种方案:

15030
来自专栏北京马哥教育

深入浅出:Linux设备驱动之异步通知和异步I/O

在设备驱动中使用异步通知可以使得对设备的访问可进行时,由驱动主动通知应用程序进行访问。因此,使用无阻塞I/O的应用程序无需轮询设备是否可访问,而阻塞访问也可以...

36360
来自专栏c#开发者

Msmq设计文档(赋源代码)

Msmq设计文档 文件状态: [√] 草稿 [ ] 正式发布 [ ] 正在修改 文件标识: ECI-MSMQ v01 当前版本: 0.5...

35980
来自专栏技术博客

C#简单的面试题目(六)

76.HashMap和Hashtable的区别。 答:HashMap是Hashtable的轻量级实现(非线程安全的实现),他们都完成了Map接口,主要区别在于H...

9720
来自专栏Google Dart

Dart服务器端 shelf包 原

handler是处理shelf.Request并返回shelf.Response的任何函数。它可以处理请求本身 - 例如,在文件系统上查找请求的URI的静态文件...

34210
来自专栏数据之美

线上服务 CPU 100%?一键定位 so easy!

背景 经常做后端服务开发的同学,或多或少都遇到过 CPU 负载特别高的问题。尤其是在周末或大半夜,突然群里有人反馈线上机器负载特别高,不熟悉定位流程和思路的同学...

52780
来自专栏项勇

笔记12 | 复习Volley(一)基本概念和用法

19440
来自专栏python3

python3--进程同步(multiprocess.Lock, Semaphore, Event)

通过之前的学习,实现了程序的异步,让多个任务可以同时在几个进程中并发处理,他们之间的运行没有顺序,一旦开启也不受我们控制。尽管并发编程让我们能更加充分的利用IO...

68830

扫码关注云+社区

领取腾讯云代金券