在配置Oracle网络前,需完成以下基础工作:
ping命令测试)。oracle)运行Oracle服务,并设置正确的权限。监听器是Oracle网络的核心组件,负责接收客户端连接请求并转发至对应数据库实例。
监听器配置文件listener.ora默认位于$ORACLE_HOME/network/admin目录(如/u01/app/oracle/product/12.2.0/dbhome_1/network/admin)。
listener.ora文件使用文本编辑器(如vi)修改listener.ora,添加或修改以下内容:
LISTENER = (
DESCRIPTION_LIST = (
DESCRIPTION = (
ADDRESS = (PROTOCOL = TCP)(HOST = your_server_ip)(PORT = 1521) # 替换为服务器实际IP
)
)
)
SID_LIST_LISTENER = (
SID_LIST = (
SID_DESC = (
GLOBAL_DBNAME = your_db_name # 替换为数据库全局名(如ORCL)
ORACLE_HOME = $ORACLE_HOME
SID_NAME = your_sid_name # 替换为数据库实例名(如ORCL)
)
)
)
说明:
HOST:若需远程连接,需将localhost改为服务器IP或域名。SID_LIST_LISTENER:静态注册数据库实例,确保监听器能自动识别实例(动态注册需通过ALTER SYSTEM REGISTER;命令实现)。使用lsnrctl命令管理监听器:
# 启动监听器
lsnrctl start
# 停止监听器
lsnrctl stop
# 查看监听器状态(确认监听端口及实例注册情况)
lsnrctl status
若监听器启动失败,需检查listener.ora文件语法(如括号匹配)及端口是否被占用(netstat -tulnp | grep 1521)。
客户端通过tnsnames.ora文件解析数据库服务名,实现连接。
tnsnames.ora文件路径与listener.ora一致($ORACLE_HOME/network/admin)。
tnsnames.ora文件添加以下内容(以连接本地数据库为例):
YOUR_DB_SERVICE = (
DESCRIPTION = (
ADDRESS = (PROTOCOL = TCP)(HOST = your_server_ip)(PORT = 1521)
)
CONNECT_DATA = (
SERVER = DEDICATED
SERVICE_NAME = your_service_name # 替换为数据库服务名(可通过`lsnrctl status`查看)
)
)
说明:
YOUR_DB_SERVICE:自定义服务名(如ORCL),客户端连接时使用(格式:username/password@YOUR_DB_SERVICE)。SERVICE_NAME:数据库实例的服务名(需与监听器配置中的GLOBAL_DBNAME一致)。确保Oracle客户端能正确找到配置文件,需设置以下环境变量:
使用文本编辑器修改~/.bash_profile(当前用户)或/etc/profile(全局):
export ORACLE_HOME=/u01/app/oracle/product/12.2.0/dbhome_1 # 替换为Oracle安装路径
export PATH=$ORACLE_HOME/bin:$PATH
export TNS_ADMIN=$ORACLE_HOME/network/admin # 指定网络配置文件目录
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
执行以下命令使配置生效:
source ~/.bash_profile
echo $ORACLE_HOME # 应输出Oracle安装路径
echo $TNS_ADMIN # 应输出网络配置文件目录
使用tnsping命令测试服务名解析:
tnsping YOUR_DB_SERVICE
若输出OK,说明tnsnames.ora配置正确。
确保防火墙允许Oracle网络流量(默认端口1521),并根据需要调整SELinux策略。
# 开放1521端口
sudo firewall-cmd --permanent --add-port=1521/tcp
# 重新加载防火墙规则
sudo firewall-cmd --reload
# 开放1521端口
sudo iptables -A INPUT -p tcp --dport 1521 -j ACCEPT
# 保存规则(CentOS 7及以上)
sudo service iptables save
若SELinux处于Enforcing模式,需允许Oracle网络访问:
# 允许Oracle访问网络
setsebool -P oracle_can_network_on 1
若无需SELinux安全功能,可临时禁用:
sudo setenforce 0
永久禁用需修改/etc/selinux/config文件,将SELINUX=enforcing改为SELINUX=disabled。
使用客户端工具(如sqlplus、PL/SQL Developer)测试远程连接:
# 使用sqlplus命令行工具
sqlplus username/password@YOUR_DB_SERVICE
若成功登录,说明Oracle网络配置完成。
ORA-12541: TNS:no listener:
lsnrctl start。netstat -tulnp | grep 1521),并终止冲突进程。ORA-12154: TNS:could not resolve the connect identifier specified:
tnsnames.ora文件路径错误:确认TNS_ADMIN环境变量指向正确目录。tnsnames.ora中的SERVICE_NAME或GLOBAL_DBNAME是否与数据库实例一致。监听器无法自动注册实例:
ALTER SYSTEM REGISTER;命令强制注册。local_listener参数错误:通过SHOW PARAMETER local_listener;检查参数值,确保指向监听器地址(如localhost:1521)。