Ошибка ORA-00604 при пакетной вставке внутри TransactionScope

Я пытаюсь пакетно вставить 100 000+ элементов в базу данных Oracle, используя ADO.NET внутри TransactionScope. Как это:

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) транзакция успешно завершена. Однако для более высоких элементов (например, 100 КБ) я получаю ORA-00604: ошибка произошла на рекурсивном уровне SQL% s.

Если я удаляю TransactionScope полностью, я не получаю никакой ошибки с любым размером элемента, он просто работает.

Как я могу заставить TransactionScope работать с огромным количеством предметов?

1 ответ

Решение

Оказывается, это была проблема с тайм-аутом транзакции.

После того, как я увеличил время ожидания, я успешно вставил свой список:

using (TransactionScope transaction = 
         new TransactionScope(TransactionScopeOption.Required, 
                 new TimeSpan(0, 30, 0))) //30 minute timeout limit
Другие вопросы по тегам