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 条评论
登录 后参与评论

相关文章

来自专栏FreeBuf

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

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

1919
来自专栏noteless

[一]FileDescriptor文件描述符 标准输入输出错误 文件描述符

当应用程序请求打开或者操作文件时,操作系统为应用程序设置一张文件列表,具体的实现形式此处不深入说明

2422
来自专栏鸿的学习笔记

DBDB: 一个简单的key/value数据库(三)

前文点击链接:DBDB: 一个简单的key/value数据库(一) 前文点击链接:DBDB: 一个简单的key/value数据库(二)

892
来自专栏python3

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

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

2853
来自专栏沈唁志

在Linux中vim的用法

1892
来自专栏Google Dart

Dart服务器端 shelf包 原

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

2251
来自专栏数据之美

论 Python 装饰器控制函数 Timeout 的正确姿势

1、问题背景 之前在这篇《Python RPC 远程调用脚本之 RPyC 实践》中实现过一个小 Demo,通过 RPyC 可以实现一个简单的分布式程序,但是,有...

2.4K10
来自专栏青玉伏案

Objective-C中的Block回调模式

        在前面的博客中提到了Block的概念和使用方法,个人感觉Block最爽的用法莫过于在回调时用block。感觉比委托回调和目标方法回调用着要顺手,...

2345
来自专栏JavaEdge

操作系统之文件管理概述1 文件和文件系统3 目录管理4 文 件 共 享5 文件保护5.1.1 访问矩阵的实现6 文件物理结构(重点)2文件存储空间管理(重点)

31610
来自专栏c#开发者

Msmq设计文档(赋源代码)

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

3398

扫码关注云+社区