Oracle TNS无法解析ORA-12154报错

在服务器配置好Python开发环境,进行数据库连接测试时发现,程序运行报错:

cx_Oracle.DatabaseError:ORA-12154:TNS:无法解析指定的连接标识符

分析:在我本机电脑测试数据库连接正常,服务器有问题,服务器的数据库使用正常,任务计划也正常运行

进行tnsping

Oracle Net 工具(命令)tnsping,是一个OSI会话层的工具,它用来:

1)验证名字解析(nameresolution,当然是oracle自己的网络服务名)

2)远程的listener是否启动

1.tnsping需要使用TCP,所以需要3次握手建立连接,而ping只使用IP,所以不需要3次握手,这也就解释了为什么有的机器不能ping通,但是用tnsping确能测试通。

2.tnsping通,并不能说明客户端能与数据库建立连接。因为ping通只能说明客户端能解析listener的机器名,而且listener也已经启动,但是并不能说明数据库已经打开,而且tsnping的过程与真正客户端连接的过程也不一致。

但是如果不能用tnsping通,则肯定连接不到数据库。

命令格式:

tnsping  IP地址:端口号/数据库服务名 [count]

tnsping  网络服务名 [count]

比如:tnsping localhost:1521/study

发现TNS连接异常,可以看到对应TNS连接的配置文件目录

找到对应目录sqlnet.ora,发现为空并没有对应的TNS配置,有另一个TNS配置文件tnsnames.ora,有对应的TNS配置

 文件内容形如:

STUDYDB =

  (DESCRIPTION =

    (ADDRESS_LIST =

      (ADDRESS =(PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

    )

    (CONNECT_DATA =

      (SERVICE_NAME= study)

    )

  )

将tnsnames.ora TNS配置复制到sqlnet.ora,tnsping OK,Python测试OK,问题解决。

注:一般的TNS无法解析首先查看对应.ora文件配置是否正常。

彻底解决ora-12545错误,需要:

1) 配置一个域名服务器,并正确的设置客户端机器的域名服务器

2) 将服务器的机器名与ip配置在客户端的hosts文件中.

3) 将客户端tnsnames.ora和listener.ora中的地址部分都改为ip地址,而不是用机器名

4) 将客户端的连接改为专用连接,这样会避免redirect现象。(适用与客户端tnsnames.ora中为服务器的ip地址的情况下)

学习链接

原文地址:https://www.cnblogs.com/bellin124/p/14553941.html