Малоинтересная деталь в .NET
Класс
OracleCommand при выполнении запроса
INSERT выделяет курсор в Oracle, который не освобождает при вызове
Dispose().
OracleCommand cmd = new OracleCommand("INSERT INTO ...", connection);
try
{
cmd.ExecuteNonQuery();
}
finally
{
cmd.Dispose();
}При многократном выполнении приведённого куска в цикле у Oracle быстро кончается пул курсоров, что приводит к ошибке
ExecuteNonQuery(). Выделенные курсоры можно подсмотреть с помощью запроса
select user_name, status, osuser, machine, a.sql_text from v$session b, v$open_cursor a where a.sid = b.sidВысвободить курсор(ы) помогает принудительная сборка мусора:
cmd = null;
System.GC.Collect();