ORA-01591: lock held by in-doubt distributed transaction
L'errore "ORA-01591: blocco trattenuto da transazione distribuita in dubbio", significa che nel database sono presenti alcune transazioni non committate.
C'è stato un tentativo di accesso a una risorsa bloccata da una transazione di commit a due fasi (two-phase commit trnsaction) morta che è in stato "prepared".È necessario eseguire il "rollback force" o il "commit force" per le transazioni non committate per risolvere questo problema.
Query per individuare le transazioni non committate o pending (in sospeso) con il seguente script che genera anche il comando di forza di rollback
SQL> select 'rollback force '''||local_tran_id||''';' from DBA_2PC_PENDING where state='prepared';
SQL> select 'commit force '''||local_tran_id||''';' from DBA_2PC_PENDING where state='prepared';
Che cos'è una in-doubt distributed transaction?
Le transazioni distribuite possono diventare in-doubt nei seguenti modi: una macchina server che esegue il software Oracle Database si arresta in modo anomalo. Una connessione di rete tra due o più database Oracle coinvolti nell'elaborazione distribuita viene disconnessa. Si verifica un errore software non gestito.
Che cosa è two-phase commit trnsaction?
Un commit a due fasi è un protocollo standardizzato che garantisce che un commit del database venga implementato nella situazione in cui un'operazione di commit deve essere suddivisa in due parti separate.