Sto lavorando con un database Oracle (11g versione 2). Immagina più connessioni che eseguono contemporaneamente le seguenti operazioni:
- Inizia la transazione
- Controlla se esiste un valore specifico in una tabella di valori univoci
- Se il valore non esiste, inserirlo
- Commettere la transazione
Mi sembra che l'unico modo per prevenire i conflitti consiste nel bloccare le connessioni dall'eseguire la sequenza in 4 fasi di cui sopra mentre qualsiasi altra connessione sta attualmente eseguendo la sequenza in 4 fasi.
Le transazioni possono raggiungere questo tipo di blocco / blocco in Oracle?
Grazie in anticipo per le vostre risposte e consigli su come affrontare al meglio questo scenario.
risposte:
1 per risposta № 1Aggiungere un vincolo di controllo univoco e implementare un gestore di eccezioni per ottenere la sequenza successiva e riprovare.
Questo presuppone che tu stia usando pl / sql.
Un'alternativa potrebbe essere l'utilizzo di una sequenza Oracle, con dimensione cache 1. Ciò garantirà anche che non vi siano interruzioni nella sequenza 2. SELEZIONARE * FROM table_name FOR UPDATE per bloccare tutte le letture da altre sessioni ...