Corso di Basi di Dati Il Linguaggio SQL

Slides:



Advertisements
Presentazioni simili
Architettura MySQL E Motori MySQL L. Vigliano.
Advertisements

Sicurezza e concorrenza nelle basi di dati
Stored Procedure Function Trigger
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità C1 Il linguaggio SQL.
Structured Query Language (SQL) Presentazione 13.1 Informatica Generale (Prof. Luca A. Ludovico)
Linguaggi di programmazione
1 Basi di dati attive. 2 Sommario Preliminari Approcci architetturali Linguaggi per la specifica di regole – Eventi – Condizioni – Azioni – Ulteriori.
Algoritmi e Programmazione
Connessione con MySQL.
Asserzioni, Viste & Triggers
Basi di dati attive Dispongono di un sottosistema integrato per definire e gestire regole di produzione (regole attive) Regole di tipo: Evento-Condizione-Azione.
1 SQL come linguaggio di definizione di dati Eugenio Di Sciascio.
G. Mecca – – Università della Basilicata Basi di Dati Tecnologia di un DBMS: Concorrenza e Affidabilità Concetti Avanzati versione 2.0.
Basi di Dati prof. A. Longheu
SQL Structured Query Language
La Modifica dei Dati in una Base Dati La modifica dei dati contenuti allinterno di una base dati è unoperazione delicata Infatti, ogni potenziale problema.
Elementi di PL/SQL.
Informatica di base A.A. 2003/2004 Algoritmi e programmi
SQL per la modifica di basi di dati. 29/01/2014SQL per la modifica di basi di dati2 Data Manipulation Language Introduciamo ora il Data Manipulation Language.
Basi di Dati II Sara Romano
Introduzione alla programmazione lll
Tecnologie di un database server: la gestione della concorrenza
Basi di dati attive Paolo Atzeni.
SQL: Lezione 7 Nataliya Rassadko
Aspetti sistemistici dellSQL. SQL environment Un SQL environment è un framework dove esistono dati e possono aversi istruzioni SQL eseguite su questi.
SQL Per la modifica di basi di dati
SQL Per la definizione di basi di dati SQL per definire ed amministrare Ogni utente puo definire una base di dati di cui diventa lamministratore potendo.
Le transazioni Itis Max Planck.
Modello Relazionale Definisce tipi attraverso il costruttore relazione, che organizza i dati secondo record a struttura fissa, rappresentabili attraverso.
Vincoli di integrità generici Con i costrutti visti sinora, non è sempre possibile definire tutti i possibili vincoli di integrità. Per questo esiste listruzione.
Manipolazione dei dati I comandi SQL che permettono di modificare il contenuto di una base di dati sono insertdeleteupdate insert ha la seguente sintassi:
Transazioni.
Viste. Cosè una vista? è possibile creare un subset logico di dati o una combinazione di dati una vista è una tabella logica basata su una tabella o su.
Creazione e manipolazione tabelle. TABELLE una tabella può essere creata in qualsiasi momento,anche quando gli utenti stanno usando il database la struttura.
Basi di dati Claudia Raibulet
Concorrenza e Sincronizzazione di Thread e Processi
Corso di INFORMATICA anno scolastico 2009/10 Linguaggio SQL IDENTIFICATORI di tabelle e attributi: stringhe di lunghezza max 18 caratteri, composte da.
Cos’è una transazione? Una transazione è un’unità logica di elaborazione richiesta da un’applicazione che dà luogo a una serie di operazioni fisiche elementari.
Basi di Dati e Sistemi Informativi
Corso di Basi di Dati Il Linguaggio SQL Home page del corso:
Sistemi Informativi sul Web
Basi di Dati e Sistemi Informativi
Basi di Dati e Sistemi Informativi
Basi di Dati e Sistemi Informativi
Basi di Dati e Sistemi Informativi Il Linguaggio SQL Home page del corso:
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre Utenti e privilegi del database - 1 Root è lutente amministratore predefinito, ma.
Dati e DBMS DBMS relazionali SQL Progettazione di una base di dati Programma del Corso.
SQL (IV) Data Definition Language/ Data Manipulation Language.
FUNZIONI Dichiarazione: Definizione:
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
PLSQL 1.1 LA REALIZZAZIONE DI APPLICAZIONI Quattro parti: Gestione dati Business rules Logica applicativa Interfaccia utente Molte possibili architetture.
BDE-TRANS 1 Gestione di transazioni concorrenti. BDE-TRANS 2 Lock Principio: –Tutte le letture sono precedute da r_lock (lock condiviso) e seguite da.
ATOMICITÀ Il tipo di atomicità di un programma PL/SQL è stabilito dall’ambiente chiamante oppure dal programma Gestione atomicità: –COMMIT –SAVEPOINT nome_punto.
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
MySQL Database Management System
TW Asp - Active Server Pages Nicola Gessa. TW Nicola Gessa Introduzione n Con l’acronimo ASP (Active Server Pages) si identifica NON un linguaggio di.
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
Nozione ed uso Operazioni eseguite automaticamente ogni volta che avviene un certo evento Uso: –Gestione di vincoli di integrità: Per fallimento Per modifica.
PLSQL 1.1 LA REALIZZAZIONE DI APPLICAZIONI Quattro parti: Gestione dati Business rules Logica applicativa Interfaccia utente Molte possibili architetture.
Elementi di PL/SQL. Pl/Sql Il PL/SQL (Procedural Language/Structured Query Language) è un linguaggio di programmazione procedurale di Oracle che costituisce.
Transazioni in MySQL 4 Transazioni in MySQL 4
Vincoli interrelazionali
Basi di Dati e Sistemi Informativi Esercitazione: Il Linguaggio SQL (DDL+DML) Home page del corso:
Linguaggio SQL prima parte Linguaggio SQL prima parte A. Lorenzi, E. Cavalli INFORMATICA PER SISTEMI INFORMATIVI AZIENDALI Copyright © Istituto Italiano.
Basi di Dati attive. Sistemi Informativi DEE - Politecnico di Bari E. TinelliBasi di dati attive2 Definizione Una base di dati si dice attiva quando dispone.
Elementi di statistica con R e i database LEZIONE 2 Rocco De Marco rocco.demarco(a)an.ismar.cnr.it Ancona, 12 Aprile 2012.
Anno Architetture dati DBMS Centralizzati Controllo di concorrenza Carlo Batini.
Linguaggio SQL. Linguaggi per database La diffusione del modello relazionale ha favorito l’uso prevalente di linguaggi non procedurali: in questo modo.
Anno Architetture dati - DBMS Centralizzati Recovery management Carlo Batini.
Transcript della presentazione:

