/ / Môžu databázové transakcie Oracle v tomto scenári pomôcť? - Oracle, transakcie, oracle11g, databáza-súbežnosť

Môžu databázové transakcie Oracle v tomto scenári pomôcť? - Oracle, transakcie, oracle11g, databáza-súbežnosť

Pracujem s databázou Oracle (11g Release 2). Predstavte si niekoľko pripojení, ktoré súčasne vykonávajú tieto činnosti:

  1. Začať transakciu
  2. Skontrolujte, či v tabuľke jedinečných hodnôt existuje špecifická hodnota
  3. Ak hodnota neexistuje, vložte ju
  4. Zaviazať transakciu

Zdá sa mi, že jediný spôsob, ako predchádzať konfliktom, je zablokovať spojenia z vykonávania vyššie uvedenej 4-krokovej sekvencie, zatiaľ čo akékoľvek iné spojenie momentálne vykonáva štvorstupňovú sekvenciu.

Môžu transakcie dosiahnuť tento typ rozsiahleho zablokovania / blokovania v Oracle?

Ďakujeme vopred za vaše odpovede a rady, ako najlepšie vyriešiť tento scenár.

odpovede:

1 pre odpoveď č. 1

Pridajte jedinečné obmedzenie kontroly a implementujte obslužný program výnimiek, aby ste získali ďalšiu sekvenciu a skús to znova.

Toto je za predpokladu, že používate pl / sql.

Alternatívou by bolo používanie sekvencie Oracle s veľkosťou vyrovnávacej pamäte 1. To tiež zabezpečí žiadne medzery v sekvencii 2. SELECT * FROM table_name FOR UPDATE zablokuje všetky čítania z iných relácií ...