一、现象:
# 启动监听报错提示:- Listener Parameter File /db/oracle/product/11.2.0/network/admin/listener.ora
- Listener Log File /db/oracle/diag/tnslsnr/VM-80-3-centos/dspm/alert/log.xml
- Listening Endpoints Summary...
- (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp) (HOST=10.1.1.3) (PORT=1532)))
- he listener supports no services
- he commandcompleted successfully
复制代码
二、背景
因业务需求,数据存放在oracle中,现需通过镜像规复(或因迁移更改服务器ip),Oracle数据库无法连接,
# 出处博客园:# https://www.cnblogs.com/liucx/
三、解决方法
1、如果你安装oracle数据库时采取主机名解析的话,需要修改/etc/hosts文件(设置ip可忽略)2、采取ip地点的话,需要修改两个文件:listener.ora、tnsnames.ora,然后重启监听- find /db -name listener.ora
- find /db -name tnsnames.ora # 查找这两个文件的地址,修改其IP地址
- # cat /db/oracle/product/11.2.0/network/admin/listener.ora
- dspm =
- (DESCRIPTION_LIST =
- (DESCRIPTION =
- (ADDRESS = (PROTOCOL = TCP)(HOST = 10.21.16.48)(PORT = 1532))
- )
- )
- ADR_BASE_dspm = /db/oracle
- # cat /db/oracle/product/11.2.0/network/admin/tnsnames.ora
- dspm,dspm.world =
- (description =
- (address = (protocol = tcp)(host = 10.21.16.48)(port = 1532))
- (connect_data = (sid = dspm))
- )
复制代码 3、启动监听- lsnrctl stop $ORACLE_SID
- lsnrctl start $ORACLE_SID
复制代码 4、启动数据库- sqlplus '/ as sysdba'
- startup;
复制代码 5、修改监听IP(因监听文件是动态注册,故需要修改)- # 查看数据库实例本地监视器IP地址+端口
- show parameter local_listener;
- # 修改 local_listener 参数,SCOPE=BOTH 选项意味着更改将同时更新内存中的系统全局区(SGA)和 spfile(如果使用的是 spfile),10.21.16.48为新IP。
- ALTER SYSTEM SET local_listener='(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.21.16.48)(PORT=1532)))' SCOPE=BOTH;
- # 重新注册数据库到监听器,更改 local_listener 参数后,您可能需要手动触发数据库实例重新向监听器注册。
- ALTER SYSTEM REGISTER;
- # 验证更改
- show parameter local_listener;
- exit
复制代码 6、检查监听器状态- lsnrctl status $ORACLE_SID
复制代码
# 已启动正常
7、测试远程登录
# 连接
sqlplus user/password@10.21.16.48:1532/dspm
# 查询当前数据库状态和名称
select open_mode,name from v$database;
查询正常! PS: 动态注册默认只注册到默认的监听器上(名称是LISTENER、端口是1521、协议是TCP。由于pmon只会动态注册por等于1521的监听否则pmon不能动态注册listener,如果需要向非默认监听注册,则需要设置local_listener参数
Oracle 数据库中的监听器(Listener)是一个独立的进程,用于监听并吸收来自客户端的连接哀求。监听器的注册分为两种类型:动态注册和静态注册。这两种注册方式重要区别在于如何将数据库服务的信息传递给监听器。
### 动态注册(Dynamic Registration)
动态注册也被称为自动注册。在这种模式下,Oracle 数据库实例会在启动时自动向监听器注册其服务信息,包括服务名和实例名等。这种注册是通过 Oracle Net 的服务名解析过程实现的。
- **实现方式**:动态注册使用的是 Oracle Net 的 PMON(进程监督器)进程,该进程每隔一定时间就会自动向监听器发送更新的服务信息。
- **设置**:动态注册通常不需要在`listener.ora`中进行特别设置,但需要确保监听器能够吸收来自数据库的注册信息(一般通过默认的 `TCP` 端口 1521 或通过 `local_listener` 参数指定的地点)。
### 静态注册(Static Registration)
静态注册要求数据库管理员在监听器的设置文件 `listener.ora` 中明确指定数据库服务的详细信息。这包括服务名、数据库的 IP 地点、端口等信息。
- **实现方式**:通过在 `listener.ora` 文件中添加服务描述,来告诉监听器如何连接到特定的数据库服务。- # 配置示例
- SID_LIST_LISTENER =
- (SID_LIST =
- (SID_DESC =
- (GLOBAL_DBNAME = db_service_name)
- (ORACLE_HOME = /oracle/product/12.1.0/dbhome_1)
- (SID_NAME = sid_name)
- )
- )
复制代码 E-mail:57349220@qq.com出处:https://www.cnblogs.com/liucx/本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保存此段声明,且在文章页面明显位置给出原文连接,否则保存追究法律责任的权利.
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
|