oracleTNS-12555: TNS:permission denied、TNS-12541: TNS:no listener、Instance "orcl", status UNKNOWN

1. TNS-12555: TNS:permission denied

报错记录:

LSNRCTL> start
Starting /u01/app/oracle/product/12.1.0/dbhome_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 12.1.0.2.0 - Production
System parameter file is /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)))
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521)))
TNS-12555: TNS:permission denied
 TNS-12560: TNS:protocol adapter error
  TNS-00525: Insufficient privilege for operation
   Linux Error: 1: Operation not permitted

Listener failed to start. See the error message(s) above...

根据《Oracle 启动失败报错“TNS-12555: TNS:permission denied”解决办法》《记一次监听无法启动 之 TNS-12555: TNS:permission denied》以及《启动listener遇TNS-12555/ TNS-12560 /TNS-00525错误处理》
可知,/var/tmp下的隐藏.oracle文件权限问题导致报错,修改权限即可。
也可跟踪启动进程查看具体信息:

[oracle@localhost ~]$ strace lsnrctl start
execve("/u01/app/oracle/product/12.1.0/dbhome_1/bin/lsnrctl", ["lsnrctl", "start"], [/* 35 vars */]) = 0
brk(NULL)                               = 0x192d000	
····中间省略许多,重点是接下来这句
socket(AF_LOCAL, SOCK_STREAM, 0)        = 6
access("/var/tmp/.oracle/sEXTPROC1521", F_OK) = 0
connect(6, {sa_family=AF_LOCAL, sun_path="/var/tmp/.oracle/sEXTPROC1521"}, 110) = -1 ECONNREFUSED (Connection refused)
access("/var/tmp/.oracle/sEXTPROC1521", F_OK) = 0
nanosleep({0, 100000000}, 0x7ffe83990f40) = 0

确实是文件的权限问题导致,用root用户将文件权限修改后启动成功

[root@localhost tmp]# ll -a
drwxrwxrwt.  2 root    root       60 Mar  3 09:15 .oracle
[root@localhost tmp]# chown oracle:oinstall .oracle
[root@localhost tmp]# ll -a
drwxrwxrwt.  2 oracle  oinstall   60 Mar  3 09:15 .oracle

2. TNS-12541: TNS:no listener

报错记录:

oracle@localhost ~]$ lsnrctl status

LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 07-MAR-2020 07:01:45

Copyright (c) 1991, 2014, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)))
TNS-12541: TNS:no listener
 TNS-12560: TNS:protocol adapter error
  TNS-00511: No listener
   Linux Error: 111: Connection refused
······以下省略······

继续用strace lsnrctl start定位下原因,找到如下一段

·····以上省略
rite(1, "TNSLSNR for Linux: Version 12.1."..., 563TNSLSNR for Linux: Version 12.1.0.2.0 - Production
System parameter file is /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=127.0.0.1)(PORT=1521)))
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=localhost.localdomain)(PORT=1521)))
TNS-12542: TNS:address already in use
 TNS-12560: TNS:protocol adapter error
  TNS-00512: Address already in use
   Linux Error: 98: Address already in use
····以下省略

怀疑是不是贴的IP地址太多导致的,修改了一下监听文件listener.ora,把多的IP都给注释了

SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = orcl)
      (ORACLE_HOME = /u01/app/oracle/product/12.1.0/dbhome_1)
      (GLOBAL_DBNAME= orcl)
    )
  )
LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
#      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
 #     (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.197)(PORT = 1521))
  #    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
    )
  )

同样tnsnames.ora也修改了下

orcl =
  (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.100.197)(PORT = 1521))
#    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
 #   (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
)
(CONNECT_DATA =
      (SID_NAME = orcl)
    )
  )

还参考了《Instance “orcl”, status UNKNOWN, has 1 handler(s) for this service…》,把/etc/hosts文件修改了下

127.0.0.1   localhost
192.168.100.197          localhost.localdomain
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

以及参考《Instance “PLSExtProc”, status UNKNOWN, has 1 handler(s) for this service服务没有被注册上》,进入SQL后启动Oracle注册了服务

解决方式:
oracle用户下
1.执行sqlplus / as sysdba;
2.修改local_listener参数,sql> alter system set local_listener=’’; --这里没有按照同样操作,主要是没太懂
3.再重新注册服务,sql> alter system register;
4.sql>exit;

重启了几次监听后,竟然成功了。。。。

LSNRCTL> status
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.100.197)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 12.1.0.2.0 - Production
Start Date                07-MAR-2020 07:09:15
Uptime                    0 days 0 hr. 3 min. 49 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/12.1.0/dbhome_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/diag/tnslsnr/localhost/listener/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.100.197)(PORT=1521)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=localhost.localdomain)(PORT=5500))(Security=(my_wallet_directory=/u01/app/oracle/admin/orcl/xdb_wallet))(Presentation=HTTP)(Session=RAW))
Services Summary...
Service "orcl" has 1 instance(s).
  Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl.localdomain" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB.localdomain" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "pdborcl.localdomain" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully

感觉有点误打误撞的乱改一通,目前存疑,暂未弄清楚问题所在,唯一的好结果是监听成功了。

3. Instance “orcl”, status UNKNOWN, has 1 handler(s) for this service…

重启虚机后监听启动继续报错,由于之前有经验,参考《Instance “PLSExtProc”, status UNKNOWN, has 1 handler(s) for this service服务没有被注册上》,进入SQL后启动Oracle注册了服务
以下是解决步骤:

[oracle@localhost ~]$ sqlplus /nolog

SQL*Plus: Release 12.1.0.2.0 Production on Sun Mar 8 06:42:16 2020

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

SQL> conn sys/password as sysdba
Connected to an idle instance.
SQL> startup
ORACLE instance started.

Total System Global Area  511705088 bytes
Fixed Size                  2926176 bytes
Variable Size             377489824 bytes
Database Buffers          125829120 bytes
Redo Buffers                5459968 bytes
Database mounted.
Database opened.
SQL> alter  system register;

System altered.

再次查看监听状态,恢复正常

services Summary...
Service "orcl" has 1 instance(s).
  Instance "orcl", status UNKNOWN, has 1 handler(s) for this service...
Service "orcl.localdomain" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "orclXDB.localdomain" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
Service "pdborcl.localdomain" has 1 instance(s).
  Instance "orcl", status READY, has 1 handler(s) for this service...
The command completed successfully

后记:

附:通过在lsnrctl中输入set display
verbose,然后再通过命令service查看,服务状态为READY表示PMON自动注册的服务名,而UNKNOWN则表示该服务是手工在LISTENER.ORA中配置的数据库服务。

合着这压根不是报错啊。。。存疑。

发布了86 篇原创文章 · 获赞 23 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_32392597/article/details/104643777
今日推荐