下面是我用于将数据从临时表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}

BatchSize : {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}

BatchSize : {2}, BulkCopyTimeout : {3}

Error message {4}", dataTable.TableName, destTableName, bulkCopy.BatchSize.ToString(), bulkCopy.BulkCopyTimeout.ToString(), ex.ToString());

bulkCopy.Close();

bulkCopy.Dispose();

}

}

但是它引发以下异常:

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

谁能解决这个问题?谢谢.

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