У нас есть приложение, которое обращается к двум базам данных Oracle, используя два соединения (которые остаются открытыми в приложении). Для определенной функциональности мы используем распределенные транзакции. У нас есть Enlist=false в строке подключения, и мы вручную подключаем подключение к транзакции. Проблема возникает в сценарии, когда мы очень часто обновляем одну и ту же запись в распределенной транзакции, в которой мы видим задержку, чтобы увидеть зафиксированные данные в предыдущем запуске.
ex.
using (OracleConnection connection1 = new OracleConnection())
{
using(OracleConnection connection2 = new OracleConnection())
{
connection1.ConnectionString = connection1String;
connection1.Open();
connection2.ConnectionString = connection2String;
connection2.Open();
//for 100 times, do an update
{
.. check the previously updated value
connection1.EnlistTransaction(currentTransaction);
connection2.EnlistTransaction(currentTransaction);
.. do an update using connection1
.. do some updates with connection2
}
}
}
как и в приведенном выше фрагменте кода, мы обновляем и проверяем ранее обновленное значение на следующей итерации. Проблемы возникают, когда мы часто запускаем это для одной записи, для которой мы не видим зафиксированное обновление в последней итерации в следующей итерации, даже если оно было зафиксировано в предыдущей итерации. Но когда это происходит, это обновление видно в других приложениях с очень очень небольшой задержкой, и даже в нашем коде оно видно, если мы отлаживаем и снова запускаем строку. Это почти как задержка фиксации, хотя предыдущая фиксация возвращалась из кода. У кого-нибудь есть идеи?