ORA-01555 Snapshot troppo vecchia

ORA-1555 è un errore causato da Oracle per un meccanismo di lettura inconsistente.
Quando viene eseguita una query tutti i dati devono riferirsi allo stesso istante, dalla prima all’ultima riga, per tutta la durata del processo e per quante siano le modifiche in corso (sulle tabelle interessate) da parte di altre transazioni.
Quando questa consistenza di lettura non è possibile, appare questo errore.
Per risolvere l’errore “ORA-1555” è necessario settare il parametro undo_retention.
Le informazioni di UNDO sono memorizzate nei segmenti di Rollback fino al commit (o al rollback), dopodiché questi segmenti tornano disponibili per essere sovrascritti. La gestione automatica dell’UNDO consente di specificare quanto a lungo le informazioni devono essere conservate prima del commit; cambiare il parametro UNDO_RETENTION può evitare l’errore di “snapshot too old”
UNDO_RETENTION specifica (in secondi) il valore di soglia inferiore della undo retention.
Il parametro UNDO_RETENTION può essere modificato solo se il tablespace di undo corrente ha abbastanza spazio. Se una transazione attiva richiede spazio di undo e tale spazio non è disponibile, allora il sistema inizia ad usare spazio di undo non scaduto. Questa operazione può causare il fallimento delle query con un messaggio di “snapshot troppo vecchio”.
Il seguente esempio mostra quanto spiegato sulla UNDO_RETENTION:
SQL> alter system set UNDO_RETENTION=9000 scope=both;
System altered.
SQL> show parameter undo
NAME TYPE VALUE
———————————— ———– ——————————

_in_memory_undo boolean FALSE
_undo_autotune boolean FALSE
undo_management string AUTO
undo_retention integer 9000
undo_tablespace string UNDOTBS1

Potrebbero interessarti anche...