150 likes | 276 Views
Transazioni. TIPI DI TRANSAZIONI DML – Data Manipulation Language un numero di DML statement che Oracle Server tratta come una singola entità DDL – Data Definition Language una singola operazione DDL (create, alter,drop, truncate)
E N D
TIPI DI TRANSAZIONI • DML – Data Manipulation Language • un numero di DML statement che Oracle • Server tratta come una singola entità • DDL – Data Definition Language • una singola operazione DDL • (create, alter,drop, truncate) • DCL – Data Control Language • una singola operazione DCL • (grant, revoke)
TRANSAZIONI • una transazione inizia quando il primo statement DML SQL viene eseguito • una transazione finisce con uno dei seguenti eventi: • COMMIT o ROLLBACK statement • uno statement DDL o DCL viene eseguito (commit automatico) • l’utente esce da iSQL*Plus • la macchina vai in crash
VANTAGGI DI COMMIT E ROLLBACK • assicurano la consistenza • permettono di vedere le modifiche apportate prima di renderle permanenti
CONTROLLO DI UNA TRANSAZIONE Time COMMIT Transaction Savepoint A Savepoint B DELETE INSERT UPDATE ROLLBACK al SAVEPOINT B ROLLBACK al SAVEPOINT A INSERT ROLLBACK
ROLLBACK TO SAVEPOINT • il comando SAVEPOINT crea una “marca” nella transazione corrente in modo da dividerla in piccole sezioni • ROLLBACK TO SAVEPOINT permette di effettuare un rollback fino al punto stabilito dal savepoint • UPDATE … • SAVEPOINT update done; • Savepoint created. • INSERT… • ROLLBACK TO update done; • Rollback complete. • Creando un savepoint con lo stesso nome di uno creato precedentemente, • il primo savepoint viene cancellato
TRANSAZIONE IMPLICITA • Avviene una transazione implicita, cioè commit automatico: • quando viene eseguito uno statement DDL • quando viene eseguito uno statement DCL • uscendo in modo normale (non anomalo) da SQL*Plus senza • specificare COMMIT o ROLLBACK • Si verifica un ROLLBACK automatico uscendo in modo anormale da • SQL*Plus o quando la transazione viene interrotta per un errore di • sistema
TRANSAZIONE IMPLICITA NOTA 1 : È possibile con SQL*Plus mettere il comando AUTOCOMMIT a ON. Questo significa che ogni statement DML verrà automaticamente committato dopo l‘esecuzione. NOTA2 : uscire in modo normale da SQL*Plus significa utilizzare il comando EXIT nel prompt. Chiudere la finestra senza uscire viene interpretato come chiudura anormale.
STATO DEI DATI PRIMA • DI COMMIT O ROLLBACK • si può tornare allo stato precedente dei dati, ogni operazione • DML non committata è solo temporanea infatti viene prima • effettuata nel database buffer in modo da poter ripristinare • l’utente che ha effettuato le operazioni DML può vedere il • risultato con la SELECT • gli altri utenti non possono vedere il risultato fino a dopo il • commit • le righe toccate dalle operazioni DML sono • LOCCATE, gli altri utenti non possono modificare queste righe
STATO DEI DATI DOPO IL COMMIT • le modifiche fatte ai dati diventano permanenti nel database • lo stato precedente alle modifiche viene definitivamente • perso • tutti gli utenti possono vedere il risultato • il LOCK sulle righe modificate viene rilasciato; le righe • possono essere modificate da altri utenti • tutti i SAVEPOINT vengono cancellati
STATO DEI DATI DOPO IL ROLLBACK • le modifiche fatte vengono ripristinate • viene riportato il database allo stato precedente le modifiche • il LOCK sulle righe modificate viene rilasciato; le righe • possono essere modificate da altri utenti
ROLLBACK A LIVELLO DI STATEMENT • se un singolo statement DML di una transazione fallisce • durante l’esecuzione, verrà fatto il rollback solo di quello • statement • non viene fatto il rollback sulle modifiche fatte dai precedenti • statement • in caso si operazioni DDL, se uno statement non va a buon • fine non è possibile fare rollback delle precedenti operazioni • inquanto per ogni statement avviene un commit automatico
READ CONSISTENCY • è possibile accedere al database in due modi : • - lettura (SELECT statement) • - scrittura (INSERT, UPDATE, DELETE statement) • viene garantita, sia in lettura che in scrittura, la consistenza • dei dati • le modifiche fatte da un utente non vanno in conflitto con le • modifiche fatte da un altro utente • in lettura non si vedono le modifiche ancora in elaborazione • (non committate) • Lo scopo è di assicurare che ogni utente veda i dati allo stato dell’ultimo commit.
IMPLEMENTAZIONE READ CONSISTENCY Read consistency è un’implementazione automatica Quando un’operazione DML viene fatta sul database, Oracle Server mette una copia dei dati non ancora modificati sull’UNDO SEGMENT Prima che venga effettuato il commit, tutti gli utenti che entrano in lettura, ad eccezione dell’utente che ha effettuato le modifiche, vedrà uno snapshot dei dati nell’UNDO SEGMENT Questo garantisce a chi entra in lettura la consistenza dei dati Al momento del commit, i dati diventano visibili a tutti gli utenti e lo spazio occupato dai vecchi dati nell’undo segment viene liberato ed eventualmente riutilizzato Se si fa un rollback della transazione, la vecchia versione dell’undo segment viene riscritta nelle tabelle e il database tornerà, anche per l’utente che ha effettuato le modifiche, nello stato precedente la transazione