2026年CentOS Oracle网络设置完全指南:监听器与连接配置(2026)

一、Oracle网络组件概述

1.1 Oracle网络组件组成

Oracle网络配置主要涉及三个组件:

  • Oracle Listener(监听器):负责接收客户端连接请求
  • TNS(Transparent Network Substrate):透明网络层
  • Oracle Net Manager:网络管理工具
# 查看监听器状态
lsnrctl status

# 查看Oracle进程
ps -ef | grep ora_

1.2 网络连接类型

Oracle支持多种连接类型:

  • Dedicated Server(专用服务器):每个客户端独占一个服务器进程
  • Shared Server(共享服务器):多个客户端共享服务器进程池
  • Oracle Connection Manager:连接管理器

二、Oracle Listener配置

2.1 Listener简介

Oracle Listener是Oracle网络通信的核心组件,负责监听客户端连接请求。

# 1. 查看监听器配置位置
echo $ORACLE_HOME/network/admin

# 2. 查看listener.ora文件
cat $ORACLE_HOME/network/admin/listener.ora

# 3. 查看监听器日志
tail -f $ORACLE_HOME/network/log/listener.log

2.2 配置Listener

# 1. 编辑listener.ora
nano $ORACLE_HOME/network/admin/listener.ora

# 添加以下内容:
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1)
      (SID_NAME = ORCL)
    )
  )

2.3 启动和停止Listener

# 1. 启动监听器
lsnrctl start

# 2. 停止监听器
lsnrctl stop

# 3. 重启监听器
lsnrctl reload

# 4. 查看监听器状态
lsnrctl status

# 5. 测试连接
tnsping ORCL

三、TNS配置

3.1 TNS简介

TNS(Transparent Network Substrate)是Oracle的网络层协议。

# 查看TNS配置
cat $ORACLE_HOME/network/admin/tnsnames.ora

3.2 配置TNS

# 1. 编辑tnsnames.ora
nano $ORACLE_HOME/network/admin/tnsnames.ora

# 添加以下内容(根据实际情况修改):
ORCL =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )

PDB1 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = pdb1)
    )
  )

3.3 测试TNS连接

# 1. 使用tnsping测试
tnsping ORCL

# 2. 使用SQLPlus连接
sqlplus system/password@ORCL

# 3. 使用EZCONNECT
sqlplus system/password@//192.168.1.100:1521/orcl

四、连接字符串配置

4.1 基本连接字符串

# 1. 基本格式
username/password@//host:port/service_name

# 2. 示例
sqlplus system/password@//localhost:1521/orcl
sqlplus system/password@//192.168.1.100:1521/orcl

4.2 JDBC连接字符串

// JDBC Thin驱动
String url = "jdbc:oracle:thin:@//192.168.1.100:1521/orcl";

// PDB连接
String url = "jdbc:oracle:thin:@//192.168.1.100:1521/pdb1";

// TCPS加密连接
String url = "jdbc:oracle:thin:@//192.168.1.100:1521/orcl";
Properties props = new Properties();
props.setProperty("oracle.net.ssl_server_dn_match", "true");

4.3 Python连接字符串

# 使用cx_Oracle
import cx_Oracle

# 基本连接
conn = cx_Oracle.connect("system", "password", "192.168.1.100:1521/orcl")

# 使用TNS别名
conn = cx_Oracle.connect("system", "password", "ORCL")

五、网络安全配置

5.1 限制监听器访问

# 1. 编辑sqlnet.ora
nano $ORACLE_HOME/network/admin/sqlnet.ora

# 添加以下内容:
# 允许特定IP
tcp.validnode_checking = yes
tcp.invited_nodes = (192.168.1.10, 192.168.1.20)

# 拒绝特定IP
tcp.excluded_nodes = (192.168.1.100)

5.2 使用SSL/TLS加密

# 1. 配置SSL
# 编辑sqlnet.ora
nano $ORACLE_HOME/network/admin/sqlnet.ora

# 添加:
SQLNET.AUTHENTICATION_SERVICES = (TCPS)
SQLNET.ENCRYPTION_CLIENT = REQUESTED
SQLNET.ENCRYPTION_SERVER = REQUIRED

# 2. 配置监听器SSL
# 编辑listener.ora
nano $ORACLE_HOME/network/admin/listener.ora

# 添加:
SECURE_REGISTER_LISTENER = (TCP)

5.3 防火墙配置

# 1. 开放Oracle端口
firewall-cmd --permanent --add-port=1521/tcp
firewall-cmd --reload

# 2. 限制特定IP访问
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="1521" protocol="tcp" accept'
firewall-cmd --reload

# 3. 查看规则
firewall-cmd --list-all

5.4 使用Oracle Wall

# 1. 创建Wallet
mkstore -wrl $ORACLE_HOME/wallet -create

# 2. 添加凭证
mkstore -wrl $ORACLE_HOME/wallet -createCredential ORCL system password

# 3. 配置sqlnet.ora
echo "WALLET_LOCATION=(SOURCE=(METHOD=FILE)(METHOD_DATA=(DIRECTORY=$ORACLE_HOME/wallet)))" >> $ORACLE_HOME/network/admin/sqlnet.ora
echo "SQLNET.WALLET_OVERRIDE=TRUE" >> $ORACLE_HOME/network/admin/sqlnet.ora

# 4. 使用Wallet连接(无需密码)
sqlplus /@ORCL

六、连接问题排查

6.1 ORA-12154错误

