背景:公司办公系统正常运行了三四年了一直没啥大问题,今天一上班有同事反馈服务连不上了,然后开始了这次排查之路:
1、遇到oracle问题,第一步肯定是先查看服务是否开启:
-- 监听服务
OracleOraDb11g_home1TNSListener
-- 数据库主服务
OracleServiceORCL
就是这两个。吐槽:这个我感觉不太准啊,我看服务明明启动着,但是后来用sql plus链接的时候却提示oracle-01034
2、看了下服务都启动着没啥问题,然后再试试NetManager ,发现连接不上提示12541。这个应该是oracle很常见的错了,因为服务一直都正常运行,网上说的哪些监听问题应该不会发生的。
先去找两个文件:…\app\admin\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora 和 …\app\admin\product\11.2.0\dbhome_1\NETWORK\ADMIN\listener.ora
tnsnames.ora
ORACLR_CONNECTION_DATA =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
(CONNECT_DATA =
(SID = CLRExtProc)
(PRESENTATION = RO)
)
)
ORCL =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 机器名)(PORT = 1521))
)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = 服务名)
)
)
有两个注意点:
1:HOST最好写机器名,有时候IP会变化导致监听不到,localhost也发现过不靠谱,万一要别人连你的数据库呢,所以写机器名就对了。但是千万记得如果你后来要是改过机器名以后一定要回来把这块修改下。
2:服务名要区分大小写,这个坑是在连navicate的时候遇到的,大家都注意下。
楼主当时看了下,我这两块都没问题。
3、实在不行那我把监听和服务重配一下把,然后我就利用了开始菜单中的“Oracle Net Configuration Assistance”了,具体步骤就不详细描述了,度娘里到处都是。重新配置后发现还是不行。这个怎么办呢。。
4、经过一段痛苦的排查,终于定位到问题:Oracle的日志文件--listener.log导致的。这个日志如果过大也会导致oracle-12541这个错,这个日志过大还会导致TNS-12570: TNS: 包阅读程序失败这类错误。
oracle12541 这个错出现了N次了,每次原因的不一样,特此把个人解决该问题的方案做个记录。