IIS 站点未连接到 Oracle 数据库
IIS site not connecting to Oracle database
我有一台带 IIS 的服务器,用于托管网站。
其中一些网站 (Silverlight) 必须连接到 Oracle 数据库才能通过 OleDb 执行查询,但它们不能。
以下是我测试的结果:
'msdaora' 提供程序未在本地计算机上注册 当我 运行 在网站
ORA-01019: 无法在用户端分配内存(当我尝试连接一个没有管理员身份的测试控制台程序时)
连接正常(具有管理员身份的相同测试控制台程序)
ORA-12154: TNS:could 在尝试切换到另一种连接方法(从 OleDb 到 Oracle.ManagedDataAccess.Client)
我浏览了无数关于此类错误的信息,但找不到任何可行的解决方案。
这是我测试过的:
- 向相关用户授予 "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.config
、machine.config
)来确定 tnsnames.ora
文件的位置,OLE DB 不会。
- 根据 documentation ODP.NET Managed Driver 确实考虑了
TNS_ADMIN
环境变量和文件夹 %ORACLE_HOME%\network\admin
。但是,根据我的测试,它仍然可以。
关于连接失败取决于"Rus as Administrator"检查您的 Oracle 安装文件夹的权限。
我有一台带 IIS 的服务器,用于托管网站。 其中一些网站 (Silverlight) 必须连接到 Oracle 数据库才能通过 OleDb 执行查询,但它们不能。
以下是我测试的结果:
'msdaora' 提供程序未在本地计算机上注册 当我 运行 在网站
ORA-01019: 无法在用户端分配内存(当我尝试连接一个没有管理员身份的测试控制台程序时)
连接正常(具有管理员身份的相同测试控制台程序)
ORA-12154: TNS:could 在尝试切换到另一种连接方法(从 OleDb 到 Oracle.ManagedDataAccess.Client)
我浏览了无数关于此类错误的信息,但找不到任何可行的解决方案。 这是我测试过的:
- 向相关用户授予 "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 ProviderOraOLEDB.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.config
、machine.config
)来确定tnsnames.ora
文件的位置,OLE DB 不会。 - 根据 documentation ODP.NET Managed Driver 确实考虑了
TNS_ADMIN
环境变量和文件夹%ORACLE_HOME%\network\admin
。但是,根据我的测试,它仍然可以。
- OLE DB 读取注册表中的
关于连接失败取决于"Rus as Administrator"检查您的 Oracle 安装文件夹的权限。