Параллельные транзакционные вызовы, приводящие к дублированию ответов в веб-сервисе .net - PullRequest
0 голосов
/ 09 августа 2011

Привет всем, у меня есть вопрос о параллельных вызовах хранимых процедур из веб-службы .net, написанной в рамках 3.5.

Я создаю веб-сервис, который используется многими пользователями и должен возвращать контактную информацию из базы данных Oracle. Проблема заключается в том, что, когда более 1 пользователя щелкает одновременно, БД возвращает одну и ту же контактную информацию. Я написал запрос на обновление статуса в SP. У меня возникает эта проблема, только когда 2 или более запросов читают одну и ту же запись, прежде чем произойдет обновление статуса. Я использовал транзакцию и транзакцию, но это не решает проблему. Может кто-нибудь сказать мне, если я решаю проблему правильно, или я должен смотреть на какой-то другой путь. Любая помощь с благодарностью.

Ответы [ 2 ]

1 голос
/ 10 августа 2011

Похоже, ваш код хранимой процедуры - это то, что мы называем в торговле "хитрым".

Как правило, это должно быть

UPDATE table
SET status = 'READ'
WHERE ...
RETURNING col_1, col_2 INTO var1, var2;
RETURN;

Вероятно, выполняется SELECT, а затем ОБНОВЛЕНИЕ на основе идентификатора без проверки, был ли статус изменен другой транзакцией

0 голосов
/ 10 августа 2011

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

Я не гуру базы данных / оракула, поэтому я прошу прощения, если этот ответ несколько расплывчатый: есть ли способ заблокировать нужную таблицу в начале операции чтения и обновления - возможно, параметр транзакции оракула ? Если это так, это должно выполнить то, что вы ищете.

Обратите внимание, что вы, по сути, являетесь однопоточным доступом к этой таблице, что потенциально может повлиять на производительность, в зависимости от количества одновременно работающих пользователей и частоты обращения к таблице. Возможно, вы захотите рассмотреть альтернативные способы выполнения требования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...