我有一台带有IIS的服务器来托管网站。 其中一些网站(Silverlight)必须连接到Oracle数据库才能通过OleDb执行查询,但它们不能。
以下是我测试的结果:
' MSDAORA'我在网站上运行
ORA-01019:无法在用户端分配内存(当我尝试连接没有管理员状态的测试控制台程序时)
连接确定(使用具有管理员身份的相同测试控制台程序)
ORA-12154:TNS:尝试切换到另一种连接方法时无法解析指定的连接标识符(从OleDb到Oracle.ManagedDataAccess.Client)
< / LI>我经历了无数关于这类错误的信息,但我找不到任何可行的解决方案。 这是我测试的:
禁用有关管理员提升的警告(即在提升期间没有确认弹出):完全没有变化
检查内存使用情况(脚下有足够的内存)
其他信息:
Provider=msdaora;Data Source=HOSTNAME;User Id=USER;Password=PASSWORD
与OleDb和Oracle.ManagedDataAccess.Client一起使用的相同连接字符串。
tsnames.ora文件存在(并且可以使用管理员测试程序显示我的成功尝试)
它正在使用较旧的Web服务器,但是找到任何有意义的服务器(不同的Windows,32 / 64b,不同的IIS版本,不同的Oracle客户端)存在太多差异
有什么想法吗?
答案 0 :(得分:1)
有几点:
OLE DB的Microsoft msdaora
提供程序已为deprecated多年。您应该更喜欢Oracle Provider OraOLEDB.Oracle
。
Oracle客户端和 OLE DB提供程序和 IIS应用程序必须具有相同的体系结构,即所有必须是32位或64位,您不能混用他们。 (古代msdaora
不适用于64位)。但是,ODP.NET托管驱动程序(Oracle.ManagedDataAccess
)适用于32位和64位。
使用ODP.NET托管驱动程序时,ConnectionString中不需要Provider=MSDAORA
。我认为这些属性被忽略了,或者你只是错过了提及它。
Oracle客户端和OLE DB提供程序的版本必须匹配(即使是次要版本)。由于COM限制,您无法为32位和64位安装多个OLE DB提供程序。
OLE DB中tnsnames.ora
文件的搜索模式与ODP.NET托管驱动程序中的搜索模式不同。验证以下项目:
TNS_ADMIN
值,而ODP.NET托管驱动程序则不会。web.config
,machine.config
)来确定tnsnames.ora
文件的位置,而OLE DB则不会。TNS_ADMIN
环境变量和文件夹%ORACLE_HOME%\network\admin
。但是,根据我的测试,它无论如何都会。 关于连接失败取决于“Rus as Administrator”检查Oracle安装文件夹的权限。