凌峰创科服务平台

Linux如何连接服务器Oracle?

使用 SQL*Plus (Oracle 官方命令行工具)

这是最基本、最直接的方式,通常用于执行简单的 SQL 语句、数据库管理任务或脚本自动化。

Linux如何连接服务器Oracle?-图1
(图片来源网络,侵删)

第 1 步:安装 Oracle 客户端

您的 Linux 系统上需要安装 Oracle 客户端,主要有两种选择:

  1. Instant Client (推荐): 这是一个轻量级的、无需安装的客户端,它只包含连接和操作数据库所需的核心库(如 oci.sooci.dll),不包含服务器工具,非常适合开发人员和普通用户。
  2. Full Client: 完整的客户端,包含了管理工具(如 Net Manager、Configuration Assistant 等),体积庞大,通常用于 DBA。

这里以安装 Instant Client 为例:

  1. 下载 Instant Client

    • 访问 Oracle 官方下载页面:Oracle Instant Client Downloads
    • 根据您的 Linux 发行版和系统架构(如 x86_64)选择合适的版本。
    • 您需要下载 "Basic" 或 "Basic Light" 包,如果需要支持 UTF-8 或高级数据类型,可以额外下载 "SQL*Plus" 包。
  2. 安装 Instant Client

    Linux如何连接服务器Oracle?-图2
    (图片来源网络,侵删)
    • 以 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 文件用于定义数据库网络服务名(一个别名),它包含了连接到具体数据库所需的地址信息。

  1. 找到 tnsnames.ora 文件位置:

    Linux如何连接服务器Oracle?-图3
    (图片来源网络,侵删)
    • 通常在 $ORACLE_HOME/network/admin/ 目录下。
    • 如果您使用的是 Instant Client,您需要自己创建这个文件,一个常见的位置是 /etc/ 或您用户的家目录(如 ~/.oracle/network/admin/)。
  2. 编辑 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 步:连接数据库

  1. 设置环境变量 ORACLE_HOMETNS_ADMIN

    • ORACLE_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
  2. *启动 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。

连接步骤:

  1. 安装 DBeaver

    • 下载: 从 DBeaver 官网 下载适用于 Linux 的版本(.tar.gz.deb/.rpm 包)。
    • 安装: 根据下载的包类型进行安装,对于 .deb 包:
      sudo dpkg -i dbeaver-ce_23.2.0_amd64.deb
      # 如果依赖缺失,执行
      sudo apt-get install -f
  2. 安装 Oracle JDBC 驱动

    • DBeaver 需要 Oracle 的 JDBC 驱动(ojdbcX.jar 文件)。
    • 最佳方式: 在 DBeaver 的连接向导中,它会自动检测并提示您下载,您只需选择 "Oracle" 并按照提示操作即可。
    • 手动方式: 如果您已经安装了 Instant Client,JDBC 驱动通常在其中,路径类似 instantclient_19_10/ojdbc8.jar,您可以在 DBeaver 的驱动管理中手动添加这个 JAR 文件。
  3. 创建新数据库连接

    • 打开 DBeaver,点击 "数据库" -> "新建数据库连接"。
    • 在数据库类型列表中选择 Oracle
    • 连接设置:
      • 主机: Oracle 服务器的 IP 或主机名。
      • 端口: 1521 (或您的自定义端口)。
      • 数据库/服务名: 输入您的 SERVICE_NAME
      • 用户名: 您的 Oracle 用户名。
      • 密码: 您的密码。
    • 高级设置:
      • 驱动: 选择您配置好的 Oracle JDBC 驱动。
      • : 如果您使用 Instant Client,需要在这里指定 Instant Client 的库路径(如 /usr/lib/oracle/19.10/client64/lib),这一步至关重要,否则 DBeaver 会因为找不到库文件而连接失败。
    • 点击 "完成",DBeaver 会测试连接,如果成功,您就可以在图形界面中管理您的数据库了。

常见问题与排错

连接失败时,请按以下顺序排查:

  1. 网络连通性

    • 在 Linux 上使用 telnetnc 测试能否连通服务器的 1521 端口。
      telnet your_server_ip 1521
      # 或者
      nc -zv your_server_ip 1521
    • 如果不通,请检查:
      • 防火墙是否允许 1521 端口(在服务器端检查 iptables, firewalld, 或云服务商的安全组)。
      • 服务器 IP 地址和端口是否正确。
  2. 监听器状态

    • 如果网络连通,但仍然报错,可能是 Oracle 监听器没有启动或配置有问题。
    • Oracle 服务器 上,以 oracle 用户身份执行:
      lsnrctl status
    • 检查输出中是否有您的 SERVICE_NAMESID,并且状态是 READY,如果不是,尝试重启监听器:
      lsnrctl stop
      lsnrctl start
  3. 客户端库和环境变量

    • LD_LIBRARY_PATH: 确保它正确指向了 Instant Client 的 lib 目录。
    • ORACLE_HOME: 确保它指向了正确的客户端路径。
    • 库文件是否存在: 使用 ldd 命令检查 SQL*Plus 或其他工具是否能找到 Oracle 的库。
      ldd `which sqlplus` | grep -i oracle
  4. TNS 配置错误

    • 语法错误: 检查 tnsnames.ora 文件的语法,括号、逗号、引号是否匹配。
    • 服务名/SID 错误: 确认 tnsnames.oraSERVICE_NAMESID 的拼写是否与服务器端一致,可以通过 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。

分享:
扫描分享到社交APP
上一篇
下一篇