Corso di Basi di Dati Il Linguaggio SQL Home page del corso: http://www.cs.unibo.it/~difelice/dbsi/

Il Linguaggio SQL SQL (Structured Query Language) e’ il linguaggio di riferimento per le basi di dati relazionali. Diverse versioni del linguaggio: SQL-86  Costrutti base SQL-89  Integrita’ referenziale SQL-92 (SQL2)  Modello relazionale, struttura a livelli SQL:1999 (SQL3)  Modello ad oggetti SQL:2003 (SQL3)  Nuove parti: SQL/JRT, SQL/XML SQL:2006 (SQL3)  Estensione di SQL/XML SQL:2008 (SQL3)  Lievi aggiunte

Il Linguaggio SQL Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS. Procedure (Stored Procedures) Trigger Permessi Transazioni

Il Linguaggio SQL Stored Procedures  Frammenti di codice SQL, con la possibilita’ di specificare un nome, dei parametri in ingresso e dei valori di ritorno. Procedure ModificaStipendio (MatricolaNew: varchar(20), StipendioNew: smallint) update Impiegati set Stipendio=StipendioNew where Matricola=MatricolaN Ogni DBMS offre estensioni procedurali differenti …

Il Linguaggio SQL SQL DB APPLICAZIONE ESTERNA MODELLO senza STORED PROCEDURE TABELLE DATI NOME PROCEDURA + PARAMETRI MODELLO con STORED PROCEDURE DB APPLICAZIONE ESTERNA Efficienza Maggiore espressivita’ … TABELLE DATI PROCEDURE

Il Linguaggio SQL Esempio: definizione di funzioni in MySQL: CREATE FUNCTION function_name RETURNS type_return … List of SQL routine statements CREATE FUNCTION echo(s CHAR(20)) RETURNS CHAR(50) RETURN(s) mysql>> SELECT echo(“Hello”);

