IIS 站点未连接到 Oracle 数据库

IIS site not connecting to Oracle database

我有一台带 IIS 的服务器,用于托管网站。 其中一些网站 (Silverlight) 必须连接到 Oracle 数据库才能通过 OleDb 执行查询,但它们不能。

以下是我测试的结果:

我浏览了无数关于此类错误的信息,但找不到任何可行的解决方案。 这是我测试过的:

  • 向相关用户授予 "create global objects" 权利(完全没有变化)
  • 正在陆续安装多个Oracle客户端。最好的结果是使用 10.2 客户端 64b(我的测试程序可以在具有管理员权限的情况下连接)。安装是干净的(没有多个 Oracle 文件夹,也没有同时存在多个 Oracle 环境变量)
  • 禁用有关管理员提升的警告(即在提升过程中不弹出确认消息):完全没有变化

  • 正在检查 RAM 使用情况(脚下有足够的内存)

附加信息:

  • 连接字符串是

Provider=msdaora;Data Source=HOSTNAME;User Id=USER;Password=PASSWORD

  • 与 OleDb 和 Oracle.ManagedDataAccess.Client 使用相同的连接字符串。

  • tsnames.ora 文件存在(并且有效,显示我对管理员测试程序的成功尝试)

  • 它在较旧的 Web 服务器上工作,但差异太大,我找不到任何有意义的差异(不同 Windows、32/64b、不同的 IIS 版本、不同的 Oracle 客户端)

有什么想法吗?

有几点:

  • Microsoft msdaora OLE DB 提供程序已经 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 托管驱动程序中的搜索模式不同。验证以下项目:

    • OLE DB 读取注册表中的 TNS_ADMIN 值,ODP.NET 托管驱动程序不会。
    • ODP.NET 托管驱动程序使用您的 .NET 配置文件(即 web.configmachine.config)来确定 tnsnames.ora 文件的位置,OLE DB 不会。
    • 根据 documentation ODP.NET Managed Driver 确实考虑了 TNS_ADMIN 环境变量和文件夹 %ORACLE_HOME%\network\admin。但是,根据我的测试,它仍然可以。
  • 关于连接失败取决于"Rus as Administrator"检查您的 Oracle 安装文件夹的权限。