当前位置:首页 > 问答 > 正文

用bat脚本搞定Oracle数据库连接,简单又实用的方法分享

用bat脚本搞定Oracle数据库连接,简单又实用的方法分享 来源:根据网络技术论坛、博客文章及个人实践经验整理)

直接说正题,很多人一听到要连接Oracle数据库,头都大了,觉得非得装个什么PL/SQL Developer、Toad之类的专业软件才行,其实不然,如果你只是想快速查点数据、跑个简单的脚本,或者是在服务器上做个自动化的任务,用Windows自带的批处理(bat)脚本,配合Oracle提供的命令行工具,就能轻松搞定,而且非常轻便,哪儿都能用。

这个方法的核心,就是利用Oracle自带的一个命令行工具:SQLPlus,只要你电脑上或者服务器上装了Oracle的客户端(甚至只安装一个轻量级的“即时客户端”就行),就有了这个法宝,bat脚本的作用,就是把你要执行的命令和SQLPlus组装起来,一键运行。

第一步:准备好你的“钥匙”——Oracle即时客户端

(来源:Oracle官方文档关于Instant Client的介绍)

你不需要安装好几个G的完整版Oracle数据库软件,去Oracle官网,找到“Oracle Instant Client”这个栏目,根据你的操作系统(比如Windows 64位)下载一个基础包(Basic Package),这个包很小,解压到电脑的任意一个目录,D:\instantclient_19_10,就相当于有了连接Oracle的“钥匙”。

解压后,很重要的一步是设置环境变量,右键“此电脑”->“属性”->“高级系统设置”->“环境变量”,在“系统变量”里,找到PATH,点击编辑,把刚才解压的即时客户端路径(比如D:\instantclient_19_10)添加进去,这样,系统在任何地方都能识别sqlplus这个命令了。

第二步:编写最简单的连接脚本

我们先来写一个最基础的bat脚本,就叫它connect_oracle.bat吧,用记事本新建一个文件,输入以下内容,然后保存为.bat后缀。

用bat脚本搞定Oracle数据库连接,简单又实用的方法分享

@echo off
sqlplus 用户名/密码@服务器IP地址:端口号/服务名
pause

举个例子,假如你的用户是scott,密码是tiger,数据库服务器IP是168.1.100,端口是默认的1521,服务名是orcl,那么脚本第二行就应该是: sqlplus scott/tiger@192.168.1.100:1521/orcl

保存后,双击这个bat文件,会弹出一个黑乎乎的命令行窗口,如果连接信息正确,你就会看到SQL>提示符,这说明你已经成功连上数据库了!这时候你就可以手动输入SQL语句查询了,最后一行pause是为了让窗口别马上关闭,让你能看到结果。

第三步:升级玩法,让脚本自动执行SQL命令

每次都手动输入SQL太麻烦了,bat脚本的强大之处在于自动化,我们可以把要执行的SQL语句写在一个后缀为.sql的文本文件里,然后用bat脚本调用SQL*Plus去执行它。

假设我们有一个查询文件叫my_query.sql如下:

select empno, ename from emp where deptno = 10;
exit;

注意最后加一句exit;,是为了让SQL*Plus执行完查询后自动退出。

用bat脚本搞定Oracle数据库连接,简单又实用的方法分享

我们改造一下bat脚本,叫它run_query.bat

@echo off
echo 开始查询Oracle数据库...
sqlplus -S scott/tiger@192.168.1.100:1521/orcl @my_query.sql
echo 查询完成!
pause

这里有个新参数-S,意思是“静默模式”,这样就不会显示SQLPlus那些版本、版权信息等冗余提示,让输出结果更干净。@my_query.sql就是告诉SQLPlus去执行当前目录下的这个SQL文件。

双击run_query.bat,它会自动连接数据库,执行my_query.sql里的查询语句,把结果输出在屏幕上,然后自动退出,一气呵成。

第四步:处理查询结果——输出到文件

(来源:SQL*Plus命令行参数手册)

光在屏幕上看结果还不够,很多时候我们需要把结果保存下来做分析,这也很简单,只需要在bat脚本里用上输出重定向符号 > 就行了。

用bat脚本搞定Oracle数据库连接,简单又实用的方法分享

我们再把bat脚本升级一下,叫它export_data.bat

@echo off
setlocal
set OUTPUT_FILE=query_result_%date:~0,4%%date:~5,2%%date:~8,2%.txt
echo 开始导出数据,结果将保存到 %OUTPUT_FILE% ...
sqlplus -S scott/tiger@192.168.1.100:1521/orcl @my_query.sql > %OUTPUT_FILE%
if %errorlevel% equ 0 (
    echo 数据导出成功!
) else (
    echo 出错了!请检查连接信息和SQL语句。
)
pause

这个脚本有点进阶了,解释一下:

  1. setlocal 是为了让脚本内设置的变量只在脚本内有效。
  2. set OUTPUT_FILE=... 是设置一个变量,文件名里包含了今天的日期(比如query_result_20231027.txt),这样每次导出的文件都不会覆盖之前的。
  3. sqlplus ... > %OUTPUT_FILE% 是关键,> 会把SQL*Plus执行的所有输出(也就是查询结果)从屏幕重定向到我们指定的文件名里。
  4. %errorlevel% 是上一条命令(sqlplus)的退出代码,如果等于0表示成功,非0则表示失败,这样脚本就能给你一个明确的成功或失败提示。

第五步:更安全一点——别把密码写在脚本里

(来源:网络运维安全最佳实践)

把数据库密码明文写在bat脚本里是非常不安全的,任何人看到这个脚本都能知道密码,一个简单的改进方法是,在运行脚本时手动输入密码。

我们可以这样写run_query_safe.bat

@echo off
set /p username="请输入用户名: "
set /p password="请输入密码: "
sqlplus -S %username%/%password%@192.168.1.100:1521/orcl @my_query.sql
pause

双击运行后,脚本会提示你输入用户名和密码,你输入的时候密码是不会显示出来的,这样密码就不会留在脚本文件里了,更安全的方法是使用Oracle的密码文件或者操作系统认证,但那有点复杂,对于简单需求,手动输入已经安全多了。

用bat脚本连接操作Oracle,其实就是“批处理 + SQL*Plus命令行”的组合拳,这种方法特别适合:

  • 自动化定时任务:结合Windows的“任务计划程序”,让脚本定时执行。
  • 服务器环境:在没有图形界面的服务器上,这是轻量级操作的首选。
  • 快速数据提取:写好SQL,双击bat就能拿到结果文件,比打开大型图形工具快得多。

希望这个简单又实用的方法能帮到你,让你在面对Oracle数据库时多一个轻便灵活的武器。