在自己的虚拟机的做实验,突然发现使用PL/sql Developer无法连接到数据库,报错ORA-12514,说是监听没有启动。
先介绍虚拟机一下环境:redhat7.2+GI 12.2.0.1+Oracle 12.2.0.1,为了测试12.2的ASM特性安装了GI。平时监听程序默认是开启启动的。但是今天不知道为什么没有启动。使用crsctl查看资源状态:发现监听的状态确实是OFFLINE状态
[root@rhel7.oracle]#cRSStat -------------------------------------------------------------------------------- NaMetargetStateServerStatedetails -------------------------------------------------------------------------------- LocalResources -------------------------------------------------------------------------------- ora.DATA.dg ONLINEONLINErhel7STABLE ora.LISTENER.lsnr ONLINEOFFLINErhel7STABLE ora.asm ONLINEONLINErhel7Started,STABLE ora.ons OFFLINEOFFLINErhel7STABLE -------------------------------------------------------------------------------- ClusterResources -------------------------------------------------------------------------------- ora.cssd 1ONLINEONLINErhel7STABLE ora.diskmon 1OFFLINEOFFLINESTABLE ora.driver.afd 1ONLINEONLINErhel7STABLE ora.evmd 1ONLINEONLINErhel7STABLE ora.ora12c.db 1ONLINEONLINErhel7Open,HOME=/u01/app/o racle/product/12.2/d b_home1,STABLE --------------------------------------------------------------------------------
尝试手动启动监听,依然报错:
[grid@rhel7~]$srvctlstartlistener PRCR-1079:Failedtostartresourceora.LISTENER.lsnr CRS-5016:Process"/u01/app/grid/bin/lsnrctl"spawnedbyagent"ORAAGENT"foraction"start"Failed:detailsat"(:CLSN00010:)"in"/u01/app/12.2/grid/diag/crs/rhel7/crs/trace/ohasd_oraagent_grid.trc" CRS-5016:Process"/u01/app/grid/bin/lsnrctl"spawnedbyagent"ORAAGENT"foraction"start"Failed:detailsat"(:CLSN00010:)"in"/u01/app/12.2/grid/diag/crs/rhel7/crs/trace/ohasd_oraagent_grid.trc" CRS-2674:Startof'ora.LISTENER.lsnr'on'rhel7'Failed
LSNRCTLforLinux:Version12.2.0.1.0-Productionon15-NOV-201720:03:28 Copyright(c)1991,2016,Oracle.Allrightsreserved. Starting/u01/app/grid/bin/tnslsnr:pleasewait... TNSLSNRforLinux:Version12.2.0.1.0-Production Systemparameterfileis/u01/app/grid/network/admin/listener.ora Logmessageswrittento/u01/app/12.2/grid/diag/tnslsnr/rhel7/listener/alert/log.xml Listeningon:(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rhel7)(PORT=1521))) Errorlisteningon:(DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1521))) TNS-12555:TNS:permissiondenied TNS-12560:TNS:protocoladaptererror TNS-00525:Insufficientprivilegeforoperation LinuxError:1:Operationnotpermitted ListenerFailedtostart.Seetheerrormessage(s)above...
看到Insufficient privilege for operation这个字样觉得很纳闷,怎么会权限不足呢,于是尝试用root直接启动监听,依然报错:
[root@rhel7.oracle]#lsnrctlstart LSNRCTLforLinux:Version12.2.0.1.0-Productionon15-NOV-201720:22:30 Copyright(c)1991,Oracle.Allrightsreserved. Starting/u01/app/grid/bin/tnslsnr:pleasewait... TNS-12546:TNS:permissiondenied TNS-12560:TNS:protocoladaptererror TNS-00516:Permissiondenied LinuxError:13:Permissiondenied
于是各种百度,下面把百度到内容列出来,可能会对看此文的同学有用,但是对我这种情况没有用:
主要是说 /var/tmp/.oracle、/tmp/.oracle 这两个目录的权限访问问题。 进入 一看,我的/var/tmp/.oracle权限 没问题,而/tmp/.oracle压根就没有这个文件。
于是直接查MOS,看有没有相关的文档,找到两篇文档:
Starting the Listener Fails With: TNS-12557 or TNS-12555: TNS:Permission Denied (文档 ID 343253.1)
Listener Fails To Start With IPC Permission Errors (TNS-12546 TNS-12555 TNS-00516 TNS-00525) (文档 ID 434062.1)
对比了文档中列出的问题,跟我的情况也不一相,看到最后发现这样一句话:
4. If you find that there are no adapters linked or they have errors (such as "Permission denied") then issue a "relink all"
Reference:
Doc ID 1467060.1
于是只有用这种方法来试试了,由于crs使用的是grid home下的监听命令所以对grid home做relink all操作。可是又出现报错:
[grid@rhel7bin]$relinkall TheOraclehomeinwhichyouarerunningthisrelinkingtooldoesnot haveproperwritepermissions.Pleaserunthisrelinkscriptasthesame userwhoownstheOraclehomeandensurethattheOraclehomehasthe permissionsfromtheoriginalinstallation. IfthisisaGridInfrastructurehome,pleaserefertothe documentationfortheproperstepstorelinkandapplyoneoffpatches.
意思是说权限不足,使用root执行,又报错说不能用root执行
[root@rhel7bin]#relinkall Therelinkscriptcannotberunasroot.
又查看grid home目录权限
[root@rhel7app]#ls-ldgrid total8 drwxr-x---84rootoinstall4096Jul1820:26grid
原来owner是root,怪不得第一次执行不成功,修改owner(应该直接chmod也可以,这里没有做测试),重新执行relink all
[root@rhel7app]#chowngridgrid [grid@rhel7~]$relinkall writingrelinklogto:/u01/app/grid/install/relink.log
成功后再次启动监听,启动成功。
[grid@rhel7~]$lsnrctlstart LSNRCTLforLinux:Version12.2.0.1.0-Productionon15-NOV-201720:50:59 Copyright(c)1991,Oracle.Allrightsreserved. Starting/u01/app/grid/bin/tnslsnr:pleasewait... TNSLSNRforLinux:Version12.2.0.1.0-Production Systemparameterfileis/u01/app/grid/network/admin/listener.ora Logmessageswrittento/u01/app/12.2/grid/diag/tnslsnr/rhel7/listener/alert/log.xml Listeningon:(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rhel7)(PORT=1521))) Listeningon:(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) Connectingto(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=rhel7)(PORT=1521))) STATUSoftheLISTENER ------------------------ AliasLISTENER VersionTNSLSNRforLinux:Version12.2.0.1.0-Production StartDate15-NOV-201720:51:00 Uptime0days0hr.0min.0sec TraceLeveloff SecurityON:LocalOSAuthentication SNMPOFF ListenerParameterFile/u01/app/grid/network/admin/listener.ora ListenerLogFile/u01/app/12.2/grid/diag/tnslsnr/rhel7/listener/alert/log.xml ListeningEndpointsSummary... (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=rhel7)(PORT=1521))) (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521))) Thelistenersupportsnoservices Thecommandcompletedsuccessfully
至次问题解决。