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
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. 最佳实践
- Service Name:现代
- 动态注册:自动
- 多 Listener:负载
- DRCP:连接池
- SDU 增大:性能
- 加密:安全
- EXPIRE_TIME:检测断连
- 监控:及时
- 文档化:配置
- 测试:连通性
15. 参考资料
[1] Oracle Database Net Services Administrator’s Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/