在 TransactionScope 中批量插入时出现 ORA-00604 错误
ORA-00604 error while batch insertion inside TransactionScope
我正在尝试使用 TransactionScope 中的 ADO.NET 将 100k+ 项批量插入到我的 Oracle 数据库中。像这样:
using (TransactionScope transaction = new TransactionScope())
{
while(/* Pagination logic - send insertion command on every 250 items */)
{
using (OracleCommand command = new OracleCommand(query, connection))
{
command.ArrayBindCount = 250;
//Add parameters
command.Parameters.Add(":BLAH", OracleDbType.Long);
command.Parameters[0].Value = LUC.ToArray();
command.ExecuteNonQuery(); //Error occurs here after N-times inside while
}
}
transaction.Complete();
}
对于低于此 (10k-30k) 的商品,交易已成功完成。
但是,对于更高的项目(如 100k),我得到 ORA-00604: error occurred at recursive SQL level %s.
如果我完全删除 TransactionScope,我不会收到任何项目大小的错误,它就可以正常工作。
如何使 TransactionScope 处理大量项目?
原来是事务超时问题。
增加超时后,我成功插入了我的列表:
using (TransactionScope transaction =
new TransactionScope(TransactionScopeOption.Required,
new TimeSpan(0, 30, 0))) //30 minute timeout limit
我正在尝试使用 TransactionScope 中的 ADO.NET 将 100k+ 项批量插入到我的 Oracle 数据库中。像这样:
using (TransactionScope transaction = new TransactionScope())
{
while(/* Pagination logic - send insertion command on every 250 items */)
{
using (OracleCommand command = new OracleCommand(query, connection))
{
command.ArrayBindCount = 250;
//Add parameters
command.Parameters.Add(":BLAH", OracleDbType.Long);
command.Parameters[0].Value = LUC.ToArray();
command.ExecuteNonQuery(); //Error occurs here after N-times inside while
}
}
transaction.Complete();
}
对于低于此 (10k-30k) 的商品,交易已成功完成。 但是,对于更高的项目(如 100k),我得到 ORA-00604: error occurred at recursive SQL level %s.
如果我完全删除 TransactionScope,我不会收到任何项目大小的错误,它就可以正常工作。
如何使 TransactionScope 处理大量项目?
原来是事务超时问题。
增加超时后,我成功插入了我的列表:
using (TransactionScope transaction =
new TransactionScope(TransactionScopeOption.Required,
new TimeSpan(0, 30, 0))) //30 minute timeout limit