zoukankan      html  css  js  c++  java
  • ORA-12154 & TNS-03505 案例分享

         下面介绍一个工作中遇到的案例场景,应用服务器连接数据库出现”ORA-12154: TNS: 无法解析指定的连接标识符“。一般情况下ORA-12541错误是很容易排除的,但是这次遇到案例场景跟以往有所不同,我先模拟这样一个环境,然后一一道来。

        

         应用服务器安装的ORACLE 11g客户端,tnsname里面的有如下配置,我们要通过它连接到目标服务器

    TEST =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.xxx.xxxx)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = xxxx)
        )
      )

     

    此时连接数据库时,就会报ORA-12154: TNS: 无法解析指定的连接标识符。仔细检查过tnsname里面的配置,没有任何问题。

    C:Users>sqlplus test/test@TEST

    SQL*Plus: Release 11.2.0.1.0 Production on 星期一 5月 16 14:00:04 2016

    Copyright (c) 1982, 2010, Oracle. All rights reserved.

    ERROR:

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

    请输入用户名:

     

    clip_image001

     

    接下来尝试一下tnsping是否正常,发现其报TNS-03505: Failed to resolve name。 两个服务器直接的网络是正常的。telnet 检测1521端口也是正常的。

    C:Users>tnsping TEST

    TNS Ping Utility for 32-bit Windows: Version 11.2.0.1.0 - Production on 16-5月 -

    2016 14:20:44

    Copyright (c) 1997, 2010, Oracle. All rights reserved.

    已使用的参数文件:

    C:OracleClientOracle32product11.2.0client_1 etworkadminsqlnet.ora

    TNS-03505: 无法解析名称

    clip_image002

     

    是否很纳闷,那么环境变量是否正常呢? 在David的这篇博客ORA-12154 和 TNS-03505 监听错误的解决方法里面有介绍。echo %path% 查看环境变量都OK,而且也能使用sqlplus连接到其它数据库(后面述说),说明应用服务器的客户端环境是正常的。那么为什么会出现这样的诡异的问题呢?其实是因为在客户端的sqlnet.ora配置文件里面,添加了一行"NAMES.DEFAULT_DOMAIN = db.test.com", 如下所示,

    clip_image003

     

    解决方法有两种:

    1:修改tnsname.ora里面的配置信息,改为下面即可解决这个问题。此时使用TEST.db.test.com 或TEST都可以连接到数据库。

    2:修改sqlnet.ora配置文件,删除这一行"NAMES.DEFAULT_DOMAIN = db.test.com"。

    TEST.db.test.com =
      (DESCRIPTION =
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.xxx.xxxx)(PORT = 1521))
        )
        (CONNECT_DATA =
          (SERVER = DEDICATED)
          (SERVICE_NAME = xxxx)
        )
      )

    clip_image004

    clip_image005

     

    关于NAMES.DEFAULT_DOMAIN 请参考下面官方文档介绍。

    NAMES.DEFAULT_DOMAIN

    Purpose

    To set the domain from which the client most often looks up names resolution requests.

    Usage Notes

    When this parameter is set, the default domain name is automatically appended to any unqualified net service name or service name.

    For example, if the default domain is set to us.example.com, then the connect string CONNECT scott@sales gets searched as sales.us.example.com. If the connect string includes the domain extension, such as CONNECT scott@sales.us.example.com, then the domain is not appended to the string.

    Default

    None

    Example

    NAMES.DEFAULT_DOMAIN=example.com
    

     

     

  • 相关阅读:
    使用boost中的property_tree实现配置文件
    C++ 中使用boost::property_tree读取解析ini文件
    引用计数的原理和实例
    C++智能指针(auto_ptr)详解
    Oracle数据库用户锁定原因以及处理方式(ORA-28000)
    Address already in use : connect 的解决办法
    JMeter之Ramp-up Period(in seconds)说明(可同时并发)
    JMETER压力测试报错:JAVA.NET.BINDEXCEPTION: ADDRESS ALREADY IN USE: CONNECT
    spring cloud学习填坑笔记
    使用JMeter进行一次简单的带json数据的post请求测试,json可配置参数
  • 原文地址:https://www.cnblogs.com/kerrycode/p/5498334.html
Copyright © 2011-2022 走看看