/ / Le transazioni del database Oracle possono aiutare in questo scenario? - Oracle, transaction, oracle11g, database-concorrenza

Le transazioni del database Oracle possono aiutare in questo scenario? - Oracle, transaction, oracle11g, database-concorrenza

Sto lavorando con un database Oracle (11g versione 2). Immagina più connessioni che eseguono contemporaneamente le seguenti operazioni:

  1. Inizia la transazione
  2. Controlla se esiste un valore specifico in una tabella di valori univoci
  3. Se il valore non esiste, inserirlo
  4. 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 № 1

Aggiungere 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 ...