Oracle 网络架构深度

Oracle 网络架构深度

适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07


1. 概述

Oracle 网络架构支持客户端连接[1]:

组件

  • Listener
  • Service Name / SID
  • Naming Methods
  • Connection Pool
  • CMAN

详细见:Oracle Net Services 网络架构


2. Listener

2.1 配置

# listener.ora
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = 
  (ADDRESS = (PROTOCOL = tcp)(HOST = oradb)(PORT = 1521))
))

SID_LIST_LISTENER = (SID_LIST = (SID_DESC = 
  (SID_NAME = orcl)
  (ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
))

2.2 动态注册

- PMON/LREG 注册
- 自动
- 默认 1521

2.3 静态注册

- listener.ora
- 显式
- 任意端口

详细见:Oracle 网络配置与监听器


3. 命名方法

3.1 TNSNAMES

# tnsnames.ora
ORCL = (DESCRIPTION = 
  (ADDRESS = (PROTOCOL = tcp)(HOST = oradb)(PORT = 1521))
  (CONNECT_DATA = (SERVICE_NAME = orcl))
)

3.2 EZCONNECT

sqlplus scott/tiger@//oradb:1521/orcl

3.3 LDAP

- 集中命名
- Active Directory
- OID

3.4 NIS

- 旧
- 不推荐

4. Service Name vs SID

4.1 SID

- 实例标识
- 单实例
- 旧方式

4.2 Service Name

- 服务层
- 多实例
- RAC
- 推荐

5. sqlnet.ora

5.1 常用

NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT)
SQLNET.INBOUND_CONNECT_TIMEOUT = 60
SQLNET.EXPIRE_TIME = 10
DEFAULT_SDU_SIZE = 32767
DIAG_ADR_ENABLED = ON
SQLNET.AUTHENTICATION_SERVICES = (NTS)

5.2 加密

SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256)

6. Shared Server

6.1 配置

ALTER SYSTEM SET shared_servers = 5;
ALTER SYSTEM SET max_shared_servers = 20;
ALTER SYSTEM SET dispatchers = '(PROTOCOL=tcp)(DISPATCHERS=3)';

6.2 流程

1. 客户端连接
2. Listener 路由
3. Dispatcher 接收
4. 共享服务器执行
5. 结果返回

6.3 优势

- 减少进程
- 多连接
- 资源高效

7. DRCP(Database Resident Connection Pool)

7.1 启用

EXEC DBMS_CONNECTION_POOL.START_POOL;

7.2 配置

EXEC DBMS_CONNECTION_POOL.ALTER_PARAM(
  pool_name => 'SYS_DEFAULT_CONNECTION_POOL',
  param_name => 'MINSIZE',
  param_value => 10
);

7.3 连接

# 连接串
(APP=...)
# 或
SERVER=POOLED

8. CMAN(Connection Manager)

8.1 概述

- 多路复用
- 防火墙
- 访问控制

8.2 配置

# cman.ora
CMAN = (ADDRESS = (PROTOCOL = tcp)(HOST = cman-host)(PORT = 1630))

CMAN_PROFILE = (PARAMETER_LIST = (
  MAX_GATEWAY_PROCESSES = 16,
  MIN_GATEWAY_PROCESSES = 2
))

CMAN_RULES = (RULE_LIST = (RULE = 
  (SRC = *)(DST = oradb)(SRV = orcl)(ACT = accept)
))

9. 网络加密

9.1 Native Encryption

SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256)

9.2 SSL/TLS

# sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = (TCPS)
SSL_CLIENT_AUTHENTICATION = TRUE
WALLET_LOCATION = (SOURCE = (METHOD = FILE)(METHOD_DATA = (DIRECTORY = ...)))

9.3 Wallet

orapki wallet create -wallet /u01/wallet -auto_login
orapki wallet add -wallet /u01/wallet -dn "CN=oradb" -keysize 2048

详细见:Oracle 网络加密与 SSL


10. 监控

10.1 Listener

lsnrctl status
lsnrctl services
lsnrctl reload

10.2 服务

SELECT name, network_name FROM v$services;
SELECT name, service_id FROM v$active_services;

10.3 连接

SELECT 
  sid, serial#, username, 
  program, machine, service_name
FROM v$session
WHERE username IS NOT NULL;

11. 性能

11.1 SDU

- Session Data Unit
- 默认 2048
- 增大 32767
- 大数据高效

11.2 异步 I/O

- 减少 wait
- 提升吞吐

11.3 连接池

- 减少连接开销
- DRCP
- 应用层池

12. 故障排查

12.1 ORA-12541

- Listener 未启动
- lsnrctl start
- 防火墙

12.2 ORA-12154

- TNSNAMES 错误
- TNS_ADMIN
- tnsping

12.3 ORA-12514

- 服务未注册
- 动态注册
- 强制注册
ALTER SYSTEM REGISTER;

12.4 ORA-12560

- 协议适配器
- 检查连接串
- SQLNET.AUTHENTICATION_SERVICES

13. 安全

13.1 加密

- Native Encryption
- SSL/TLS
- 强制

13.2 认证

- Kerberos
- RADIUS
- PKI

13.3 防火墙

- IP 限制
- CMAN 规则
- sqlnet.ora

14. 最佳实践

  1. Service Name:现代
  2. 动态注册:自动
  3. 多 Listener:负载
  4. DRCP:连接池
  5. SDU 增大:性能
  6. 加密:安全
  7. EXPIRE_TIME:检测断连
  8. 监控:及时
  9. 文档化:配置
  10. 测试:连通性

15. 参考资料

[1] Oracle Database Net Services Administrator’s Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/