2011-12-27 71 views
5

我们有一个计划在Windows Server 2003上的任务计划程序中运行的C#程序,该程序旨在根据从多个Oracle数据库中提取的信息删除文件夹中的过期文件。我可以手动执行应用程序,一切工作正常 - 以自己的身份登录管理权限,或以具有用户权限的指定任务用户身份登录。任务计划程序中的Oracle错误

当任务用户注销的机器,但是,应用程序失败有两个错误之一每个数据库上:要么

ORA-12504:TNS:监听器是不是在CONNECT_DATA

给出的SERVICE_NAME

ORA-12154:TNS:无法解析指定的连接标识符。

所有这些数据库都使用连接字符串(从另一个SQL Server数据库中检索),正如我之前所述,手动操作时连接和运行得很好。我一直在网络上寻找可能适用于这种情况的提示,并没有提出明确的答案。

有没有人阅读此消息谁可能知道这个问题的答案?任何建议是最受欢迎的。

+0

您使用什么方法连接Oracle数据库? OLE DB? ADO.NET? ODBC? – Yahia 2011-12-27 20:53:50

+0

对不起,我们正在使用OLE DB。 – 2011-12-27 20:58:26

+0

Task Scheduler提供了一个不是“完整桌面”的运行时环境,而OLE DB需要这样的环境。关于权限...使其工作使用ADO.NET,在这种情况下工作得很好... – Yahia 2011-12-27 21:22:11

回答

2

您的计划任务设置为执行哪个用户?您测试过的其中一个用户或另一个帐户?

无论如何,它听起来不像权限问题,尽可能不设置ORACLE_HOME环境变量。 (看起来您的程序可能试图通过无法找到的tnsnames.ora文件进行连接。)您可能需要先让计划任务启动一个设置环境的批处理文件,然后继续调用您的C#程序。

+0

如果你正在手动运行这..它让我想知道如果批处理过程,如果它从一个批处理运行可能有命令行参数搞砸了,或者环境变量没有通过执行批处理文件过程来正确设置或存储。手动运行你会认为会产生相同的结果..检查出所有与该计划任务相关的文件依赖关系。如果它指向存储的批处理文件中错误的数据库或服务器,该怎么办?也许它是指向测试服务器或不存在的连接字符串......只是问答 – MethodMan 2011-12-27 21:00:45

+0

这也是我的第一印象,但组合中没有TNSNAMES.ORA文件 - 全部通过连接字符串完成。这里有一个例子:DRIVER = {Oracle in Orahome}; DBQ = VPDEV1.WORLD; UID = web_app; PWD = web_app; – 2011-12-27 21:00:59

+0

@MikePreston连接字符串需要TNSNAMES.ORA或ONAMES服务器才能工作 - 否则无法解析'VPDEV1.WORLD'! – Yahia 2011-12-27 21:23:31

2

我有类似的问题,但与一些Java应用程序。同样的情况发生 - 手动任务执行没问题,但自动执行总是失败(同一个帐户!)。

检查您的管理员(或者您可以自己动手)并将您的C#应用​​程序设置为由管理员帐户执行(仅测试!)或查看是否有其他计划任务并询问他们以查看哪些窗口他们使用的帐户以及设置方式。我记得我们(I + admin)不得不稍微尝试一下,但最后他创建了一个新的特权帐户(其他现有帐户的副本)来执行计划任务。