【Oracle】ORA-12505TNS:listener does not currently know of SID given in connect descriptor 之一

博主介绍: 大家好,我是想成为Super的Yuperman,互联网宇宙厂经验,17年医疗健康行业的码拉松奔跑者,曾担任技术专家、架构师、研发总监负责和主导多个应用架构。
技术范围: 目前专注java体系,有多年java、golang、.Net、DDD、软件架构、redis、nginx、tomcat、mysql、oracle等经验
业务范围: 对传统业务应用技术转型,从数字医院到区域医疗,从院内业务系统到互联网医院及健康服务,从公立医院到私立医院都有一些经历及理解
*** 为大家分享一些技术积累,欢迎交流合作 持续关注Yuperman ***

解决应用程序无法连接Oracle数据库问题,报错
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor
ORA-12505, TNS:监听程序当前无法识别连接描述符中所给出的 SID

  • 注:本问题解决的不是数据库初次安装引起的问题,而是业务系统已经正常运行一段时间,突然发生无法连接情况

Oracle常见问题系列文章

Oracle最大连接数配置
ORA-03137: TTC 协议内部错误
客户端或plsql无法连接Oracle问题之一
客户端或plsql无法连接Oracle问题之二

本文环境

服务器操作系统: windows server 2016
ORACLE 版本: ORACLE 11.2.0.1.0
应用程序:springboot

SID 系统标识符说明

SID是Oracle数据库中的一个唯一标识符,用于区分不同的数据库实例。它是由数据库在启动时自动生成的,通常与数据库实例的名称相同。SID的命名通常采用大写字母,并且长度不超过8个字符。SID在连接到数据库时,作为连接字符串的一部分使用。

例如,考虑一个数据库实例名为”ORCL”的Oracle数据库。在tnsnames.ora文件中,我们可以定义一个连接到这个数据库实例的条目如下:

ORCL =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SID = ORCL)
    )
  )

在这个示例中,”ORCL”是SID的名称,它被用于连接到这个数据库实例。


1.问题描述

线上系统正常运行,突然系统无法登录及使用,发现业务系统无法连接数据库,提示错误:NetException: Listener refused theconnection with the following error: ORA-12505TNS:listener does not currently know of SID given inconnect descriptor

排查步骤:

经过了解线上情况排查后发现,系统未做升级及任何改动,但是由于其他系统发生问题,重启了Oracle数据库,所以判定应该是有数据库重启引起的问题,对spingboot 应用服务进行重启后,spingboot可以正常访问数据库。
在这里插入图片描述


2.问题原因

本文中遇到的问题猜测应该是ORACLE数据库进行了重启,引起了springboot与oracle建立的连接所使用的CONNECTION ID发生了变化,所以无法连接,引起的客户端无法连接

Oracle 的 CONNECTION ID 发生变更引起


3.解决方法:

重启了springboot应用程序,问题解决。


4.案例总结:

本文遇到的问题是线上业务系统在使用过程中,对oracle数据库进行了重启引起应用程序无法连接。
另外还有一种情况是如果应用系统首次运行或应用环境发生了变更,则大概率是数据库连接字符串书写格式的问题引起,这个也需要大家注意。
常见的两种Oracle数据库连接格式如下

//监听sid服务,表示sid为orcl
database.url=jdbc:oracle:thin:@171.xxx.96:xxxx:orcl
//监听服务名,表示服务名为orcl
database.url=jdbc:oracle:thin:@171.xxx.96:xxxx/orcl

推荐使用

//监听服务名,表示服务名为orcl
database.url=jdbc:oracle:thin:@171.xxx.96:xxxx/orcl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓风残月Yuperman

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值