Il Linguaggio SQL Esempio: definizione di funzioni in PostgreSQL: CREATE FUNCTION add_three_values(v1 anyelement, v2 anyelement, v3 anyelement) RETURNS anyelement AS $$ DECLARE result ALIAS for $0 BEGIN result:=v1 + v2 +v3; RETURN result END

Il Linguaggio SQL Le estensioni procedurali consentono di: Creare funzioni e procedure trigger-based. Aggiungere strutture di controllo al linguaggio SQL (es. cicli, strutture condizionali if then else, etc). Dichiarare variabili e tipi di dato user-defined. Definire funzioni avanzate ed ottimizzate, che sono ritenute “sicure” dal DBMS.

Il Linguaggio SQL Ogni DBMS offre una sua estensione procedurale: PL/SQL  Linguaggio di Oracle Server SQL PL  Linguaggio di IBM DB2 PL/pgSQL  Linguaggio di PostgreSQL …

Il Linguaggio SQL Costrutti procedurali in PostgreSQL: Costrutti condizionali if <Condizione> then … else … endif IF user_id <> 0 THEN UPDATE USERS SET USERS.email=v_email WHERE (USERS.user_id = user_id)

Il Linguaggio SQL Costrutti procedurali in PostgreSQL: Costrutti iterativi (while) while (Expression) LOOP statements END LOOP WHILE ncycle>0 LOOP UPDATE SALARY SET SALARY.amount=SALARY.amount -100 ncycle:=ncycle -1;

Il Linguaggio SQL Costrutti procedurali in PostgreSQL: Costrutti iterativi (for) For record_or_row IN query LOOP statements END LOOP FOR Studente IN SELECT * FROM STUDENTI LOOP UPDATE ESAMI SET Voto=30 WHERE (Corso=“Basi di Dati”)

Il Linguaggio SQL Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS. Procedure (Stored Procedures) Trigger Permessi Transazioni

Il Linguaggio SQL Vorrei implementare un comportamento del tipo: ORDINE Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 Vorrei implementare un comportamento del tipo: Ogni volta che viene inserito/modificato un nuovo ordine con piu’ di 5 quantita’ nel DB viene inviata una mail al Titolare dell’azienda ..

Il Linguaggio SQL Vorrei implementare un comportamento del tipo: ORDINE MAGAZZINO ACQUISTO Nome Codice Quantita Xbee Radio Shield 123 3 Arduino Uno Shield 5565 2 Arduino Ethernet 14354 1 Codice Quantita 123 5565 2 14354 1 Codice Q.a Data 123 3 1/2/2012 Vorrei implementare un comportamento del tipo: Ogni volta in cui l’utente fa un’ordine, si aggiorna la tabella Magazzino, e nel caso non ci siano piu’ prodotti di quel tipo, si aggiorni anche la tabella Acquisti …

Il Linguaggio SQL Trigger (o regole attive)  meccanismi di gestione della base di dati basati sul paradigma ECA (Evento/Condizione/Azione). Evento: primitive per la manipolazione dei dati (insert, delete, update) Condizione: Predicato booleano Azione: sequenza di istruzioni SQL, talvolta procedure SQL specifiche del DBMS.

Il Linguaggio SQL Trigger (o regole attive)  meccanismi di gestione della base di dati basati sul paradigma ECA (Evento/Condizione/Azione). A che servono i Trigger? 1. Garantire il soddifacimento di vincoli di integrita’ referenziale, e/o specificare meccanismi di reazione ad hoc in caso di violazione dei vincoli!

Il Linguaggio SQL CORSI ESAMI Nome Codice Crediti Basi di dati 6464 12 Programmazione 1213 Sistemi Operativi 1455 6 Corso Studente Voto 0121 4324235245 30L 1213 25 9854456565 18 Q. Che accade se un valore nella tabella esterna viene cancellato o viene modificato? A. Il vincolo di integrita’ referenziale nella tabella interna potrebbe non essere piu’ valido! Cosa fare?

Il Linguaggio SQL Trigger (o regole attive)  meccanismi di gestione della base di dati basati sul paradigma ECA (Evento/Condizione/Azione). A che servono i Trigger? 2. Specificare regole aziendali (business rules), ossia vincoli generici sulo schema della base di dati (es. Un impiegato non puo’ avere un aumento di stipendio superiore al 10%, pena annullamento della transazione).

