DDL transazionali in Oracle

giovedì 13 novembre 2008 alle 13:15 | Pubblicato su SQL, SQL Server | 1 commento
Tag: , , , ,

In questo periodo, mancandomi l’ispirazione per nuovi post su Oracle mi sono dedicato di più al mio sito (www.cudizio.com) dove porto avanti le mie sperimentazioni sul CMS Joomla  e le sue estensioni. L’ho trasformato praticamente nel mio secondo blog e ne ho aprofittato per cominciare a scrivere su argomenti che poco hanno a che vedere con Oracle e l’informatica ma di cui avevo voglia di parlare.

Oggi però grazie al newsgroup comp.databases.oracle.server ho trovato uno spunto. Il 10 novembre scorso un partecipante ha aperto una discussione intitolandola: “Why Oracle does not allow rollback of DDL statements?“. L’OP (il partecipante che ha aperto la discussione)  si dice sorpreso del fatto che Oracle ad ogni statement DDL faccia un commit implicito e non permetta il rollback dello stesso statement DDL, quindi ad esempio rendendo impossibile la creazione di una tabella. Egli riporta come questa caratteristica sia presente in MS SQL Server e l’abbia trovata molto utile.  Indubbiamente visto il numero di errori di battitura fatti nell’OP nel suo post questa sarebbe una caratteristica utile🙂, come qualcuno ha poi fatto notare.

La reazione di molti, e  anche il mio pensiero per un’attimo, è stato che si trattasse di una stupidaggine. Poi però qualcuno ha portato un esempio interessante, invitando giustamente ad aprire la propria mente. Non si tratta di una stupidaggine, soprattunto guardando in che direzione si muovono i sistemi informatici oggi.

L’argomentazione forse più sensata è il fatto che se in uno script di upgrade o correzione vi è un errore, l’operazione potrebbe essere “atomica”, ovvero se non si completa tutta con successo tutto fallisce lasciando quindi la struttura del database inalterata. Nella mia esperienza questa sarebbe una cosa comoda. Ai rilasci degli aggiornamenti dell’applicazione sono associati degli script di aggiornamento della base dati che comprendono sia istruzioni DDL che DML. Ora, chiaramente questi script vengono testati attentamente dal sottoscritto e da altri suoi colleghi che si occupano proprio del “deploy” dell’applicazione. Però è vero che anche in test quando salta fuori un stupido errore a metà script c’è la seccatura di avere metà operazioni eseguite e  metà no. Questo costringe o ad annullare manualmente le operazioni compiute con successo o, più semplicemente, a spezzare in due lo script (soluzione che io prediligo). Il tutto comunqe è accompagnato dalle mie imprecazioni nei confronti dei programmatori distratti (anche se per il vero talvolta sono io stesso a introdurre errori).

D’altra parte credo che introdurre in Oracle una simile caratteristica potrebbe essere tecnicamente complesso e, visto certe argomentazioni della discussione su CDOS, temo che potrebbe essere usata in modo sbagliato, come applicare direttamente tali script di aggiornamento su sistemi di produzione “a caldo”, cioè mentre gli utenti lavorano. Quindi si rischierebbe di fare uno sforzo per introdurre una caratteristica che potrebbe essere usata male.

Come funzionerà in MS SQL Server? ho fatto una rapida ricerca su MSDN ma non ho trovato nulla. Voi che ne pensate?

1 commento »

RSS feed for comments on this post. TrackBack URI

  1. fondamentalmente vorrei capire che cosa costa un’implementazione di quel tipo, quali sono i vantaggi rispetto ai costi?
    Oracle ha effettuato una scelta implementativa a livello di design, ovvero, includere un commit implicito prima e dopo ogni DDL rendendo praticamente una transazione separata ogni attività di quel tipo; questo porta enormi vantaggi in termini di attività di locking sul dizionario dati e/o i metadata e mi pare proprio che l’implementazione dell’algoritmo di locking di Oracle sia una fra le cose che fa la forza e la differenza con gli altri competitors di questo RDBMS

    Alessandro


Lascia un commento

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Blog su WordPress.com.
Entries e commenti feeds.

%d blogger cliccano Mi Piace per questo: