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

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

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

1 Ответ

1 голос
/ 18 декабря 2010

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

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

...