OracleBulkCopy内存泄漏(OutOfMemoryexception)

下面是我用于将数据从临时表dataTable批量复制到Oracle数据库中的destTable的代码。 dataTable有大约200万条记录。

using (OracleBulkCopy bulkCopy = new OracleBulkCopy(VMSDATAConnectionString)) { try { foreach (OracleBulkCopyColumnMapping columnMapping in columnMappings) bulkCopy.ColumnMappings.Add(columnMapping); bulkCopy.DestinationTableName = destTableName; //bulkCopy.BatchSize = dataTable.Rows.Count; //bulkCopy.BulkCopyTimeout = 100; int defaultSize = 5000; int.TryParse(ConfigurationManager.AppSettings["OracleBulkCopyBatchSize"], out defaultSize); bulkCopy.BatchSize = defaultSize; int timeOut = 100; int.TryParse(ConfigurationManager.AppSettings["OracleBulkCopyTimeout"], out timeOut); bulkCopy.BulkCopyTimeout = timeOut; Console.WriteLine("Bulk insert from {0} to {1} started at: {2}\r\nBatchSize : {3}, BulkCopyTimeout : {4} ", dataTable.TableName, destTableName, DateTime.Now.ToString("HH:mm:ss"), bulkCopy.BatchSize.ToString(), bulkCopy.BulkCopyTimeout.ToString()); bulkCopy.WriteToServer(dataTable); Console.WriteLine("Bulk insert from {0} to {1} finished at: {2}", dataTable.TableName, destTableName, DateTime.Now.ToString("HH:mm:ss")); } catch (Exception ex) { Console.WriteLine("Error happened during bulk copy from {0} to {1}\r\nBatchSize : {2}, BulkCopyTimeout : {3}\r\n Error message {4}", dataTable.TableName, destTableName, bulkCopy.BatchSize.ToString(), bulkCopy.BulkCopyTimeout.ToString(), ex.ToString()); bulkCopy.Close(); bulkCopy.Dispose(); } } 

但它抛出以下exception: 在此处输入图像描述

运行此数据加载过程的服务器肯定有足够的内存,看起来数据库服务器(linux)没有足够的内存。 下面是数据库服务器内存屏幕截图: 在此处输入图像描述

有人可以帮忙解决这个问题吗? 谢谢。

找到根本原因,exe运行在32位,它有1.5G的内存限制。 需要更改目标平台并将Oracle.DataAccess.dll替换为64位版本。

还有一种替代解决方案:批量加载数据,因此不会超过1.5 G内存限制。

更新:

“使用ORACLEBULKCOPY进行内存泄漏”:oracle批量拷贝有一些导致内存泄漏的错误,当BatchSize小于数据表大小时会发生。 需要修改BatchSize或将ODAC更新为更高版本。

参考: https : //community.oracle.com/message/4593452#4593452