Oracle SQL Developer Command Line (SQLcl) 工具是基于 Java 开发的 Oracle 数据库命令行界面,SQL*Plus 替代品, 不需要安装客户端,只需下载该应用程序解压后即可使用,且是一款免费的工具。
SQLcl 支持执行SQL,PL/SQL,提供了命令行编辑,命令重新调用和所有SQL*PLUS的脚本。
SQLcl 的功能非常丰富,我使用 SQLcl 的一个主要原因是 SQLcl 支持将 SQL 的查询结果以不同的格式输出,比如将查询结果以 JSON 格式输出到文件中,使用 python 再获取 JSON 文件中的数据做判断,可以非常方便的对数据库执行巡检等操作,虽然 Oracle 在12C及以后提供了 JSON_OBJECT 函数转换结果集,但是JSON_OBJECT受版本限制且结果集字符个数不能超过32768。
下载地址:https://www.oracle.com/database/sqldeveloper/technologies/sqlcl/download/
文档地址:https://docs.oracle.com/en/database/oracle/sql-developer-command-line/index.html
Oracle 18C 以上的版本中自带此工具,执行文件是 $ORACLE_HOME/bin/sql 或 $ORACLE_HOME/sqldeveloper/sqldeveloper/bin/sql
[oracle@pod5-hb-c3-test1-13:~]$ sql / as sysdba
SQLcl: Release 19.1 Production on Mon Dec 05 20:37:05 2022
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL>
[oracle@pod5-hb-c3-test1-13:~]$ sql sys/oracle@pod5-hb-c3-test1-13:1521/orcl as sysdba
SQLcl: Release 19.1 Production on Mon Dec 05 20:40:19 2022
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL>
[oracle@pod5-hb-c3-test1-13:~]$ sql system/oracle@pod5-hb-c3-test1-13:1521/orcl
SQLcl: Release 19.1 Production on Mon Dec 05 20:40:38 2022
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Last Successful login time: Mon Dec 05 2022 20:40:39 +08:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL>
SQLcl 是基于JAVA开发的,所以运行SQLcl需要安装JAVA环境,目前SQLcl的最新版本是22.3.1.285.1825 - October 18, 2022,具体要求如下:
| SQLcl的版本 | JAVA版本 |
|---|---|
| 22.3.1.285.1825 - October 18, 2022 | Java 11 and above |
| 22.2.1.201.1451- July 28, 2022 | Java 11 and above |
| 22.2.0.172.1718 - June 22, 2022 | Java 11 and above |
| 22.1.1.131.0820 - May 11, 2022 | Java 11 and above |
| 22.1.0.90.1611 - April 5, 2022 | Java 11 and above |
| 21.4.1.17.1458 - January 19, 2022 | Java 8 and above |
SQLcl 默认会使用$ORACLE_HOME里的JDK,除非 unset ORACLE_HOME,如果没有 java 环境或 java 版本较低(例如:11.2.0.4 的Oracle 自带的JDK版本是Java 5),则需自己安装。
# Oracle 19.3 自带的 JAVA 8,所以使用自带的就行,但需要保证 $ORACLE_HOME 环境变量的正确性
su - oracle
unzip sqlcl-21.4.1.17.1458.zip
# 添加环境变量,注意将/home/oracle/sqlcl/bin放到$ORACLE_HOME/bin的前面,不然先找的还是$ORACLE_HOME/bin下的sql执行文件
export PATH=/home/oracle/sqlcl/bin:$ORACLE_HOME/bin:$PATH
# 要想使用 Oracle 自带的 JAVA ,必须正确配置 $ORACLE_HOME
[oracle@pod5-hb-c3-test1-13:~]$ echo $ORACLE_HOME
/oracle/app/oracle/product/19.0.0/db_1
# 使用 SQLcl 登录数据库
[oracle@pod5-hb-c3-test1-13:~]$ sql / as sysdba
SQLcl: Release 21.4 Production on Mon Dec 05 21:27:44 2022
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL>
# Oracle 11.2.0.4 自带 JAVA 5,不能运行 SQLcl
[oracle@rac1 ~]$ $ORACLE_HOME/jdk/bin/java -version
java version "1.5.0_51"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_51-b10)
Java HotSpot(TM) 64-Bit Server VM (build 1.5.0_51-b10, mixed mode)
# JAVA 5 运行 SQLcl 会报以下错误
[oracle@rac1 ~]$ sql / as sysdba
Unrecognized VM option '+IgnoreUnrecognizedVMOptions'
Could not create the Java virtual machine.
# 当前操作系统使用的是 RHEL 7.6,所以操作系统带了 JAVA 8,如果操作系统也没有 JAVA 8,则需自行安装
[oracle@rac1 ~]$ java -version
openjdk version "1.8.0_181"
OpenJDK Runtime Environment (build 1.8.0_181-b13)