设为首页 加入收藏

TOP

Oracle备库TNS连接失败的分析
2016-12-11 08:15:04 】 浏览:263
Tags:Oracle 备库 TNS 连接 失败 分析

抛出的错误如下:


$ sqlplus sys/oracle@testdb as sysdba
SQL*Plus: Release 12.1.0.2.0 Production on Thu Dec 8 15:30:10 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
ERROR:
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor


尝试连接PDB也是同样的错误。


查看$ORACLE_HOME/network/admin/listener.ora的配置。


已经做了静态注册.


SID_LIST_LISTENER_12c_1526=
(SID_LIST=
(SID_DESC=
(GLOBAL_DBNAME=testdb)
(ORACLE_HOME=/home/U01/app/oracle/product/12c/db_1)
(SID_NAME=testdb)
)
(SID_DESC=
(GLOBAL_DBNAME=test)
(ORACLE_HOME=/home/U01/app/oracle/product/12c/db_1)
(SID_NAME=testdb)
))


查看tnsnames.ora的配置也没有问题,


test =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xxx)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = test)
(SERVER = DEDICATED)
)
)


随便查看了一个监听的配置,比如1526


lsnrct status listener_12c_1526,输出也全然没有什么问题,所以自己感觉这问题越发奇怪,甚至还想,莫非又碰到了12c的一个bug了。


如果备库在ADG模式,备库TNS不可用,那备库就没有什么其他的意义了。


这个时候我们还是来看看监听日志,到指定目录下,发现了下面的内容。Thu Dec 08 14:43:17 2016
08-DEC-2016 14:43:17 * (CONNECT_DATA=(SERVICE_NAME=test)(SERVER=DEDICATED)(CID=(PROGRAM=sqlplus)(HOST=testdb2.cyou.com)(USER=oracle)
)) * (ADDRESS=(PROTOCOL=tcp)(HOST=xxxx)(PORT=2437)) * establish * test * 12514
TNS-12514: TNS:listener does not currently know of service requested in connect descriptor
Thu Dec 08 14:44:46 2016


看着这段内容,感觉哪里好像不大对劲,但是又实在说不出。


查看MOS,和主库反复做监听配置的比对,也没有发现问题,一筹莫展的时候,决定从头开始来看待这个问题。


监听的配置没有问题,根据错误只能指向监听的状态了。


我们来看看监听的进程状态


00:14:32 /home/U01/app/oracle/product/11.2.3/db_1/bin/tnslsnr LISTENER_1522 -inherit
00:13:43 /home/U01/app/oracle/product/11.2.3/db_1/bin/tnslsnr LISTENER_1528 -inherit
00:25:48 /home/U01/app/oracle/product/11.2.3/db_1/bin/tnslsnr LISTENER_1525 -inherit
00:14:35 /home/U01/app/oracle/product/11.2.3/db_1/bin/tnslsnr LISTENER_1523 -inherit
00:00:47 /home/U01/app/oracle/product/12c/db_1/bin/tnslsnr listener_12c_1526 -inherit
00:17:28 /home/U01/app/oracle/product/11.2.3/db_1/bin/tnslsnr LISTENER -inherit


看到这里,决定面壁5分钟。


原来我这个库上最早是安装了11g的ORACLE_HOME,没想到后来整合系统的时候,用了12c,搭建备库的时候,因为主备库的连接配置只设置了1526的端口,其它的都没动,所以n多天后用起来的时候,栽在了这里。


所以修复方式就很简单了,切换到11g的ORACLE_HOME,把之前的监听都停止,然后重新启动12c的监听即可。


所以说透过这个简单的问题,其实可以总结出很多小经验。


1. 问题解决不能止步于当前,因为偷懒,疏忽导致的后来的潜在问题,遗留问题


2. 另外一个是标准化,规范化的使用。无规矩不成方圆。


3. 测试验证,备库搭建完成后,可以做一些简单的应用测试,保证备库在ADG模式下可用


4. 这个过程中,有一个推理的逻辑不够严谨,连接的端口是1521,而我是用1526来做的简单验证。


5. 尽管这是一个测试环境,但是还是需要引以为戒。


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇OGG的Oracle与Hadoop集群准实时同.. 下一篇MySQL语句explain详解

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目