Transazione (basi di dati)

Da Wikipedia, l'enciclopedia libera.
(Reindirizzamento da Transazione (database))

In informatica, una transazione è una sequenza di operazioni, che può concludersi con un successo o un insuccesso; in caso di successo, il risultato delle operazioni deve essere permanente o persistente, mentre in caso di insuccesso si deve tornare allo stato precedente all'inizio della transazione.

Le transazioni sono normalmente implementate da DBMS o da gestori di transazioni (application server o ambienti direttamente installati sulla macchina host dove risiede il database (es. CICS)).

Descrizione[modifica | modifica wikitesto]

Una transazione, per essere tale, deve godere delle cosiddette proprietà ACID, particolarmente significative nei sistemi in cui possono essere eseguite più transazioni contemporaneamente.

Nei linguaggi di accesso ai DBMS, la gestione delle transazioni fa parte del Data Manipulation Language (linguaggio di manipolazione dei dati). Infatti, le modifiche allo schema del database o alle autorizzazioni non sono facilmente gestibili con transazioni.

Un utilizzo tipico delle transazioni è il seguente:

  • Prima di eseguire una transazione, si esegue un'istruzione di "inizio transazione".
  • Si eseguono le operazioni di interrogazione e modifica dei dati.
  • Se si riscontra qualche anomalia, si esegue un'istruzione detta di abort, per abortire la transazione che produce un meccanismo di "rollback".
  • Se si sono eseguite tutte le operazioni senza riscontrare anomalie, si esegue un'istruzione detta di "commit", per confermare la transazione.

Alcuni sistemi non prevedono un'istruzione di inizio transazione, perché quando ci si collega al DBMS, si inizia automaticamente una transazione, e quando si esegue un commit o un rollback, si inizia automaticamente un'altra transazione.

Se ci si scollega dal DBMS senza eseguire un commit, alcuni DBMS eseguono automaticamente un commit (autocommit), altri un rollback.

Per implementare un transazione, tipicamente si usa un'apposita area d'appoggio del disco fisso in cui vengono copiati i dati originali appena prima di essere modificati. Quando viene eseguito un commit, i dati originali copiati vengono eliminati. Quando viene eseguito un rollback, si ricopiano indietro i dati originali copiati. Pertanto, un commit è più efficiente di un rollback.

Sottotransazioni[modifica | modifica wikitesto]

Una transazione si considera come un insieme di sottotransazioni. Ogni sottotransazione è composta da un'operazione di read r o di write w.

T_i = \left \{r_1, w_1, r_2, w_2, ... r_n, w_n \right \}

Schedule[modifica | modifica wikitesto]

Una sequenza di esecuzione di un insieme di transazioni è detta schedule. Uno schedule è seriale se una transazione termina prima che la successiva inizi.

Tipologie di abort[modifica | modifica wikitesto]

Una transazione può terminare per un abort. Esistono due tipi di abort:

  • Abort a runtime, che viene lanciato all'interno dell'esecuzione della transazione quando il DBMS riscontra qualche anomalia, come ad esempio una divisione per 0 ed esegue automaticamente un rollback;
  • Abort di sistema, che viene lanciato nel caso in cui si verifichi un errore di sistema come l'interruzione brusca del DBMS, per intervento esterno, o per un bug, o per spegnimento improvviso del computer. Il DBMS, quando viene riattivato, esegue automaticamente il rollback delle transazioni che erano in corso al momento del crash.

Una possibile causa del fallimento di una transazione è l'insufficienza di spazio d'appoggio in memoria per copiare i dati originali.

Voci correlate[modifica | modifica wikitesto]

Altri progetti[modifica | modifica wikitesto]

informatica Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica