oracle服务无法注册到监听的解决流程

有时候我们lsnrctl start成功启动监听之后,查看status一直显示no service

1
2
The listener supports no services
The command completed successfully

对于这类问题,一般我的解决步骤如下:

1、查看数据库是否宕机
登录数据库查看数据库是否运行正常。对于12c数据库,通过show pdbs或者查询v$pdbs视图获取PDB状态
2、尝试强制注册服务
以sysdba登录数据库,执行以下命令

1
SQL>alter system register;

3、查看local_listener参数是否有问题
sqlplus / as sysdba登录数据库,执行show parameter local查看参数值与tnsname.ora中配置的值是否相同(对于动态注册监听,由PMON进程读取tnsname.ora中的相关信息)。
修改local_listener参数值指向tnsname.ora中配置的监听名:

1
2
SQL > alter system set local_listener=LISTENER;
SQL > alter system register;

或者直接将local_listener的值为监听配置

1
2
SQL > alter system set local_listener='(ADDRESS=(PROTOCOL=TCP)(HOST=dbsw)(PORT=1521))';
SQL > alter system register;

一般来说到此都能解决服务注册的问题。下面提一下静态注册。
4、静态注册
静态注册的信息在listener.ora文件中。我们通过netmgr配置既是修改的该文件。我们可以通过ORACLE Net Manager进行图形化的配置。也可以直接手动的在listener.ora中添加配置:

1
2
3
4
5
6
7
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(SID_NAME = orcl)
)
)