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

时间:2008-10-29 15:47:35

标签: database oracle ms-access odbc ora-12154

我正在尝试使用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 =(主机名,ONAMES,TNSNAMES,LDAP,EZCONNECT)

使用Windows ODBC驱动程序配置实用程序时,它会要求以下内容 以下信息 数据来源:MYSOURCE NAME TSN服务名称:UBASEP10G USERID:MYUSERID

任何建议?????

5 个答案:

答案 0 :(得分:2)

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

  1. 打开ODBC管理员(在管理员控制面板中)
  2. 对于用户DSN或系统DSN,请单击添加...
  3. 选择“OraDb10g_home1中的Oracle”作为驱动程序
  4. 在Oracle ODBC驱动程序配置中,我输入了:
    • 数据源名称:myOracleDsn
    • 描述:这是我的Oracle数据库的DSN
    • TNS服务名称:oratns
    • 用户名:scott
  5. 单击“测试连接”,然后输入“tiger”作为密码。显然,我正在连接我的scott / tiger示例Oracle数据库。此外,当我安装Oracle时,我选择了oratns作为我的TNS名称。上面的其他两个值是任意的 - 您将在Excel中的对话框中看到它们。
  6. 如果测试有效,请单击“确定”。
  7. 转到Excel并建立与DSN的新连接。该对话框将显示“myOracleDsn”作为选项。选择它,再次输入“tiger”作为密码,你应该得到一个有效的连接。

答案 1 :(得分: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文件不需要进行任何更改。

答案 2 :(得分:0)

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

如果是这样,请运行:

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

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

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

答案 3 :(得分: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...

答案 4 :(得分: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)