连接Oracle数据库报错:ORA-12516 或 ORA-12505

事情起因是这样的,小程所在单位的Oracle数据库由原来的单数据库做了集群改造,导致好几个业务系统数据库连接都报错

原因分析

Oracle数据库的JDBC URL格式通常有servicename和sid两种格式,如下:

jdbc:oracle:thin:@hostname:port/servicename
或者
jdbc:oracle:thin:@hostname:port:sid

原来单个数据库采用的是sid的方式,做了集群后使用的是servicename方式,造成了下面的报错提示:

ORA-12516, TNS:listener could not find available handler with matching protocol stack
ORA-12505, TNS:listener does not currently know of SID given in connect descriptor

解决方案

一、首先检查oracle配置文件的连接方式是否为服务名(SERVICE_NAME)

DB =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 172.18.XX.XX)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DB)
    )
  )

二、具体业务修改

java代码配置文件 [ : 换成 / ]

url: jdbc:oracle:thin:@IP地址:1521:服务名
改成
url: jdbc:oracle:thin:@IP地址:1521/服务名

kettle 工具

数据库测量连接中,在主机名称前面加上 // , 在数据库名称前面加上 /,如

在这里插入图片描述

Tip
当然也有不改动SERVICE_NAME的方式,就是直连数据库某个节点的sid,比如db1和db2做了集群,对外是db,连接方式还是跟原来一样,但是改成db1即可。但是也会存在问题,当db1数据库崩溃了,该业务系统需要切换到db2,所以还是不太建议用这个方式。

请关注我吧,一起来探讨技术的奥秘,交流更多的技术经验!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值