Pracuję nad aplikacją internetową połączoną z Oracle. Mamy stół w wyroczni z kolumną "aktywowaną". Tylko jeden wiersz może mieć tę kolumnę ustawioną na 1 w tym samym czasie. Aby to wymusić, w Javie używaliśmy poziomu izolacji SERIALIZED, jednak używamy błędu "nie można serializować transakcji" i nie możemy ustalić przyczyny.READ COMMITTED poziom izolacji bazy danych w Oracle
Zastanawialiśmy się, czy wykonanie zadania READ COMMITTED byłoby wystarczające. Więc moje pytanie brzmi:
Jeśli mamy transakcję, która obejmuje następujące SQL:
SELECT *
FROM MODEL;
UPDATE MODEL
SET ACTIVATED = 0;
UPDATE MODEL
SET ACTIVATED = 1
WHERE RISK_MODEL_ID = ?;
COMMIT;
Biorąc pod uwagę, że jest to możliwe dla więcej niż jednego z tych transakcji podlegających wykonaniu w tym samym czasie, to być możliwe dla więcej niż jednego wiersza MODELu, aby aktywowana flaga była ustawiona na 1?
Każda pomoc zostanie doceniona.
Podobny, ale ja LOCK wzór w wyłącznych MODE i zrobić aktualizację MODEL SET aktywne = 0 gdzie aktywowane = 1 Mniej wiersze są aktualizowane, więc jest to nieco bardziej wydajnych, a tabela LOCK uniemożliwia aktywność współbieżne na stole. –