# 错误:TNS:无法解析指定的连接标识符

# 解决方案:
# 1. 检查tnsnames.ora
cat $ORACLE_HOME/network/admin/tnsnames.ora

# 2. 设置TNS_ADMIN
export TNS_ADMIN=$ORACLE_HOME/network/admin

# 3. 测试TNS解析
tnsping ORCL

# 4. 使用EZCONNECT代替
sqlplus system/password@//192.168.1.100:1521/orcl

6.2 ORA-12541错误

# 错误:TNS:无监听程序

# 解决方案:
# 1. 检查监听器状态
lsnrctl status

# 2. 启动监听器
lsnrctl start

# 3. 检查端口
netstat -tulnp | grep 1521

# 4. 检查防火墙
firewall-cmd --list-all

6.3 ORA-12514错误

# 错误:TNS:监听程序当前无法识别连接描述符中请求的服务

# 解决方案:
# 1. 检查SERVICE_NAME
lsnrctl services

# 2. 在listener.ora中添加服务名
nano $ORACLE_HOME/network/admin/listener.ora

# 添加:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1)
      (SID_NAME = ORCL)
    )
  )

# 3. 重启监听器
lsnrctl reload

6.4 ORA-12505错误

# 错误:TNS:监听程序无法识别连接描述符中给出的SID

# 解决方案:
# 1. 检查SID
lsnrctl services

# 2. 确认数据库实例名
select instance_name from v$instance;

# 3. 在listener.ora中添加正确的SID

七、性能优化

7.1 连接池配置

# 1. 配置Shared Server
# 编辑init.ora参数
shared_servers = 5
max_shared_servers = 20
dispatchers = "(PROTOCOL=TCP)(LISTENER=1521)(POOL=ON)(TICKETS=20)"

# 2. 重启数据库
sqlplus / as sysdba
SHUTDOWN IMMEDIATE;
STARTUP;

7.2 连接超时配置

# 1. 配置SQLNET.EXPIRE_TIME
# 在sqlnet.ora中添加
SQLNET.EXPIRE_TIME = 10

# 2. 配置INBOUND_CONNECT_TIMEOUT
INBOUND_CONNECT_TIMEOUT = 60

# 3. 配置OUTBOUND_CONNECT_TIMEOUT
SQLNET.OUTBOUND_CONNECT_TIMEOUT = 120

7.3 优化网络参数

# 在sqlnet.ora中优化:
# 禁用DNS解析
SQLNET.INBOUND_CONNECT_TIMEOUT = 60
SQLNET.OUTBOUND_CONNECT_TIMEOUT = 120

# 启用连接验证
SQLNET.RECV_TIMEOUT = 30
SQLNET.SEND_TIMEOUT = 30

八、远程连接配置

8.1 配置静态监听

# 1. 编辑listener.ora添加静态监听
nano $ORACLE_HOME/network/admin/listener.ora

# 添加:
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL)
      (ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1)
      (SID_NAME = ORCL)
    ),
    (SID_DESC =
      (GLOBAL_DBNAME = ORCL_DG)
      (ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1)
      (SID_NAME = ORCL)
    )
  )

# 2. 重启监听器
lsnrctl reload

8.2 配置多个监听器

# 1. 创建第二个监听器
nano $ORACLE_HOME/network/admin/listener2.ora

# 添加:
LISTENER2 =
  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1522))
  )

# 2. 启动第二个监听器
lsnrctl start listener2

8.3 配置VIP和SCAN IP

# 1. 配置VIP(在Clusterware中)
# 使用srvctl添加VIP
srvctl add vip -node racnode1 -ip 192.168.1.201 -netmask 255.255.255.0

# 2. 配置SCAN IP
srvctl add scan -scanname rac-scan -ip 192.168.1.200

九、监控和日志

9.1 监听器日志

# 1. 查看监听器日志
tail -f $ORACLE_HOME/network/log/listener.log

# 2. 启用监听器跟踪
lsnrctl set trace on
lsnrctl set trace_level admin

# 3. 关闭跟踪
lsnrctl set trace off

9.2 连接日志

# 1. 启用SQLNET日志
# 在sqlnet.ora中添加
LOG_DIRECTORY_CLIENT = /var/log/oracle
LOG_FILE_CLIENT = sqlnet.log

# 2. 查看日志
tail -f /var/log/oracle/sqlnet.log

9.3 性能监控

# 1. 查看连接统计
lsnrctl services

# 2. 查看监听器状态
lsnrctl status

# 3. 使用v$session监控
SELECT username, program, module
FROM v$session
WHERE username IS NOT NULL;

十、总结

CentOS上的Oracle网络配置是数据库运维的核心技能,主要包括:

  1. Listener配置:监听器是连接的核心
  2. TNS配置:连接字符串的解析
  3. 连接字符串:多种连接方式
  4. 安全配置:防火墙、SSL、Wallet
  5. 问题排查:常见错误的解决方案
  6. 性能优化:连接池、超时配置
  7. 远程连接:静态监听、VIP/SCAN
  8. 监控日志:问题诊断

核心要点
– 使用EZCONNECT简化连接配置
– 配置防火墙开放1521端口
– 使用Oracle Wallet保护密码
– 定期检查监听器状态
– 配置连接池提升性能
– 启用SSL/TLS加密敏感连接

通过本文的指南,你可以在CentOS上顺利配置Oracle网络连接。

注:本文基于CentOS 7/8和Oracle 19c编写,具体配置可能因版本差异而略有不同。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注