Il Linguaggio SQL Trigger (o regole attive)  meccanismi di gestione della base di dati basati sul paradigma ECA (Evento/Condizione/Azione). SINTASSI SQL3 Create trigger Nome Modo Evento on Tabella [referencing Referenza] [for each Livello] [when (IstruzioneSQL)] Istruzione/ProceduraSQL EVENTO CONDIZIONE AZIONE

Il Linguaggio SQL Modo  before/after Evento  insert/delete/update Referencing  qui possono essere inserite variabili globali per aumentare l’espressivita’ del trigger… Livello  row (Il trigger agisce a livello di righe) statement (Il trigger agisce globalmente a livello di tabella) Due modalita’ di esecuzione: immediata vs differita.

Esempio di Trigger in SQL3 Il Linguaggio SQL Esempio di Trigger in SQL3 CREATE TRIGGER CHECKAUMENTO BEFORE UPDATE OF CONTO ON IMPIEGATO FOR EACH ROW WHEN (NEW.STIPENDIO > OLD.STIPENDIO * 1.2) SET NEW.STIPENDIO=OLD.STIPENDIO * 1.2 Modo e’ definito come before. Evento e’ definito come update. Livello e’ definito come row.

Il Linguaggio SQL Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS. Procedure (Stored Procedures) Trigger Permessi Transazioni

Il Linguaggio SQL SQL2/SQL3 prevede meccanismi di controllo di accesso alle risorse dello schema del DB. Di default, ogni risorsa appartiene all’utente che l’ha definita … Su ciascuna risorsa sono definiti dei privilegi (grant): insert/update/delete  tabelle/viste select  tabelle/viste references tabelle/attributi usage  domini

Il Linguaggio SQL Il comando grant consente di assegnare privilegi su una certa risorsa ad utenti specifici. grant Privilegio on Risorsa/e to Utente/i [with grant option] L’opzione with grant option consente di propagare il privilegio ad altri utenti del sistema… grant select on Impiegati to Marco with grant option grant delete on Impiegati, Salari to Marco, Michele

Il Linguaggio SQL Il comando revoke consente di revocare privilegi su una certa risorsa ad utenti specifici. revoke Privilegio on Risorsa/e from Utente/i [cascade|restrict] L’opzione cascade agisce ricorsivamente sui privilegi eventualmente concessi da quell’utente … revoke select on Impiegati to Marco cascade revoke delete on Impiegati, Salari to Marco, Michele

Il Linguaggio SQL In SQL3 e’ possibile definire dei ruoli per l’accesso alle risorse di un database. Ruolo = Contenitore di privilegi ESEMPIO di RUOLO Insert su Tabella Impiegati Select su Tabella Retribuzioni Update su Tabella Progetti Comandi SQL3: create role/set role

Il Linguaggio SQL Oltre ad i costrutti base di SQL2 visti fin qui, esistono molti costrutti avanzati (i) definiti in SQL3 e/o (ii) dipendenti dallo specifico DBMS. Procedure (Stored Procedures) Trigger Permessi Transazioni

Gestione delle Transazioni Le transazioni rappresentano unita’ di lavoro elementare (insiemi di istruzioni SQL) che modificano il contenuto di una base di dati. start transaction update SalariImpiegati set conto=conto*1.2 where (CodiceImpiegato = 123) commit work Le transazioni sono comprese tra una start transaction ed una commit/ rollback

Gestione delle Transazioni Le transazioni rappresentano unita’ di lavoro elementare (insiemi di istruzioni SQL) che modificano il contenuto di una base di dati. start transaction update SalariImpiegati set conto=conto-10 where (CodiceImpiegato = 123) if conto >0 commit work; else rollback work Le transazioni sono comprese tra una start transaction ed una commit/ rollback

Gestione delle Transazioni PROPRIETA’ ACIDE DELLE TRANSAZIONI Atomicita’  La transazione deve essere eseguita con la regola del “tutto o niente”. Consistenza  La transazione deve lasciare il DB in uno stato consistente, eventuali vincoli di integrita’ non devono essere violati. Isolamento  L’esecuzione di una transazione deve essere indipendente dalle altre. Persistenza  L’effetto di una transazione che ha fatto commit work non deve essere perso.

