阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Oracle备库TNS连接失败的分析

238次阅读
没有评论

共计 2386 个字符,预计需要花费 6 分钟才能阅读完成。

今天在测试 Oracle 12c 的 temp_undo 的时候,准备在备库上测试一下,突然发现备库使用 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. 尽管这是一个测试环境,但是还是需要引以为戒。

更多 Oracle 相关信息见 Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2016-12/138106.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计2386字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中