Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Warunki wyścigu między wyborem a aktualizacją

Zakładam, że Twoja UPDATE sama instrukcja weryfikuje lastmodified wartość, którą odczytałeś w swoim SELECT oświadczenie, jak sugeruje dziewięciostronny.

Jeśli lastmodified to DATE , istnieje potencjalna sytuacja wyścigu, jeśli istnieje wiele aktualizacji tego samego wiersza w tej samej sekundzie od DATE ma szczegółowość tylko do drugiego. Jeśli lastmodified to TIMESTAMP , z drugiej strony okno, w którym może wystąpić sytuacja wyścigu, jest znacznie bardziej ograniczone, ponieważ TIMESTAMP będzie miał od 3 do 9 cyfr z dokładnością do sekundy (3 na większości maszyn z systemem Windows, 6 na większości maszyn z systemem Unix). Jest mało prawdopodobne, choć nie niemożliwe, że będziesz mieć dwie aktualizacje w tej samej milisekundzie lub nawet tej samej mikrosekundzie. Ale to nie jest nieomylne.

Możesz użyć wartości generowanej przez sekwencję zamiast daty ostatniej modyfikacji. To może zagwarantować, że nie stracisz aktualizacji, ponieważ sekwencja NOCYCLE nie zwróci dwukrotnie tej samej wartości. Ale jeśli pójdziesz tą ścieżką, albo stracisz korzyści informacyjne wynikające z posiadania daty ostatniej aktualizacji w każdym wierszu, albo przechowujesz kilka dodatkowych bajtów danych w każdym wierszu tabeli. Każdy z tych kompromisów może być tego wart w zależności od aplikacji lub może stworzyć więcej problemów niż rozwiązuje.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. @Temporal(TemporalType.DATE) z Oracle 12

  2. Usuń liczby znalezione w kolumnie ciągu

  3. W ramach procedury PL/SQL umieść zapytanie lub refcursor w tabeli HTML

  4. Jak uzyskać szerokość i długość z sdo_geometry w Oracle?

  5. Co to są złącza Oracle (złącza SQL)?