star gate Uno Snapshot ti salva la vita - Francesco Quaratino

Uno Snapshot ti salva la vita

Una classica best practice in tema di modifica dati di un database recita "Always Write a SELECT Statement That Does Not Modify Data Before You Actually Modify Data". In altre parole: "prima di fare danni con una query di UPDATE o DELETE, fai una SELECT di quei dati che ti appresti a modificare allo scopo di guardare coi tuoi occhi le righe che ti appresti a cambiari."
 
Io ci aggiungerei anche queste:

  • il provvidenziale BACKUP - meglio se con l'opzione WITH COPY_ONLY (valido solo da SQL 2005)
  • l'utilizzo di transazioni implicite, che possiamo impostare a livello di sessione con lo statement "SET IMPLICIT_TRANSACTIONS ON" e che ci obbliga a lanciare un COMMIT TRANSACTION per rendere effettive le modifiche (oppure un "SET IMPLICIT_TRANSACTIONS OFF" per tornare alla modalità standard di autocommit). Questo perchè, in modalità IMPLICIT, un singolo statement SQL fa aprire una transazione che deve essere esplicitamente committ-ata o rollback-ata.
  • ricorrere a uno SNAPSHOT di database, grazie al quale sarà possibile ripristinare le righe accidentalmente modificate o cancellate e gli oggetti DROP-pati e ALTER-ati, e persino il ripristino completo del datbase alla situazione precedente allo SNAPSHOT con uno speciale RESTORE di database basato appunto sullo SNAPSHOT, come in questo esempio:

    RESTORE DATABASE AdventureWorks
    FROM DATABASE_SNAPSHOT = 'AdventureWorks_dbsnapshot_di_sicurezza'


Comments

No Comments