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→ 数据库服务器 IPPORT→ 监听器端口(默认 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 名称:
-
Listener Configuration
- 创建/修改监听器
- 设置监听端口
- 绑定数据库实例到监听器
-
Net Service Name Configuration
- 创建客户端使用的 TNS 名称
- 配置连接的 IP、端口、服务名
-
Test Connection
- 测试客户端能否通过 TNS 名称成功连接数据库
注意:这个工具本质上就是在修改
listener.ora和tnsnames.ora文件,并提供图形化向导。
5. 数据库客户端连接流程
完整流程如下:
- 数据库实例启动 → 数据库后台进程运行
- 监听器启动 → 监听指定端口(默认 1521)等待客户端连接
-
客户端使用 TNS 名称连接
sqlplus username/password@TNS_NAME - TNS 名称解析 → 查找
tnsnames.ora得到服务器 IP、端口和服务名 - 监听器接收请求 → 将请求转发给对应数据库实例
- 实例验证用户 → 客户端成功登录
6. 总结要点
- TNS:客户端逻辑名称,隐藏实际 IP/端口,便于连接
- listener.ora:服务器监听配置,定义端口和服务实例
- tnsnames.ora:客户端解析 TNS 名称映射到服务器信息
- sqlnet.ora:网络协议和认证策略
- 监听器工具:Oracle 提供图形化工具,方便配置监听器和 TNS 名称
- 连接过程:客户端 → TNS 名称解析 → 监听器 → 数据库实例 → 登录成功