我已将应用程序的一个组件从Web服务移动到Windows服务。它完全从Web服务连接到oracle,但拒绝从Windows服务中查看Tns名称。我已经完全控制了ORAHOME dir到运行该服务的帐户。
我还使用runas regedit作为服务帐户检查了注册表的服务帐户权限,它可以看到HKLM \ SOFTWARE \ ORACLE \ HOME0详细信息和HKLM \ SOFTWARE \ ORACLE \ ALL_HOMES。所有ORACLE_HOME键都指向同一目录。
我可以作为服务帐户登录,并且可以毫无问题地删除sid'UAT':
'OK (70 msec)'
我已将进程监视器附加到进程,并且服务帐户(最终在扫描大部分注册表之后)看到tnsnames.ora甚至读取它。
你在键盘后面咯咯笑吗?你能帮忙吗?
Cause: OracleException
Source: System.Data.OracleClient
Message: ORA-12154: TNS:could not resolve service name
at System.Data.ProviderBase.DbConnectionPool.GetConnection(DbConnection owningObject)
at System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
at System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
at System.Data.OracleClient.OracleConnection.Open()
答案 0 :(得分:5)
首先,您可以更改连接字符串以展开tns条目:
Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.161.50.101)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=MOUAT)));Password=password;User Id=username;
然后你得到了真正的错误:
And got ‘ORA-06413: Connection not open.’
这是由于'Windows服务'路径中包含括号'(DEV)'或'(UAT)'
解答:展开连接字符串以排除TNS解析,然后确保调用应用程序的路径不包含括号'('或')'。
答案 1 :(得分:1)
尝试将windows环境变量TNS_ADMIN设置为tnsnames.ora文件所在的路径并重新启动服务。
答案 2 :(得分:1)
运行Process Monitor以查看它是否正在加载TNSNAMES.ORA文件。我怀疑它是,但你的名字解析被打破了那个用户。
如果您可以使用服务帐户以交互方式登录,请尝试使用tnsping查看是否可以连接到该名称。
Oracle按此顺序解析文件(根据Metalink文章114085.1):
查看使用Process Monitor读取的内容(如果有)。
答案 3 :(得分:0)
检查服务是否可以通过告诉oracle访问tnsnames.ora文件所在的注册表项。从内存中,它是HKLM \ SOFTWARE \ ORACLE \ Key_Client,带有TNS_NAMES注册表字符串,该字符串是包含tnsnames.ora文件的文件夹。您也可以在HKCU树中创建相同的东西。
哎呀!现在我在工作,我可以看到字符串名称应为TNS_ADMIN。同时尝试使用env变量TNS_ADMIN并确保HKCU中没有任何内容。同样注意到,您需要与tnsnames.ora相同的文件夹中的sqlnet.ora文件
答案 4 :(得分:0)
首先检查您的操作系统是32位还是64位。如果它是64位然后安装oracle express edition 64bit那么它将不会产生任何错误并成功运行....
访问http://behindfutureworld.weebly.com了解更多细节.....