【问题标题】:ODP.NET ORA-12154 TNS error only when run as service仅当作为服务运行时 ODP.NET ORA-12154 TNS 错误
【发布时间】:2014-07-30 23:23:44
【问题描述】:

我正在 VB.NET 中编写一个服务,以使用 ODP.NET 将数据持续记录到 Oracle DB

该应用程序最初是作为一个基本的 Windows 窗体应用程序编写的,但是当我将它移植到服务时,它似乎看不到 TNS 文件并抛出以下错误消息:

Service cannot be started. Oracle.DataAccess.Client.OracleException
ORA-12154:TNS:could not resolve the connect identifier specified    

所以当使用下面的例子连接字符串时

"Data Source= example;User Id= user;Password=password;"

我得到 ORA-12154

如果我直接向应用程序提供完整的 TNS 条目,例如

"Data Source= (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = EXAMPLE)(PORT = 1521)) ) (CONNECT_DATA = (SERVICE_NAME = EXAMPLE) ) );User Id= user;Password=password;"

然后它可以工作,但是当我最初将应用程序开发为表单应用程序时,它可以工作。

我认为可能环境变量设置不正确,但我添加了所需的系统变量(ORACLE_HOME / TNS_ADMIN / 将 oracle 文件夹添加到 PATH),但它不起作用。

正在运行/安装服务的路径不包含括号,我已经使用进程监视器检查了进程,看起来它正在使用正确的环境变量启动(ORACLE_HOME / TNS_ADMIN / PATH 都在那里并正确)。用于测试的机器运行Win XP

我在这里错过了什么?

谢谢

【问题讨论】:

    标签: vb.net oracle service odp.net


    【解决方案1】:

    我怀疑运行该服务的用户需要对整个 oracle 目录树的文件系统权限。这感觉像是权限问题,因为它无法解析连接标识符,但在不需要时可以工作。

    尝试为运行该服务的任何用户添加对整个 oracle 客户端目录的读取权限。

    【讨论】:

    • 问题是我使用的 TNS 文件位于网络共享 (ifile=//etc) 上,并且该服务在本地用户帐户下启动时没有对该共享的所需权限.谢谢
    • @user1671538 太棒了 - 所以我的怀疑/回答(这是一个权限问题)最终成真了?
    猜你喜欢
    • 2010-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多