Oracle 网络配置与监听器
Oracle 网络配置与监听器
适用版本:Oracle Database 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
Oracle 网络配置是连接基础[1]:
组件:
- Listener(监听器)
- tnsnames.ora(客户端)
- sqlnet.ora(全局)
- 监听管理
详细见:Oracle 网络架构与监听器配置。
2. listener.ora
2.1 位置
$ORACLE_HOME/network/admin/listener.ora
2.2 配置
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = tcp)(HOST = oradb.example.com)(PORT = 1521))
(ADDRESS = (PROTOCOL = ipc)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl.example.com)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = orcl)
)
)
ADR_BASE_LISTENER = /u01/app/oracle
2.3 多监听
LISTENER1 = (ADDRESS=(PROTOCOL=tcp)(HOST=...)(PORT=1521))
LISTENER2 = (ADDRESS=(PROTOCOL=tcp)(HOST=...)(PORT=1522))
3. 静态注册 vs 动态注册
3.1 静态注册
# listener.ora
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME=orcl) ...))
3.2 动态注册
-- 自动注册到默认 1521 端口
ALTER SYSTEM SET LOCAL_LISTENER = '';
ALTER SYSTEM REGISTER;
-- 非默认端口
ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS=(PROTOCOL=tcp)(HOST=...)(PORT=1522))';
ALTER SYSTEM REGISTER;
3.3 验证
lsnrctl services
lsnrctl status
4. tnsnames.ora
4.1 位置
$ORACLE_HOME/network/admin/tnsnames.ora
4.2 配置
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = tcp)(HOST = oradb.example.com)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl.example.com)
)
)
# RAC
ORCL_RAC =
(DESCRIPTION =
(ADDRESS_LIST =
(LOAD_BALANCE = ON)
(FAILOVER = ON)
(ADDRESS = (PROTOCOL = tcp)(HOST = rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = tcp)(HOST = rac2-vip)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl.example.com)
(FAILOVER_MODE = (TYPE = SELECT)(METHOD = BASIC))
)
)
4.3 连接
sqlplus system/pwd@orcl
sqlplus system/pwd@//oradb:1521/orcl.example.com # EZCONNECT
5. sqlnet.ora
5.1 位置
$ORACLE_HOME/network/admin/sqlnet.ora
5.2 配置
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT, LDAP)
SQLNET.AUTHENTICATION_SERVICES = (NONE)
DEFAULT_SDU_SIZE = 32767
SQLNET.INBOUND_CONNECT_TIMEOUT = 60
SQLNET.EXPIRE_TIME = 10 # 死连接检测
DIAG_ADR_ENABLED = ON
6. 管理
6.1 启停
lsnrctl start
lsnrctl stop
lsnrctl status
lsnrctl services
lsnrctl reload
6.2 日志
$ORACLE_HOME/network/log/listener.log
7. 测试
7.1 tnsping
tnsping orcl
tnsping oradb:1521/orcl.example.com
7.2 sqlplus
sqlplus system/pwd@orcl
8. 高级配置
8.1 连接池(DRCP)
# tnsnames.ora
ORCL = (...)
(CONNECT_DATA = (SERVER = POOLED) (SERVICE_NAME = orcl))
8.2 共享服务器
ORCL = (...)
(CONNECT_DATA = (SERVER = SHARED) (SERVICE_NAME = orcl))
详细见:Oracle 数据库连接池优化。
8.3 外部认证
# sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = (NTS) # Windows
9. 网络加密
9.1 Native Encryption
# sqlnet.ora
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256)
9.2 SSL/TLS
# sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES = (TCPS, NTS)
SSL_CLIENT_AUTHENTICATION = TRUE
SSL_CERT_FILE = ...
SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA)
详细见:Oracle 安全性能优化。
10. 常见错误
10.1 ORA-12541: TNS:no listener
# 1. 检查 listener
lsnrctl status
# 2. 启动
lsnrctl start
# 3. 端口/防火墙
10.2 ORA-12154: TNS:could not resolve
# 1. tnsnames.ora
# 2. TNS_ADMIN
# 3. tnsping 测试
10.3 ORA-12514: TNS:listener does not know
# 1. 服务注册
lsnrctl services
# 2. ALTER SYSTEM REGISTER
# 3. LOCAL_LISTENER
10.4 ORA-12520: TNS:listener could not find handler
# 1. PROCESSES 不足
# 2. 共享服务器
# 3. 连接池
11. 监控
11.1 监听日志
tail -f $ORACLE_HOME/network/log/listener.log
11.2 连接数
SELECT
COUNT(*) AS total,
SUM(CASE WHEN server = 'DEDICATED' THEN 1 ELSE 0 END) AS dedicated,
SUM(CASE WHEN server = 'SHARED' THEN 1 ELSE 0 END) AS shared
FROM v$session
WHERE username IS NOT NULL;
详细见:Oracle 网络性能优化。
12. 最佳实践
- 动态注册:自动
- 服务名:替代 SID
- SDU 32KB:性能
- 多监听:负载
- 连接超时:安全
- EXPIRE_TIME:死连接
- 加密:敏感
- 监控日志:问题
- tnsping 测试:连通
- 文档化:配置
13. 参考资料
[1] Oracle Database Net Services Administrator’s Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/