您的位置:首页 > 数据库

一次oralce数据库启动不起来的解决过程

2017-07-10 17:38 225 查看
前两天,开发的oracle库连不上,连接数据库时候报:连接Oracle时报错ORA-12541: TNS: 无监听程序。

表面现象:windows服务管理中,service服务正常启动、listener服务也正常启动,但连接不上。

当时也没有在意,把所有oracleservice关了再启动试试,还是报连不上。由于上面存在多个sid,不是十分必要,手下小兄弟,一股脑给删掉了,orcl服务倒是能用了。但保留的另一个sid还是不行。他尝试网上的方法,重新建立了监听,修改了 dbhome_1\NETWORK\ADMIN下的listener.ora 和tnsnames.ora 也于事无补。

没办法,只能我来搞了,听了他的解决思路,我分析了下,还是要修改listener.ora 等文件,但不能像没头苍蝇一样去解决。重建了listener,在服务里看上去貌似是好的,可能存在问题我们不可知。于是我先查看listener状态:

lsnrctl  status

果然发现监听状态不正常,报错 ORA-12571 : TNS 包写入程序失败。

网上查了下解决方案:将/network/admin目录下sqlnet.ora 中“SQLNET.AUTHENTICATION_SERVICES=(NTS)”中的NTS改为NONE。

重启监听,再次用lsnrctl  status查看状态,发现已经不报tns之类的错误,但是也没有显示状态是正常的,而是指到了tnsnames.ora,类似于(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=“主机名”)(PORT=1521))) 这样的话上。显然这个配置有问题。

此时尝试用客户端连接数据库,报ORA-12505: TNS: 监听程序当前无法识别连接描述符中所给出的SID。

利用以下语句查看hostname

select HOST_NAME from v$instance

发现tnsnames.ora配置中主机名多了域,比如查询主机名叫 dirful,配置里叫(PROTOCOL=TCP)(HOST=“dirful.xx.yy”)(PORT=1521))) ,也就是大家说的要么主机名不对,要么ip不对。进行了修改。

再次重启监听,查看状态

看到了如下类似的话:

服务 "TESTXDB" 包含 1 个实例。
实例 "test", 状态 READY, 包含此服务的 1 个处理程序...
服务 "test" 包含 1 个实例。
实例 "test", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcl" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
命令执行成功


经测试,数据库已经正常。

此次总结,对于数据库启动不起来的问题,先从查看监听状态入手。lsnrctl  status
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