在配置Oracle网络前,需确保Linux系统的网络接口已正确配置,满足数据库通信需求。
编辑网络接口配置文件(CentOS/RHEL为/etc/sysconfig/network-scripts/ifcfg-eth0,Debian/Ubuntu为/etc/network/interfaces),设置静态IP、子网掩码、网关和DNS:
# CentOS/RHEL示例(静态IP)
DEVICE=eth0
BOOTPROTO=static
IPADDR=192.168.1.100
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
DNS1=8.8.8.8
DNS2=8.8.4.4
ONBOOT=yes
# Debian/Ubuntu示例(静态IP)
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8 8.8.4.4
修改后重启网络服务:
# CentOS/RHEL
sudo systemctl restart network
# Debian/Ubuntu
sudo service networking restart
SELinux可能阻止Oracle网络服务运行,临时关闭:
sudo setenforce 0
永久关闭需修改配置文件:
sudo sed -i 's/selinux=enforcing/selinux=disabled/g' /etc/selinux/config
/etc/hosts文件确保主机名与IP地址映射正确,避免DNS解析问题:
192.168.1.100 your_hostname
监听器负责接收客户端连接请求,其配置文件位于$ORACLE_HOME/network/admin/listener.ora($ORACLE_HOME为Oracle安装目录)。
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_hostname)(PORT = 1521)) # 监听TCP协议、指定主机和端口
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) # 可选:IPC协议用于本地连接
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = orcl) # 数据库实例SID(需与数据库实际SID一致)
(ORACLE_HOME = /u01/app/oracle/product/19c/dbhome_1) # Oracle安装路径
# (PROGRAM = extproc) # 可选:用于外部过程调用
)
)
LISTENER:监听器名称(可自定义,如LISTENER_ORCL)。ADDRESS:监听的网络地址,PROTOCOL支持TCP(默认)、IPC、SDP等;HOST可为域名或IP地址(如192.168.1.100或localhost);PORT默认为1521(可修改,需与客户端一致)。SID_LIST_LISTENER:静态注册的数据库实例列表(Oracle 12c及以上版本可通过动态注册替代,但仍需配置以支持本地连接)。# 启动监听器
lsnrctl start
# 查看监听器状态(确认监听端口、注册的实例)
lsnrctl status
# 重新加载配置(无需重启即可应用修改)
lsnrctl reload
# 停止监听器
lsnrctl stop
tnsnames.ora文件用于定义客户端连接数据库的别名(TNS名称),简化连接字符串,位于$ORACLE_HOME/network/admin/tnsnames.ora。
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = your_hostname)(PORT = 1521)) # 监听器地址
)
(CONNECT_DATA =
(SERVICE_NAME = orcl) # 数据库服务名(需与数据库实际服务名一致)
# (SID = orcl) # 可选:旧版本使用SID(12c及以上推荐用SERVICE_NAME)
)
)
ORCL:TNS名称(客户端连接时使用的别名,如sqlplus user/password@ORCL)。ADDRESS_LIST:监听器地址列表,支持多个地址(用于负载均衡或故障转移)。CONNECT_DATA:数据库服务标识,SERVICE_NAME为数据库服务名(可通过lsnrctl status查看),SID为实例SID(旧版本使用)。ORCL_LOAD_BALANCE =
(DESCRIPTION =
(ADDRESS_LIST =
(LOAD_BALANCE = on) # 启用客户端负载均衡
(FAILOVER = off) # 关闭故障转移
(ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
ORCL_FAILOVER =
(DESCRIPTION =
(ADDRESS_LIST =
(LOAD_BALANCE = off)
(FAILOVER = on) # 启用故障转移
(ADDRESS = (PROTOCOL = TCP)(HOST = host1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = host2)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
若客户端与数据库在同一台Linux机器上,可直接使用服务器的tnsnames.ora配置;若为客户端机器,需将服务器的tnsnames.ora复制到客户端的$ORACLE_HOME/network/admin/目录下,或通过TNS_ADMIN环境变量指定配置文件路径:
# 设置TNS_ADMIN环境变量(临时)
export TNS_ADMIN=/path/to/tnsnames.ora/directory
# 永久设置(添加到~/.bash_profile或/etc/profile)
echo 'export TNS_ADMIN=/path/to/tnsnames.ora/directory' >> ~/.bash_profile
source ~/.bash_profile
使用sqlplus工具测试客户端与数据库的连接:
# 使用TNS名称连接
sqlplus username/password@ORCL
# 使用完整连接字符串(无需tnsnames.ora)
sqlplus username/password@//your_hostname:1521/orcl
若连接成功,将显示Oracle数据库命令行界面;若失败,需检查监听器状态、网络连通性(ping your_hostname)、防火墙设置等。
listener.ora文件语法(如括号匹配、参数正确性)。sudo netstat -tulnp | grep 1521
tnsnames.ora中的TNS名称、主机名、端口、服务名与服务器配置一致。# CentOS/RHEL(firewalld)
sudo firewall-cmd --permanent --add-port=1521/tcp
sudo firewall-cmd --reload
# Ubuntu(ufw)
sudo ufw allow 1521/tcp
local_listener参数设置正确(默认指向监听器地址):SQL> SHOW PARAMETER local_listener;
SQL> ALTER SYSTEM SET local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=your_hostname)(PORT=1521))';
lsnrctl status)。