Gestione delle Transazioni Gestione della concorrenza Gestione dell’affidabilita’ DB Gestore dell’affidabilita’  garantisce atomicita’ e persistenza … COME? Usando log e checkpoint. Gestore della concorrenza  garantisce l’isolamento in caso di esecuzione concorrente di piu’ transazioni.

Gestione delle Transazioni In un sistema reale, le transazioni vengono eseguite in concorrenza per ragioni di efficienza / scalabilita’. … Tuttavia, l’esecuzione concorrente determina un insieme di problematiche che devono essere gestite … T1= Read(x); x=x+1; Write(x); Commit Work T2= Read(x); x=x+1; Write(x); Commit Work Se x=3, al termine delle due transazioni x vale 5 (esecuzione sequenziale) … cosa accade in caso di esecuzione concorrente?

Gestione delle Transazioni Problema 1: Perdita di Aggiornamento Transazione1 (T1) Transazione2 (T2) Read(x) x=x+1 Write(x) Commit work T2 scrive 4 T1 scrive 4

Gestione delle Transazioni Problema 2: Lettura sporca Transazione1 (T1) Transazione2 (T2) Read(x) x=x+1 Write(x) Commit work Rollback work T2 legge 4!

Gestione delle Transazioni Problema 3: Letture incosistenti Transazione1 (T1) Transazione2 (T2) Read(x) x=x+1 Write(x) Commit work T1 legge 3! T1 legge 4!

Gestione delle Transazioni Problema 4: Aggiornamento Fantasma Vincolo: x+y+z deve essere = a 1000 Transazione1 (T1) Transazione2 (T2) Read(x) Read(y) y=y-100 Read(z) z=z+100 Write(y), Write(z) Commit work s=x+y+z; commit work Vincolo violato!!

Gestione delle Transazioni Date un insieme di transazioni T1,T2, Tn, di cui ciascuna formata da un certo insieme di operazioni di scrittura (wi) e lettura (ri): Es. T1=r1(x) r1(y) r1(z) w1(y) … Si definisce schedule la sequenza di operazioni di lettura/scrittura di tutte le transazioni cosi’ come eseguite sulla base di dati: r1(x) r2(y) r1(y) w4(y) w2(z) …

Gestione delle Transazioni Uno schedule S si dice seriale se le azioni di ciascuna transazione appaiono in sequenza, senza essere inframezzate da azioni di altre transazioni. S={T1, T2, … Tn} Schedule seriale ottenibile se: Le transazioni sono eseguite uno alla volta (scenario non realistico) Le transazioni sono completamente indipendenti l’una dall’altra (improbabile)

Gestione delle Transazioni Uno schedule S si dice serializzabile se produce lo stesso risultato di un qualunque scheduler seriale S’ delle stesse transazioni. CLASSI Schedule Schedule Serializzabili Schedule Seriali

Gestione delle Transazioni Come implementare il controllo della concorrenza? I DMBS commerciali usano il meccanismo dei lock  per poter effettuare una qualsiasi operazioni di lettura/scrittura su una risorsa (tabella o valore di una cella), e’ necessario aver precedentemente acquisito il controllo (lock) sulla risorsa stessa. Lock in lettura (accesso condiviso) Lock in scrittura (mutua esclusione)

Gestione delle Transazioni Su ogni lock possono essere definite due operazioni: Richiesta del lock in lettura/scrittura. Rilascio del lock (unlock) acquisito in precedenza. STATO DELLA RISORSA Libero r_locked w_locked r_lock OK/r_locked NO/w_locked w_lock OK/w_locked NO/r_locked unlock Errore OK/dipende OK/libero AZIONE

Gestione delle Transazioni Lock Manager  componente del DBMS responsabile di gestire i lock alle risorse del DB, e di rispondere alle richieste delle transazioni. Per ciascun oggetto x del DBMS: State(x)  stato dell’oggetto (libero/r_locked/w_locked) Active(x)  lista transazioni attive sull’oggetto Queued(x)  lista transazioni bloccate sull’oggetto STRUTTURE DATI del LOCK MANAGER

