gpt4 book ai didi

c# - Windows 2k8服务器和32-> 64位C#应用程序迁移后非常奇怪的Oracle ORA-03113错误

转载 作者:行者123 更新时间:2023-11-30 17:56:20 25 4
gpt4 key购买 nike

将C#.NET4应用程序从旧的32位Windows 2003 Server迁移到新的64位Windows 2008 Server之后,我遇到一个非常奇怪的错误。我花了整整一周的时间试图找出正在发生的事情,但我的想法已经用完了,所以请提出建议。

细节:
我有一个小型C#.NET 4.0应用程序,该应用程序从远程Oracle数据库服务器中提取了一些数据。该应用程序过去可以在旧的32位Windows 2003 Server上正常运行。上次我不得不将其移动到具有64位Windows 2008 R2 Server的新服务器上。从那时起,对Oracle数据库的一个查询(返回大约50万行)无法正常工作。启动后大约2分钟,它会引发类似于以下的异常:

ORA-03113:通信通道上的文件结束
进程ID:0
会话ID:288序列号:43544

我已经从Oracle网站下载了适用于64位系统的最新ODAC驱动程序:64位ODAC 11.2第5版(11.2.0.3.20)。我已经尝试过:安装程序和XCOPY版本。通过.bat文件安装和配置ODP.NET4。 TNS设置正确。

远程Oracle数据库位于另一个国家/地区。我不是管理员。它是Oracle9i EE,64位,v9.2.0.8.0。

我用于测试的C#应用​​程序如下所示:

using (OracleConnection conn = new OracleConnection("User Id=userId; Password=pass; Data Source=database;"))
{
conn.Open();
string sql = "SELECT * FROM table";
int i = 0;
using (OracleCommand cmd = new OracleCommand(sql, conn))
{
using (OracleDataReader reader = cmd.ExecuteReader())
{
while (reader.Read())
{
if (i++ % 100 == 0)
{
Console.WriteLine(i);
}
}
}

}
}


我使用了 Adapter.Fill(dataTable),但是对于测试数据读取器来说更好一些-它在发生某些事情时向我显示或多或少。

它使用ODP.NET目录(64位或32位)中的Oracle.DataAccess.dll。应用程序可以为任何CPU编译,但是我也尝试了x64和x86编译(使用适当的Oracle.DataAccess.dll库)。

我当时想可能会超时,所以我尝试了不同的连接字符串选项,包括:
验证连接= true
连接生存时间= 600;连接超时= 600;
池=假
报名=假;
我什至将CommandTimeout设置为600。

它没有任何帮助-应用程序根据服务器负载下载不同数量的行-从200k到300k,并引发ORA-03113异常。它大约需要120秒(但不完全正确,有时是130秒,有时更多,但大多数时候是120秒)。

奇怪的是,有时查询会完成OK,并且没有任何错误,下载了所有500k行。例如,今天大约30-40次尝试失败,而2次成功。
同样奇怪的是,具有相同版本的ODAC驱动程序(用于32位系统)的相同应用程序每次在旧的32位Windows 2003 Server上都能正常运行。

新的64位服务器带有Windows 2008 Server R2 Standard + SP1,所有实际更新,未安装防病毒软件。

我尝试了不同的配置:
-使用64位Oracle.DataAccess库安装64位Oracle驱动程序并将应用程序编译到任何CPU和x64上,
-使用32位Oracle.DataAccess库安装32位Oracle驱动程序并将应用程序编译到任何CPU和x86上,

他们都不工作。我注意到,有时我无法删除/重命名Oracle驱动程序目录,因为某些库被MSDTC(分布式事务处理协调器)服务阻止了。我试图禁用它,将配置更改为与旧配置相同,并增加了服务器管理工​​具中的某些参数(以及其他设置:Transacion Time Limit,从60s到0(无限制))。但是我还没有发现任何改善。

我也尝试过禁用防火墙。

连接断开(?)时,Windows事件日志中没有看到任何匹配的警报或错误。

由于我没有服务器管理经验,因此大多数情况下都使用默认值进行配置。它启用了3个角色:应用程序服务器,Web服务器(IIS)和文件服务。

我已经与Oracle数据库服务器管理员进行了交谈,他向我保证,没有任何限制(超时,资源)设置,并且Oracle服务器日志没有显示任何错误。

再一次-同一查询在32位Windows 2003 Server上运行,但在64位Windows 2008 Server上不运行。我还测试了,当我删除了Application Server和Web Server角色时,它甚至在服务器上也不起作用(因此,很明显)。

我还在家用64位Windows7笔记本电脑上测试了程序+ 64位驱动程序,它工作正常。

我认为Windows 2008 Server上可能有一些设置-可能是超时或资源设置,我可能会命中并杀死了连接/事务,但我不知道该如何检查或在哪里查看。因此,请您指出我可能有什么问题吗?

- 编辑:
我注意到的另一件事:当查询成功完成时(上次我在昨天晚上成功做到这一点-服务器负载和连接负载很低时),查看Oracle会话监视器后,只有一个连接在应用程序之后打开和关闭已经关了。但是,每次应用程序失败时,它都会留下5个打开的连接(使用null命令),这些连接在应用程序关闭后几分钟不会消失。所以我认为连接池的处理可能有问题...

最佳答案

最后,经过多次测试,在网络管理员的帮助下,我已经:
1.将服务器代理更改为其他,
2.禁用TCP / IPv6协议,
3.禁用防火墙。
仍然不确定哪一个是“有罪的”,但看起来似乎有所帮助-我想这可能是我的或代理服务器上的TCP / IPv6防火墙规则。

关于c# - Windows 2k8服务器和32-> 64位C#应用程序迁移后非常奇怪的Oracle ORA-03113错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14285187/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com