Задержка/отставание между фиксацией и выбором с распределенными транзакциями, когда два соединения зачисляются в транзакцию в Oracle с ODAC.

У нас есть приложение, которое обращается к двум базам данных 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
   }
  }
 }

как и в приведенном выше фрагменте кода, мы обновляем и проверяем ранее обновленное значение на следующей итерации. Проблемы возникают, когда мы часто запускаем это для одной записи, для которой мы не видим зафиксированное обновление в последней итерации в следующей итерации, даже если оно было зафиксировано в предыдущей итерации. Но когда это происходит, это обновление видно в других приложениях с очень очень небольшой задержкой, и даже в нашем коде оно видно, если мы отлаживаем и снова запускаем строку. Это почти как задержка фиксации, хотя предыдущая фиксация возвращалась из кода. У кого-нибудь есть идеи?


person Chathuranga Wijeratna    schedule 30.11.2010    source источник
comment
Это наблюдалось в Oracle 11g с ODAC (компонент доступа к данным Oracle для .Net).   -  person Chathuranga Wijeratna    schedule 02.12.2010


Ответы (1)


Оказалось, что я никак не могу контролировать это поведение через ODAC. Таким образом, единственным жизнеспособным решением было реализовать поведение повторных попыток в нашем коде, так как это происходит очень редко, а когда это происходит, задержите 10 секунд и повторите то же самое.

Дополнительные сведения о том, что я нашел на этом можно найти здесь.

person Chathuranga Wijeratna    schedule 18.12.2010