Gestione delle Transazioni Lock Manager  componente del DBMS responsabile di gestire i lock alle risorse del DB, e di rispondere alle richieste delle transazioni. Riceve una richiesta (r_lock, w_lock, unlock) da una transazione T, su un oggetto x (oggetto=tabella, colonna, etc). Controlla la tabella stato/azione (slide precedente). Se la risposta e’ OK, aggiorna lo stato della risorsa, e concede il controllo della risorsa alla transazione T. Se la risposta e’ NO, inserisce la transazione T in una coda associata all’oggetto x. AZIONI DEL LOCK MANAGER

Gestione delle Transazioni RISORSA x T1: r_lock(x) LOCK MANAGER STATO(x): r_locked ACTIVE(x): {T1} ACTIVE(x): {} QUEUED(x): {} Answer to T1: OK

Gestione delle Transazioni RISORSA x T2: r_lock(x) LOCK MANAGER STATO(x): r_locked ACTIVE(x): {T1} ACTIVE(x): {T1,T2} ACTIVE(x): {} QUEUED(x): {} Answer to T2: OK

Gestione delle Transazioni RISORSA x T3: w_lock(x) LOCK MANAGER STATO(x): r_locked ACTIVE(x): {T1} ACTIVE(x): {T1,T2} ACTIVE(x): {} QUEUED(x): {T3} QUEUED(x): {} Answer to T3: NO

Gestione delle Transazioni Two Phase Lock (2PL)  Una transazione, dopo aver rilasciato un lock, non puo’ acquisirne un altro. In pratica, una transazione acquisisce prima tutti i lock delle risorse di cui necessita … Fase di Acquisizione Risorse Fase di Rilascio Time

Gestione delle Transazioni r_lock(x) r(x) unlock(x) r_lock(y) r(y) unlock(y) Commit w_lock(y) w(y) TRANSAZIONI T1= r(x), w(y), Commit T2= r(y), Commit SCHEDULE Q. E’ uno schedule 2PL? A. NO!

Gestione delle Transazioni r_lock(x) r(x) w_lock(y) r_lock(y) w(y) unlock(y) unlock(x) r(y) Commit TRANSAZIONI T1= r(x), w(y), Commit T2= r(y), Commit SCHEDULE Q. E’ uno schedule 2PL? A. SI!

Gestione delle Transazioni Two Phase Lock (2PL)  Una transazione, dopo aver rilasciato un lock, non puo’ acquisirne un altro. Ogni schedule che rispetta il 2PL e’ anche serializzabile (perche’ ?). Ogni schedule che rispetta il 2PL non puo’ incorrere in configurazioni erronee dovute a: aggiornamento fantasma, lettura inconsistente, perdita di aggiornamento … che accade in caso di lettura sporca?

Gestione delle Transazioni r_lock(x) r(x) w_lock(y) r_lock(y) w(y) unlock(y) unlock(x) r(y) Abort Commit TRANSAZIONI T1= r(x), w(y), Commit T2= r(y), Commit SCHEDULE Lettura sporca!

Gestione delle Transazioni Strict Two Phase Lock (2PL)  I lock di una transazione sono rilasciati solo dopo aver effettuato le operazioni di commit/abort. Variante strict del 2PL, utilizzato in alcuni DBMS commerciali. Uno schedule che rispetta lo S2PL eredita tutte le proprieta’ del 2PL, ed inoltre NON presenta anomalie causate da problemi di lettura sporca.

Gestione delle Transazioni r_lock(x) r(x) w_lock(y) r_lock(y) w(y) Abort unlock(x) unlock(y) r(y) Commit TRANSAZIONI T1= r(x), w(y), Commit T2= r(y), Commit SCHEDULE Q. E’ uno schedule S2PL? A. SI!

Gestione delle Transazioni PROBLEMA: I protocolli 2PL e S2PL possono generare schedule con situazioni di deadlock. TRANSAZIONI T1 T2 r_lock(x) r_lock(y) r(x) r(y) w_lock(y) w_lock(x) T1= r(x), w(y), Commit T2= r(y), w(x), Commit SCHEDULE

Gestione delle Transazioni Per gestire le situazioni di deadlock causate dal Lock Manager, si possono usare tre tecniche: Uso dei timeout  ogni operazione di una transazione ha un timeout entro il quale deve essere completata, pena annullamento (abort) della transazione stessa. T1: r_lock(x,4000), r(x), w_lock(y,2000), w(y), commit, unlock(x), unlock(y)

