Pracujem s databázou Oracle (11g Release 2). Predstavte si niekoľko pripojení, ktoré súčasne vykonávajú tieto činnosti:
- Začať transakciu
- Skontrolujte, či v tabuľke jedinečných hodnôt existuje špecifická hodnota
- Ak hodnota neexistuje, vložte ju
- 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ď č. 1Pridajte 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í ...