venerdì 29 maggio 2015

Transazioni - Transaction processing

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 :
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: