我正在尝试使用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 回答
我没有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"作为密码,你应该得到一个有效的连接 .
尝试在TNSNAMES.ora文件中更改(CONNECT_DATA =(SERVICE_NAME = UBASE))到(CONNECT_DATA =(SID = UBASE)) .
ServiceName和SID不一定相同,因此并不总是可互换的 .
SERVICENAME参数引用数据库服务器上的listener.ora文件中指定的特定GLOBAL_DBNAME . 它是服务器上实例的别名 . 您可以在引用相同SID的服务器上拥有多个服务名称 . SID参数指的是该服务器上的特定实例 .
在客户端使用servicename的优点是DBA可以透明地将服务名称引用的实际实例更改为使用该名称的客户端 . 我可以在服务器listener.ora文件中有这个:
稍后,我可以通过切换listener.ora配置来更改正在引用的实际数据库:
没有人在客户端更聪明 . 客户端上的tnsnames.ora文件不需要进行任何更改 .
您可以通过SQL * Plus登录有问题的数据库吗?从具有工作连接的另一台机器(或DB服务器本身)执行此操作也很好 .
如果是这样,请运行:
在您的TNSNAMES.ORA中,使用其中列出的值之一作为SERVICE_NAME .
在您的ODBC连接中,您只需要将TNS服务名称设置为您在上面使用的名称“UBASEP10G”
让我们回到原点 . 打开命令窗口并连接到您的数据库:
sqlplus myuserid / mypassword @ UBASEP10G
这是否成功连接?
既然答案是否定的,有没有办法成功连接到这个数据库? BQ是正确的,你的问题在于UBASE的服务名称 . 您需要确定服务器上的侦听器认为该数据库的名称是什么 . 你有权访问服务器吗?你能在服务器上执行命令“lsnrctl status”吗?这将告诉您向侦听器注册的服务,如下所示:
尝试tnsping并报告您的结果 .
坏:
好: