Normal Transaction Processing
Forward processing
Le normali attività svolte da una applicazione, mentre sta accedendo e
cambiando
il database, sono chiamate forward
processing. In genere queste attività comprendono inizio e commit di
transazione, ricerca e recupero dati, modifica dati esistenti, aggiunta di nuovi e cancellazione di vecchi
dati.
Ogni cambiamento logico è eseguito apportando modifiche a uno o più blocchi del database. La modifica a un singolo blocco provoca un cambiamento fisico ed esegue un'operazione come la seguente :
Ogni cambiamento logico è eseguito apportando modifiche a uno o più blocchi del database. La modifica a un singolo blocco provoca un cambiamento fisico ed esegue un'operazione come la seguente :
nel blocco 409.824 sostituire i primi 8 byte con "!@#$%^&*"
Durante l'elaborazione roll forward i record di log vengono generati per
registrare ogni cambiamento fisico del database. La tipica sequenza di eventi è la seguente:
1. Il blocco del db che contiene i dati da modificare si trova nel database
buffer pool o viene letto da disco se non è già presente.
2. Il buffer pool è locked in modalità di update (exclusive lock) per
evitare un altro processo di accesso o modifica a tale blocco, fino al
completamento della modifica.
3. Un undo-redo log record, che descrive la modifica da effettuare, è
creato in memoria.
4. Il record di log è memorizzato nel successivo spazio disponibile del buffer
di registro corrente. Se lo spazio non è disponibile, il buffer è accodato
per la scrittura dal BI writer e un log buffer libero diviene il buffer
corrente. Se non ci sono buffer log liberi, il buffer più vecchio viene
scritto su disco.
5. La modifica viene apportata al blocco del database, utilizzando solo i
dati nel record di log ed i dati nel blocco.
6. Il lock sul buffer è rilasciato.
Quando un'operazione logica colpisce più di un blocco, i passaggi sopra
descritti sono
eseguiti su ogni blocco. Un record di log undo-redo viene generato per
ogni
blocco.
Rollback delle transazioni
Quando un'applicazione decide di annullare una transazione piuttosto che committarla,
viene avviata una rollback transaction. Ciò si verifica quando
l'applicazione esegue un'istruzione UNDO attraverso il codice 4GL, un utente
interattivo preme il tasto "stop" sulla tastiera, un evento di lock
wait è cancellato da un utente interattivo, o quando si verifica un lock wait
time out. Il trattamento richiesto per effettuare un rollback è gestito
automaticamente senza la necessità di alcun intervento applicativo.
Per eseguire il rollback di una transazione attiva, il database manager legge,
in ordine inverso, tutto i records di log generati dalla transazione, fino al
punto in cui è iniziata. Gli effetti di ogni variazione sono invertiti e i valori originali dei dati sono ripristinati. Mentre vengono annullate tutte
le modifiche, il database è in stato di modifica, nuovamente. Queste nuove
modifiche vengono registrate anche loro. Ciò genera un log record durante
l'operazione di rollback proprio come durante un processo di normale modifica del
database.
La sequenza di eventi scatenati da un processo di rollback è la stessa descritta in precedenza per l'elaborazione in avanti (forward). I
record log identifica quali blocchi devono essere modificati e contiene anche
tutti i dati necessari per eseguire l'operazione di annullamento.
Le transazioni possono essere ripristinate (rollback) in modo esplicito su
richiesta dell’applicazione o dell'utente, o automaticamente dal database manager
quando si verifica un errore e l'applicazione non è più in grado di comunicare
con il database.
0 commenti:
Posta un commento