zoukankan      html  css  js  c++  java
  • 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地址的情况下)

    学习链接

  • 相关阅读:
    CSS 文本
    javascript:void(0)的问题
    剑指offer
    牛课--C/C++
    Linux学习--第二波
    面经-csdn
    初学Linux
    二分查找法的实现和应用汇总
    vs2013下git的使用
    win10+vs2013+Qt5.4 安装方法
  • 原文地址:https://www.cnblogs.com/bellin124/p/14553941.html
Copyright © 2011-2022 走看看