给BatchSize和不为OracleBulkCopy提供BatchSize有什么区别

时间:2012-12-09 15:30:52

标签: c# sql oracle ado.net sqlbulkcopy

任何人都能表现出色吗?在BatchSize中使用OracleBulkCopy和不使用BatchSize之间的行为差​​异。目前我没有指定BatchSize。我的BatchSize可能会在100到200000之间变化。请建议最佳方法。

try
{
     var columnMapping =
         from table in orgTable.Columns.Cast<DataColumn>()
         select
             new OracleBulkCopyColumnMapping(table.ColumnName, table.ColumnName);
     using (var bulkcopy
         = new OracleBulkCopy(ConnectionString, OracleBulkCopyOptions.Default))
     {                    
         bulkcopy.DestinationTableName = GoldOrgTable;                                        
         foreach (var mapping in columnMapping)
             bulkcopy.ColumnMappings.Add(mapping);
         bulkcopy.BulkCopyTimeout = TimeOut.Value;
         bulkcopy.WriteToServer(orgTable);
         orgTable.Dispose();
     }
     return true;
}

1 个答案:

答案 0 :(得分:1)

最佳批量大小应设置在500~5000左右。

使用批量复制的专业人士是:

  • 增加插入db
  • 的性能(减少所需时间)
  • 动态插入(多行插入)

然而,它也有一些我们需要关注的缺点:

  • 当批量复制中有一行遇到错误时,更难以排除故障
  • 可能不知道插入或截断数据是否可能存在某些数据类型排序规则或转换问题(unicode和非unicode),即使批量复制过程成功完成,某些数据也可能无法正确插入(脏数据)

您可以在以下网站上找到进一步的讨论: http://docs.oracle.com/html/E10927_01/OracleBulkCopyClass.htm#CHDCDEIA 要么 Bulk Insert to Oracle using .NET