Transazioni e concorrenza
Una transazione è costituita da un singolo comando o da un gruppo di comandi che vengono eseguiti come un pacchetto. Le transazioni consentono di combinare più operazioni in un'unica unità di lavoro. Se si verifica un problema in un determinato punto della transazione, sarà possibile annullare tutti gli aggiornamenti ripristinando la condizione antecedente all'inizio della transazione.
Per poter garantire la coerenza dei dati, una transazione deve essere conforme alle proprietà ACID, ovvero atomicità, coerenza, isolamento e durabilità. La maggior parte dei sistemi di database relazionale, ad esempio Microsoft SQL Server, supporta le transazioni fornendo funzionalità di blocco, di registrazione e di gestione delle transazioni ogni volta che un'applicazione client esegue un'operazione di aggiornamento, inserimento o eliminazione.
Nota
Le transazioni che implicano l'uso di più risorse possono abbassare la concorrenza se i blocchi vengono mantenuti troppo a lungo. Mantenere pertanto le transazioni per il minor tempo possibile.
Se una transazione implica l'uso di più tabelle nello stesso database o server, è spesso preferibile usare transazioni esplicite nelle stored procedure. È possibile creare transazioni in stored procedure SQL Server usando le istruzioni Transact-SQL BEGIN TRANSACTION
, COMMIT TRANSACTION
e ROLLBACK TRANSACTION
.
Per le transazioni che implicano l'uso di gestori di risorse diversi, ad esempio una transazione tra SQL Server e Oracle, è necessaria una transazione distribuita.
In questa sezione
Transazioni locali
Viene illustrato come eseguire transazioni su un database.
Transazioni distribuite
Viene descritto come eseguire transazioni distribuite in ADO.NET.
Integrazione di System.Transactions con SQL Server
Viene descritta l'integrazione di System.Transactions con SQL Server per l'utilizzo di transazioni distribuite.
Concorrenza ottimistica
Vengono descritte la concorrenza ottimistica e la concorrenza pessimistica e come è possibile verificare le violazioni della concorrenza.