我正在尝试从ASP经典应用程序连接到oracle db,但是我一直遇到ORA-12154错误。
正确配置TNSNAMES.ORA
DBSOURCE.A.B.com = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS =(PROTOCOL = TCP)(HOST = C.D.B.com)(PORT = 1231)) ) (CONNECT_DATA = (SERVICE_NAME = DBSOURCE) ) )
我可以TNSPING
C:\ Documents and Settings \ USERID.A> tnsping DBSOURCE
适用于32位Windows的TNS Ping实用程序:版本10.2.0.4.0 - 09-MAR-2上的生产 011 09:12:31
版权所有(c)1997,2007,Oracle。保留所有权利。
使用过的参数文件: C:\ ORACLE \产品\ 10.2.0 \的Client_1 \ NETWORK \ ADMIN \ SQLNET.ORA
使用TNSNAMES适配器来解析别名 试图联系(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP) (HOST = C.D.B.com)(PORT = 1231)))(CONNECT_DATA =(SERVIC E_NAME = DBSOURCE))) 好的(30毫秒)
我可以创建一个ODBC连接,并且我已经测试了成功的连接。
我已经检查了我的sqlnet.ora文件
NAMES.DEFAULT_DOMAIN = A.B.com
SQLNET.AUTHENTICATION_SERVICES =(NONE)
NAMES.DIRECTORY_PATH =(TNSNAMES,EZCONNECT)
我还检查过TNSNAMES.ORA是我的系统路径之一。
我可以使用SQLPLUS
以下是抛出错误的代码
dim CnnStr
Set Cnn = Server.CreateObject("ADODB.Connection")
CnnStr="Provider=MSDAORA.1;Password=pass;User ID=user;Data Source=DBSOURCE"
Cnn.Open CnnStr
我正在运行Windows XP Pro 32bit SP3
我已经在同事机器上测试了这个并且asp应用程序没有问题,我在某处错过了配置还是搞砸了我的配置?
感谢大家的帮助!
答案 0 :(得分:4)
似乎已经检查了所有设置,但这是我对一些故障排除的建议:
(你最后做了什么来解决它?)
答案 1 :(得分:2)
“这适用于同事机器,但是 不是我的。“
ORA-12154通常是一个配置问题,在你的情况下肯定会是这样。简短的回答是将您的机器与您的同事进行比较,并找出其中的差异。
要检查的内容包括:
答案 2 :(得分:2)
您有多个Oracle家庭吗?检查IIS是否指向其他ORA_HOME(从而找不到您的tnsnames.ora条目)。 我对IIS配置不是很熟悉,所以我会通过在我的电脑上为所有tnsnames.ora添加TNS条目来测试它。
答案 3 :(得分:1)
如果您正在运行64位操作系统并且oracle 10尝试安装oracle的所有补丁。 类似的事情发生在我身上,SQL plus和其他所有工作,除了我的.NET程序。 我在“Program files(x86)”文件夹中运行.Net程序。安装补丁修复了它。
答案 4 :(得分:1)
可能的问题是用户IIS正在运行的Oracle目录缺乏读取权限。
正如@Derick所说,暂时在$ ORACLE_HOME目录(Everyone =完全控制)上设置权限全开,重新启动IIS并进行测试。如果有效,请为IIS用户授予对该目录的读取权限。
您还可以使用Process Monitor from Microsoft SysInternals确认此问题,并在CreateFile(...)API调用期间查看失败消息以打开DLL或读取TNSNAMES.ORA文件。考虑到通过游标选择时临时文件的工作方式,您可能还需要授予IIS用户对某些目录的写权限。
答案 5 :(得分:0)
尝试将问题机器上的环境变量TNS_ADMIN的值设置为/ network / admin(或者tnsnames.ora文件所在的位置),看看是否有帮助。
答案 6 :(得分:0)
我遇到了类似的问题并找到了一个简单的解决方案。您不必修改任何配置文件。希望这可以帮到你:
CREATE DATABASE LINK server2_db
CONNECT TO dbuser IDENTIFIED BY pwd USING
'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = server_2)(PORT = port_num))
)
(CONNECT_DATA =
(SERVICE_NAME = server2_db)
)
)';
解决方案来自:http://oraclequirks.blogspot.com/2008/11/ora-12154-tnscould-not-resolve-service.html