使用 SQL*Plus (Oracle 官方命令行工具)
这是最基本、最直接的方式,通常用于执行简单的 SQL 语句、数据库管理任务或脚本自动化。

第 1 步:安装 Oracle 客户端
您的 Linux 系统上需要安装 Oracle 客户端,主要有两种选择:
- Instant Client (推荐): 这是一个轻量级的、无需安装的客户端,它只包含连接和操作数据库所需的核心库(如
oci.so或oci.dll),不包含服务器工具,非常适合开发人员和普通用户。 - Full Client: 完整的客户端,包含了管理工具(如 Net Manager、Configuration Assistant 等),体积庞大,通常用于 DBA。
这里以安装 Instant Client 为例:
-
下载 Instant Client
- 访问 Oracle 官方下载页面:Oracle Instant Client Downloads
- 根据您的 Linux 发行版和系统架构(如
x86_64)选择合适的版本。 - 您需要下载 "Basic" 或 "Basic Light" 包,如果需要支持 UTF-8 或高级数据类型,可以额外下载 "SQL*Plus" 包。
-
安装 Instant Client
(图片来源网络,侵删)-
以 Oracle Linux / CentOS / RHEL 为例:
# 假设你下载了三个包:basic, sqlplus, and jdbc # 将它们上传到你的 Linux 服务器上 sudo yum localinstall oracle-instantclient19.10-basic-19.10.0.0.0.x86_64.rpm \ oracle-instantclient19.10-sqlplus-19.10.0.0.0.x86_64.rpm \ oracle-instantclient19.10-jdbc-19.10.0.0.0.x86_64.rpm -
以 Ubuntu / Debian 为例:
# 假设你下载了 .zip 文件 # 1. 创建一个目录并解压 mkdir -p ~/oracle_instantclient unzip instantclient-basic-linux.x64-19.10.0.0.0dbru.zip -d ~/oracle_instantclient unzip instantclient-sqlplus-linux.x64-19.10.0.0.0dbru.zip -d ~/oracle_instantclient # ... 解压其他需要的包 # 2. 将解压后的库文件路径添加到 LD_LIBRARY_PATH 环境变量 echo 'export LD_LIBRARY_PATH=~/oracle_instantclient:$LD_LIBRARY_PATH' >> ~/.bashrc source ~/.bashrc # 3. 为了方便全局使用,可以创建一个软链接 sudo ln -s ~/oracle_instantclient/libclntsh.so.19.1 /usr/lib/libclntsh.so sudo ln -s ~/oracle_instantclient/libocci.so.19.1 /usr/lib/libocci.so
-
第 2 步:配置 tnsnames.ora 文件
tnsnames.ora 文件用于定义数据库网络服务名(一个别名),它包含了连接到具体数据库所需的地址信息。
-
找到
tnsnames.ora文件位置:
(图片来源网络,侵删)- 通常在
$ORACLE_HOME/network/admin/目录下。 - 如果您使用的是 Instant Client,您需要自己创建这个文件,一个常见的位置是
/etc/或您用户的家目录(如~/.oracle/network/admin/)。
- 通常在
-
编辑
tnsnames.ora文件: 添加您的数据库服务别名,格式如下:# tnsnames.ora # 你的服务别名,可以自定义,MYDB MYDB = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = your_server_ip)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = your_service_name) # 这是数据库在监听器中注册的服务名 ) )your_server_ip: Oracle 服务器的 IP 地址或主机名。1521: Oracle 数据库默认的监听端口,如果不是默认端口,请修改。your_service_name: 数据库的SERVICE_NAME,您可以通过查询v$parameter表来获取,或者在服务器上执行lsnrctl services查看。注意:这和SID是不同的概念,现代 Oracle 推荐使用SERVICE_NAME。
第 3 步:连接数据库
-
设置环境变量
ORACLE_HOME和TNS_ADMINORACLE_HOME: 指向 Instant Client 的根目录。TNS_ADMIN: 指向tnsnames.ora文件所在的目录。
# 在 ~/.bashrc 或 ~/.profile 中设置并使其生效 export ORACLE_HOME=/usr/lib/oracle/19.10/client64 # 根据你的实际安装路径修改 export TNS_ADMIN=/etc # 如果你把 tnsnames.ora 放在了 /etc 下 export PATH=$ORACLE_HOME/bin:$PATH export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH source ~/.bashrc
-
*启动 SQLPlus 并连接** 有两种方式连接:
-
使用服务名(推荐):
sqlplus your_username/your_password@MYDB
这里的
MYDB就是在tnsnames.ora中定义的别名。 -
使用 Easy Connect (无需 tnsnames.ora): 如果不想配置
tnsnames.ora,可以直接在命令中指定连接信息:sqlplus your_username/your_password@//your_server_ip:1521/your_service_name
连接成功后,您会看到
SQL>提示符,可以开始执行 SQL 命令了。 -
使用第三方图形化客户端 (如 DBeaver, SQL Developer)
图形化客户端更直观,适合需要浏览数据库结构、执行复杂查询和进行数据可视化的用户。
推荐工具:DBeaver
DBeaver 是一款免费、开源、跨平台的数据库管理工具,支持几乎所有主流数据库,包括 Oracle。
连接步骤:
-
安装 DBeaver
- 下载: 从 DBeaver 官网 下载适用于 Linux 的版本(
.tar.gz或.deb/.rpm包)。 - 安装: 根据下载的包类型进行安装,对于
.deb包:sudo dpkg -i dbeaver-ce_23.2.0_amd64.deb # 如果依赖缺失,执行 sudo apt-get install -f
- 下载: 从 DBeaver 官网 下载适用于 Linux 的版本(
-
安装 Oracle JDBC 驱动
- DBeaver 需要 Oracle 的 JDBC 驱动(
ojdbcX.jar文件)。 - 最佳方式: 在 DBeaver 的连接向导中,它会自动检测并提示您下载,您只需选择 "Oracle" 并按照提示操作即可。
- 手动方式: 如果您已经安装了 Instant Client,JDBC 驱动通常在其中,路径类似
instantclient_19_10/ojdbc8.jar,您可以在 DBeaver 的驱动管理中手动添加这个 JAR 文件。
- DBeaver 需要 Oracle 的 JDBC 驱动(
-
创建新数据库连接
- 打开 DBeaver,点击 "数据库" -> "新建数据库连接"。
- 在数据库类型列表中选择 Oracle。
- 连接设置:
- 主机: Oracle 服务器的 IP 或主机名。
- 端口:
1521(或您的自定义端口)。 - 数据库/服务名: 输入您的
SERVICE_NAME。 - 用户名: 您的 Oracle 用户名。
- 密码: 您的密码。
- 高级设置:
- 驱动: 选择您配置好的 Oracle JDBC 驱动。
- 库: 如果您使用 Instant Client,需要在这里指定 Instant Client 的库路径(如
/usr/lib/oracle/19.10/client64/lib),这一步至关重要,否则 DBeaver 会因为找不到库文件而连接失败。
- 点击 "完成",DBeaver 会测试连接,如果成功,您就可以在图形界面中管理您的数据库了。
常见问题与排错
连接失败时,请按以下顺序排查:
-
网络连通性
- 在 Linux 上使用
telnet或nc测试能否连通服务器的 1521 端口。telnet your_server_ip 1521 # 或者 nc -zv your_server_ip 1521
- 如果不通,请检查:
- 防火墙是否允许 1521 端口(在服务器端检查
iptables,firewalld, 或云服务商的安全组)。 - 服务器 IP 地址和端口是否正确。
- 防火墙是否允许 1521 端口(在服务器端检查
- 在 Linux 上使用
-
监听器状态
- 如果网络连通,但仍然报错,可能是 Oracle 监听器没有启动或配置有问题。
- 在 Oracle 服务器 上,以
oracle用户身份执行:lsnrctl status
- 检查输出中是否有您的
SERVICE_NAME或SID,并且状态是READY,如果不是,尝试重启监听器:lsnrctl stop lsnrctl start
-
客户端库和环境变量
LD_LIBRARY_PATH: 确保它正确指向了 Instant Client 的lib目录。ORACLE_HOME: 确保它指向了正确的客户端路径。- 库文件是否存在: 使用
ldd命令检查 SQL*Plus 或其他工具是否能找到 Oracle 的库。ldd `which sqlplus` | grep -i oracle
-
TNS 配置错误
- 语法错误: 检查
tnsnames.ora文件的语法,括号、逗号、引号是否匹配。 - 服务名/SID 错误: 确认
tnsnames.ora中SERVICE_NAME或SID的拼写是否与服务器端一致,可以通过select * from v$instance;在服务器上查询真实的INSTANCE_NAME(通常是 SID),通过select value from v$parameter where name = 'service_names';查询SERVICE_NAME。
- 语法错误: 检查
| 工具类型 | 优点 | 缺点 | 适用人群 |
|---|---|---|---|
| *SQLPlus** | 轻量、官方、所有系统预装 | 命令行操作,不直观,功能单一 | DBA、开发人员(用于脚本)、系统管理员 |
| DBeaver | 图形化、功能强大、跨平台、免费 | 需要额外安装和配置 JDBC 驱动 | 开发人员、数据分析师、需要图形界面的用户 |
对于大多数 Linux 用户,强烈推荐从安装 Instant Client 和配置 DBeaver 开始,因为它能提供最佳的用户体验和功能集,只有在需要自动化脚本或进行服务器级管理时,才需要深入使用 SQL*Plus。