Gestione delle Transazioni Per gestire le situazioni di deadlock causate dal Lock Manager, si possono usare tre tecniche: Deadlock avoidance prevenire le configurazioni che potrebbero portare ad un dealock … COME? Lock/Unlock di tutte le risorse allo stesso tempo. Utilizzo di time-stamp o di classi di priorita’ tra transazioni (problema: puo’ determinare starvation!)

Gestione delle Transazioni Per gestire le situazioni di deadlock causate dal Lock Manager, si possono usare tre tecniche: Deadlock detection utilizzare algoritmi per identificare eventuali situazioni di deadlock, e prevedere meccanismi di recovery dal deadlock Grafo delle richieste/risorse utilizzato per identificare la presenza di cicli (corrispondenti a deadlock) In caso di ciclo, si fa abort delle transazioni coinvolte nel ciclo in modo da eliminare la mutua dipendenza …

Gestione delle Transazioni Un metodo alternativo al 2PL per la gestione della concorrenza in un DBMS prevede l’utilizzo dei time-stamp delle transazioni (metodo TS). Ad ogni transazione si associa un timestamp che rappresenta il momento di inizio della transazione. Ogni transazione non puo’ leggere o scrivere un dato scritto da una transazione con timestamp maggiore. Ogni transazione non puo’ scrivere su un dato gia’ letto da una transazione con timestamp maggiore.

Gestione delle Transazioni Un metodo alternativo al 2PL per la gestione della concorrenza in un DBMS prevede l’utilizzo dei time-stamp delle transazioni (metodo TS). Ad ogni oggetto x si associano due indicatori: WTM(x)  timestamp della transazione che ha fatto l’ultima scrittura su x. RTM(x)  timestamp dell’ultima transazione (ultima=con t piu’ alto) che ha letto x.

Gestione delle Transazioni Lo scheduler di sistema verifica se un’eventuale azione (rt(x) o wt(x)) eseguita da una transazione T con timestamp t puo’ essere eseguita o meno: rt(x)  Se t<WTM(x) allora la transazione viene uccisa. Se t>=WTM(x), la richiesta viene eseguita, ed RTM(x) viene aggiornato al massimo tra il valore precedente di RTM(x) e t stesso.

Gestione delle Transazioni Lo scheduler di sistema verifica se un’eventuale azione (rt(x) o wt(x)) eseguita da una transazione T con timestamp t puo’ essere eseguita o meno: wt(x)  Se t<WTM(x) oppure t<RTM(x) allora la transazione viene uccisa. Altrimenti, la richiesta viene accettata, e WTM(x) viene posto uguale a t.

Gestione delle Transazioni ESEMPIO: RTM(x)=6, WTM(x)=3 T5: r5(x)  OK, RTM(x)=6 T9: w9(x)  OK, WTM(x)=9 T6: w6(x)  NO, T6 uccisa T8: r8(x)  NO, T8 uccisa T10: r10(x)  OK, RTM(x)=10

Gestione delle Transazioni In SQL-3, ed in molti DBMS commerciali (DB2, MySQL, PostgreSQL, Oracle, etc) sono definiti quattro livelli di isolamento tra transazioni: Livello Descrizione read uncommitted (read only) La transazione non emette lock in lettura, e non rispetta lock esclusivi da altre transazioni. read committed Richiede lock condivisi per effettuare le letture. repeteable read Applica il protocollo S2PL anche in lettura. serializable Applica il protocollo S2PL con lock di predicato. S2PL utilizzato per le operazioni di scrittura, da tutti i livelli.

Gestione delle Transazioni SINTASSI MySQL Iniziare una transazione e completarla: START TRANSACTION … (Statements SQL) COMMIT/ROLLBACK Configurare livello di isolamento di esecuzione: SET TRANSACTION ISOLATION LEVEL REPEATABLE READ | READ COMMITTED | READ UNCOMMITTED | SERIALIZABLE

Gestione delle Transazioni SINTASSI MySQL Le transazioni sono utilizzabili solo su tabelle di tipo InnoDB (ACID-compliant). E’ possibile gestire manualmente le operazioni di lock su tabelle (non consigliabile su tabelle di tipo InnoDB): LOCK TABLES tabella { READ | WRITE }