Esecuzione del rollback delle transazioni
Il rollback di una transazione ne annulla le modifiche. È possibile eseguire il rollback dell'intera transazione corrente oppure eseguirne il rollback solo a un savepoint specificato.
Per eseguire il ROLLBACK della transazione corrente solo a un SAVEPOINT specificato è necessario utilizzare l'istruzione ROLLBACK con la clausola TO SAVEPOINT.
Per eseguire il ROLLBACK dell'intera transazione corrente, utilizzare l'istruzione ROLLBACK senza la clausola TO SAVEPOINT oppure (nell'ambiente SQL Developer) l'icona ROLLBACK delle modifiche.
Il rollback dell'intera transazione corrente comporta le operazioni riportate di seguito.
-
termina la transazione;
-
ne annulla tutte le modifiche;
-
ne cancella tutti i savepoint;
-
rilascia gli eventuali lock della transazione.
Il rollback della transazione corrente solo al savepoint specificato effettua le operazioni riportate di seguito.
-
non termina la transazione;
-
annulla solo le modifiche apportate dopo il savepoint specificato;
-
cancella solo i savepoint impostati dopo quello specificato (escludendo quest'ultimo);
-
rilascia tutti i lock di tabella e di riga acquisiti dopo il savepoint specificato.
Le altre transazioni che hanno richiesto l'accesso alle righe bloccate dopo il savepoint specificato devono continuare ad attendere finché non viene eseguito il commit o il rollback della transazione. Le altre transazioni che non hanno richiesto le righe possono richiederle e accedervi immediatamente.
Per vedere l'effetto di un rollback in SQL Developer potrebbe essere necessario fare clic sull'icona Aggiorna.
Come risultato dell'Esempio 3-7, la tabella REGIONS contiene un'area denominata 'Medio Oriente e Africa' e un'area denominata 'Africa'. L'Esempio 3-8 corregge questo problema (una transazione molto semplice) e verifica la modifica, ma quindi esegue il rollback della transazione e verifica il rollback.
Esempio 3-8 Rollback di un'intera transazione
Prima della transazione:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Risultato:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
5 Africa
5 rows selected.
Transazione (modifica della tabella):
UPDATE REGIONS
SET REGION_NAME = 'Middle East'
WHERE REGION_NAME = 'Middle East and Africa';
Risultato:
1 row updated.
Verifica della modifica:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Risultato:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East
5 Africa
5 rows selected.
Esecuzione del rollback della transazione:
ROLLBACK;
Risultato:
Rollback complete.
Verifica del rollback:
SELECT * FROM REGIONS
ORDER BY REGION_ID;
Risultato:
REGION_ID REGION_NAME
---------- -------------------------
1 Europe
2 Americas
3 Asia
4 Middle East and Africa
5 Africa
5 rows selected.
Vedere anche: Oracle Database SQL Language Reference per informazioni sull'istruzione ROLLBACK