1. Oracle 的网络通信基础

Oracle 数据库不是简单的本地程序,它通常运行在服务器上,客户端可能在本地或远程机器上操作。为了让客户端能够与数据库实例通信,Oracle 引入了 监听器(Listener)TNS(Transparent Network Substrate)

1.1 TNS 的作用

  • 全称:Transparent Network Substrate(透明网络层)
  • 目的:封装网络细节,使客户端无需关心底层 TCP/IP、端口等信息,只用“逻辑名称”即可连接数据库。
  • 原理:客户端提供 TNS 名称 → TNS 配置解析出 IP、端口和数据库服务名 → 发送请求给服务器监听器 → 连接到具体实例。

2. 配置文件详解

Oracle 的网络配置主要依赖三个文件:

2.1 tnsnames.ora

  • 位置:客户端 Oracle 安装目录下的 network/admin 目录
  • 作用:定义数据库别名(TNS 名称)和对应的连接信息
  • 示例
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

解释:

  • ORCL → TNS 名称,客户端使用这个名称连接数据库
  • HOST → 数据库服务器 IP
  • PORT → 监听器端口(默认 1521)
  • SERVICE_NAME → 数据库实例服务名

客户端连接命令:

sqlplus username/password@ORCL

这样就不必直接输入 IP 和端口。


2.2 listener.ora

  • 位置:服务器端 Oracle 安装目录的 network/admin
  • 作用:配置数据库监听器,定义监听端口和支持的数据库实例
  • 示例
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 0.0.0.0)(PORT = 1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = orcl)
      (ORACLE_HOME = C:\oracle\product\19.0.0\dbhome_1)
      (PROGRAM = extproc)
    )
  )

解释:

  • LISTENER → 监听器名称
  • HOST = 0.0.0.0 → 监听所有网卡
  • PORT = 1521 → 默认监听端口
  • SID_LIST_LISTENER → 指定该监听器可以服务的实例 SID(实例名)

2.3 sqlnet.ora

  • 位置:客户端和服务器端均有可能
  • 作用
    • 定义网络协议顺序(TCP/IP、IPC 等)
    • 配置认证方式、加密等
  • 示例
SQLNET.AUTHENTICATION_SERVICES = (NONE)
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)

解释:

  • AUTHENTICATION_SERVICES → 禁用操作系统认证
  • NAMES.DIRECTORY_PATH → 定义 TNS 名称解析顺序

3. 监听器的操作

监听器是数据库服务端的“门卫”,它接收客户端请求并转发到对应实例。常用操作:

命令 说明
lsnrctl start 启动监听器
lsnrctl stop 停止监听器
lsnrctl status 查看监听器状态,包括服务的实例和端口
lsnrctl reload 重新加载配置文件,无需重启监听器

4. Oracle Developer 配置工具(Net Configuration Tools)

Oracle 提供图形化配置工具,便于配置监听器和 TNS 名称:

  1. Listener Configuration

    • 创建/修改监听器
    • 设置监听端口
    • 绑定数据库实例到监听器
  2. Net Service Name Configuration

    • 创建客户端使用的 TNS 名称
    • 配置连接的 IP、端口、服务名
  3. Test Connection

    • 测试客户端能否通过 TNS 名称成功连接数据库

注意:这个工具本质上就是在修改 listener.oratnsnames.ora 文件,并提供图形化向导。


5. 数据库客户端连接流程

完整流程如下:

  1. 数据库实例启动 → 数据库后台进程运行
  2. 监听器启动 → 监听指定端口(默认 1521)等待客户端连接
  3. 客户端使用 TNS 名称连接

    sqlplus username/password@TNS_NAME
    
  4. TNS 名称解析 → 查找 tnsnames.ora 得到服务器 IP、端口和服务名
  5. 监听器接收请求 → 将请求转发给对应数据库实例
  6. 实例验证用户 → 客户端成功登录

6. 总结要点

  • TNS:客户端逻辑名称,隐藏实际 IP/端口,便于连接
  • listener.ora:服务器监听配置,定义端口和服务实例
  • tnsnames.ora:客户端解析 TNS 名称映射到服务器信息
  • sqlnet.ora:网络协议和认证策略
  • 监听器工具:Oracle 提供图形化工具,方便配置监听器和 TNS 名称
  • 连接过程:客户端 → TNS 名称解析 → 监听器 → 数据库实例 → 登录成功