首页 文章

Oracle - 使用MS Access错误的ODBC连接(ORA-12154)

提问于
浏览
1

我正在尝试使用MS访问连接到Oracle数据库 . 我继续收到以下错误消息:

ORA-12154:TSN-无法解析已连接的连接标识符

Oracle驱动程序OracleClient10g可以验证数据库服务器是否存在 .

我在tsnnames.ora文件中有一个如下所示的部分:UBASEP10G =(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = bxxx-xxx.yyyy.com)(PORT = 1521)))( CONNECT_DATA =(SERVICE_NAME = UBASE)))

根据我尝试获取此错误的结果,我将其添加到sqlnet.ora文件中:

NAMES.DIRECTORY_PATH =(HOSTNAME,ONAMES,TNSNAMES,LDAP,EZCONNECT)

使用Windows ODBC驱动程序配置实用程序时,它会要求以下信息DATA SOURCE NAME:MYSOURCE NAME TSN SERVICE NAME:UBASEP10G USERID:MYUSERID

有什么建议 ?????

5 回答

  • 2

    我没有Access,但使用Excel 2007,我必须执行以下操作:

    • 打开ODBC管理员(在管理员控制面板中)

    • 对于用户DSN或系统DSN,单击添加...

    • 选择"Oracle in OraDb10g_home1"作为驱动程序

    • 在Oracle ODBC驱动程序配置中,我输入了:

    • 数据源名称:myOracleDsn

    • 描述:这是我的Oracle数据库的DSN

    • TNS服务名称:oratns

    • 用户ID:scott

    • 单击“测试连接”,然后输入"tiger"作为密码 . 显然,我会在Excel中的对话框中看到它们 .

    • 如果测试有效,请单击“确定” .

    • 转到Excel并 Build 与DSN的新连接 . 该对话框将显示"myOracleDsn"作为选项 . 选择它,再次输入"tiger"作为密码,你应该得到一个有效的连接 .

  • 0

    尝试在TNSNAMES.ora文件中更改(CONNECT_DATA =(SERVICE_NAME = UBASE))到(CONNECT_DATA =(SID = UBASE)) .

    ServiceName和SID不一定相同,因此并不总是可互换的 .

    SERVICENAME参数引用数据库服务器上的listener.ora文件中指定的特定GLOBAL_DBNAME . 它是服务器上实例的别名 . 您可以在引用相同SID的服务器上拥有多个服务名称 . SID参数指的是该服务器上的特定实例 .

    在客户端使用servicename的优点是DBA可以透明地将服务名称引用的实际实例更改为使用该名称的客户端 . 我可以在服务器listener.ora文件中有这个:

    (SID_DESC =
      (GLOBAL_DBNAME = THESERVICE)
      (ORACLE_HOME = d:\oracle\10.2.0_DB)
      (SID_NAME = SID1)
    

    稍后,我可以通过切换listener.ora配置来更改正在引用的实际数据库:

    (SID_DESC =
      (GLOBAL_DBNAME = THESERVICE)
      (ORACLE_HOME = d:\oracle\10.2.0_DB)
      (SID_NAME = SID2)
    

    没有人在客户端更聪明 . 客户端上的tnsnames.ora文件不需要进行任何更改 .

  • 0

    您可以通过SQL * Plus登录有问题的数据库吗?从具有工作连接的另一台机器(或DB服务器本身)执行此操作也很好 .

    如果是这样,请运行:

    select value from v$parameter where name='service_names';
    

    在您的TNSNAMES.ORA中,使用其中列出的值之一作为SERVICE_NAME .

    在您的ODBC连接中,您只需要将TNS服务名称设置为您在上面使用的名称“UBASEP10G”

  • 0

    让我们回到原点 . 打开命令窗口并连接到您的数据库:

    sqlplus myuserid / mypassword @ UBASEP10G

    这是否成功连接?

    既然答案是否定的,有没有办法成功连接到这个数据库? BQ是正确的,你的问题在于UBASE的服务名称 . 您需要确定服务器上的侦听器认为该数据库的名称是什么 . 你有权访问服务器吗?你能在服务器上执行命令“lsnrctl status”吗?这将告诉您向侦听器注册的服务,如下所示:

    Services Summary...
    Service "UBASE" has 1 instance(s).
      Instance "UBASE", status READY, has 1 handler(s) for this service...
    
  • 0

    尝试tnsping并报告您的结果 .

    坏:

    C:\>tnsping notreal.world
    
    TNS Ping Utility for 32-bit Windows: Version 9.2.0.5.0 - Production on 29-OCT-2008 15:56:47
    
    Copyright (c) 1997 Oracle Corporation.  All rights reserved.
    
    Used parameter files:
    C:\oracle\ora92\network\admin\sqlnet.ora
    
    TNS-03505: Failed to resolve name
    

    好:

    O:\>tnsping real.world
    
    TNS Ping Utility for 32-bit Windows: Version 9.2.0.5.0 - Production on 29-OCT-2008 15:57:42
    
    Copyright (c) 1997 Oracle Corporation.  All rights reserved.
    
    Used parameter files:
    
    C:\oracle\ora92\network\admin\sqlnet.ora
    
    Used TNSNAMES adapter to resolve the alias
    Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
    (HOST = DBSERVER.DOMAIN.COM)(PORT = 1521)) (LOAD_BALANCE = YES) (FAILOVER = YES))
    (CONNECT_DATA = (SERVICE_NAME = REAL.WORLD) 
    (FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 10) (DELAY = 3))))
    OK (40 msec)
    

相关问题