Oracle 监听器配置详解
Oracle 监听器配置详解
适用版本:Oracle Database 10g / 11g / 12c / 19c / 23ai 文档版本:v1.0 / 2026-07
1. 概述
监听器是客户端与数据库的桥梁[1]:
作用:
- 接收连接
- 注册服务
- 转发请求
- 负载均衡
详细见:Oracle 网络配置与监听器。
2. listener.ora
2.1 基本
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradb1)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
ADR_BASE_LISTENER = /u01/app/oracle
2.2 多端口
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradb1)(PORT = 1521))
)
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradb1)(PORT = 1522))
)
)
2.3 静态注册
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = orclpdb)
(ORACLE_HOME = /u01/app/oracle/product/19.0.0/dbhome_1)
(SID_NAME = orcl)
)
)
2.4 多监听器
LISTENER1 =
(DESCRIPTION_LIST =
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oradb1)(PORT = 1521)))
)
LISTENER2 =
(DESCRIPTION_LIST =
(DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = oradb1)(PORT = 1522)))
)
3. tnsnames.ora
3.1 基本
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = oradb1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
3.2 RAC
ORCL =
(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 =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
)
)
)
3.3 SCAN
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac-scan)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
3.4 Data Guard
ORCL_PRI =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = pri-db)(PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl_pri))
)
ORCL_STD =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = std-db)(PORT = 1521))
(CONNECT_DATA = (SERVER = DEDICATED)(SERVICE_NAME = orcl_std))
)
4. sqlnet.ora
4.1 命名方法
NAMES.DIRECTORY_PATH = (TNSNAMES, EZCONNECT, LDAP)
4.2 超时
SQLNET.INBOUND_CONNECT_TIMEOUT = 60
SQLNET.OUTBOUND_CONNECT_TIMEOUT = 60
SQLNET.EXPIRE_TIME = 10
4.3 认证
SQLNET.AUTHENTICATION_SERVICES = (NTS)
# 或
SQLNET.AUTHENTICATION_SERVICES = (ALL)
4.4 加密
SQLNET.ENCRYPTION_SERVER = REQUIRED
SQLNET.ENCRYPTION_TYPES_SERVER = (AES256, AES192, AES128)
SQLNET.CRYPTO_CHECKSUM_SERVER = REQUIRED
SQLNET.CRYPTO_CHECKSUM_TYPES_SERVER = (SHA256, SHA1)
详细见:Oracle 网络加密详解。
5. 动态注册
5.1 LOCAL_LISTENER
ALTER SYSTEM SET local_listener = 'LISTENER' SCOPE=SPFILE;
-- 或
ALTER SYSTEM SET local_listener = '(ADDRESS=(PROTOCOL=TCP)(HOST=oradb1)(PORT=1521))' SCOPE=SPFILE;
5.2 强制注册
ALTER SYSTEM REGISTER;
5.3 验证
lsnrctl status
lsnrctl services
6. 监听器管理
6.1 启停
lsnrctl start
lsnrctl stop
lsnrctl status
lsnrctl reload
lsnrctl services
6.2 日志
# listener.ora
LOGGING_LISTENER = ON
LOG_DIRECTORY_LISTENER = /u01/app/oracle/diag/tnslsnr/oradb1/listener
LOG_FILE_LISTENER = listener.log
# 轮转
lsnrctl set log_status off
mv listener.log listener.old.log
lsnrctl set log_status on
7. 服务注册
7.1 静态 vs 动态
| 项 | 静态 | 动态 |
|---|---|---|
| 配置 | listener.ora | 自动 |
| 状态 | UNKNOWN | READY |
| 启动 | 启动前可连 | 启动后注册 |
7.2 服务
-- 添加服务
EXEC DBMS_SERVICE.CREATE_SERVICE('oltp', 'oltp');
-- 启动
EXEC DBMS_SERVICE.START_SERVICE('oltp');
-- 停止
EXEC DBMS_SERVICE.STOP_SERVICE('oltp');
-- 删除
EXEC DBMS_SERVICE.DELETE_SERVICE('oltp');
7.3 RAC
srvctl add service -db orcl -service oltp -preferred orcl1 -available orcl2
srvctl start service -db orcl -service oltp
8. 连接类型
8.1 Dedicated
- 每连接一进程
- OLTP
- 内存独占
8.2 Shared
- 共享进程
- 大量连接
- Dispatcher + Shared Server
8.3 DRCP
- Database Resident Connection Pooling
- 池化
- PHP/Web
8.4 配置
-- Shared
ALTER SYSTEM SET shared_servers = 5;
ALTER SYSTEM SET dispatchers = '(PROTOCOL=TCP)(SERVICE=orclXDB)';
9. 故障转移
9.1 TAF(客户端)
# tnsnames.ora
FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC)
(RETRIES = 180)
(DELAY = 5)
9.2 TAC(服务端)
EXEC DBMS_SERVICE.MODIFY_SERVICE(
service_name => 'oltp',
failover_method => 'BASIC',
failover_type => 'SELECT,SESSION',
failover_retries => 180,
failover_delay => 5
);
详细见:Oracle TAF 与 TAC 配置。
10. 测试
10.1 tnsping
tnsping orcl
tnsping orcl 5
10.2 sqlplus
sqlplus system/pwd@orcl
sqlplus system/pwd@//oradb1:1521/orcl
10.3 lsnrctl
lsnrctl status
lsnrctl services
lsnrctl ping
11. 监控
11.1 视图
SELECT * FROM v$listener_network;
SELECT service_name, status, instance_name FROM v$services;
11.2 日志
tail -f $ORACLE_BASE/diag/tnslsnr/oradb1/listener/alert/log.xml
12. 常见坑与排错
12.1 ORA-12541
- 监听器未启动
- lsnrctl start
- 端口
12.2 ORA-12154
- tnsnames.ora
- TNS_ADMIN
- 拼写
12.3 ORA-12514
- 服务未注册
- ALTER SYSTEM REGISTER
- 静态注册
12.4 ORA-12516
- 进程数满
- processes
12.5 ORA-12520
- 共享服务器
- shared_servers
13. 最佳实践
- SCAN:RAC
- 动态注册:现代
- 静态:备份
- 多监听器:负载
- 加密:安全
- 超时:防护
- TAF/TAC:高可用
- 日志轮转:空间
- 监控:及时
- 文档化:配置
14. 参考资料
[1] Oracle Database Net Services Administrator’s Guide 19c https://docs.oracle.com/en/database/oracle/oracle-database/19/netag/