2008-10-29 112 views
1

我想用MS访问连接到Oracle数据库。 我不断收到以下错误信息:Oracle - ODBC连接使用MS Access错误(ORA-12154)

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

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文件:

名。 DIRECTORY_PATH =(HOSTNAME,ONAMES, TNSNAMES,LDAP,EZCONNECT)

当使用它会要求提供以下 Windows的ODBC驱动程序配置实用程序以下信息 数据源名称:MYSOURCE NAME TSN服务名称:UBASEP10G 用户名:MYUSERID

有什么建议? ????

回答

2

我没有访问,但使用Excel 2007,我必须做到以下几点:

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

尝试在您的TNSNAMES.ora文件中将(CONNECT_DATA =(SID = UBASE))更改为(CONNECT_DATA =(SID = UBASE))。

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

SERVICENAME参数引用数据库服务器上的listener.ora文件中指定的特定GLOBAL_DBNAME。它是服务器上实例的别名。您可以在引用相同SID的服务器上拥有多个servicenames。 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

感谢您的建议 - 但我仍然在尝试测试连接时出现错误消息“TSN:无法解析指定的连接标识符” – Joe 2008-10-29 16:43:34

0

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

如果是这样,这条命令:

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

在你的TNSNAMES.ORA,使用的SERVICE_NAME所列的值之一。

在你ODBC连接,所有你需要的是设置TNS服务名称到你上面所用的名字,“UBASEP10G”

+0

我相信我正在这样做,它不起作用....数据源名称:MYSOURCE名称TSN服务名称:UBASEP10G USERID:MYUSERID ....通知服务名称:UBASEP10G是不是你刚才建议的? – Joe 2008-10-29 16:58:15

+0

TNSNAMES.ORA中的“SERVICE_NAME”和ODBC对话框中的“TNS服务名称”有所区别。在对话框中,“TNS服务名称”需要与TNSNAMES.ORA文件(“UBASEP10G”)中的=左边的内容完全相同。 – 2008-10-29 17:15:19

+0

但是,您的问题是您无法解析TNSNAMES.ORA中的SERVICE_NAME。这就是为什么我让你直接从数据库实例认为它正在监听的地方获得这个值。 – 2008-10-29 17:16:29

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

尝试t登并报告结果。

坏:

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)