Problema concorrenza?

venerdì 07 marzo 2008 - 08.55

the-mauri Profilo | Newbie

Salve,
ho il seguente quesito: è possibile in un applicazione web che legge, modifica e inserisce dati in un database avere un problema di concorrenza nell'inserimento di due dati diversi se la concorrenza non è gestista?
Mi spiego meglio con un esempio: se due operatori da applicazione inseriscono con una transazione che opera su più tabelle dati diversi, può capitare per qualche motivo che i dati del primo operatore si mischino con quelli del secondo avendo un inconsistenza di dati? E' necessario forse anche in questo caso utilizzare dei semafori che implichino un accesso esclusivo al db?


Grazie
Maurizio Brioschi

Wamba Profilo | Expert

L'accesso ai dati in transazione è gestito dal database. Non dovresti mai avere questo tipo di problemi, salvo mia ignoranza e/o casi strani.
Il tuo era un caso ipotetico generale o un ipotesi per spiegare un problema che hai?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

the-mauri Profilo | Newbie

Purtroppo non è un problema che sono riuscito a verificare io ma me l'hanno comunicato due operatori che sostengono questo...

Maurizio Brioschi

Wamba Profilo | Expert

secondo me il problema devi ricercarlo in altro modo: sei sicuro che tutte le operazioni siano sotto transazione e se si la stessa? Hai un logger o puoi verificare chi ha eseguito l'ultimo inserimento per un dato record?
-----------------------------------------------------------
Solo chi ha il Caos dentro può generare una stella danzante
Wamba
http://blogs.ugidotnet.org/WamBlog/
http://www.intellimaker.com

alx_81 Profilo | Guru

>Salve,
Ciao!

>Mi spiego meglio con un esempio: se due operatori da applicazione
>inseriscono con una transazione che opera su più tabelle dati
>diversi, può capitare per qualche motivo che i dati del primo
>operatore si mischino con quelli del secondo avendo un inconsistenza
>di dati? E' necessario forse anche in questo caso utilizzare
>dei semafori che implichino un accesso esclusivo al db?
Se tutte le operazioni che vengono effettuate in quel particolare intervento sono all'interno di una transazione, il db le gestisce da solo, così come ti dice correttamente Wamba. Mischiarsi no.. le transazioni sono tali perchè rispettano le 4 proprietà ACID:

Atomicity
Una transazione è una singola unità di lavoro
Consistency
Una singola unità di lavoro che garantisce consistenza. Alla fine di una transazione il database è in uno stato consistente
Isolation
Una transazione garantisce un livello di isolamento utile a preservare i dati in caso di concorrenza.
Durability
Alla fine della transazione le modifiche apportate sono permanenti sul database.

Per questo, sei sicuro che due transazioni concorrenti non mischino i propri dati.
Magari fai attenzione al recupero di un eventuale valore IDENTITY. Utilizza la SCOPE_IDENTITY() per ottenere quello del contesto.

Guardati questo link:

SCOPE_IDENTITY (transact-sql)
http://msdn2.microsoft.com/en-us/library/aa259185(SQL.80).aspx


>
>
>Grazie
di nulla!

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org

the-mauri Profilo | Newbie

il problema può essere forse dovuto al fatto che le due transazioni seppur partono da due computer diversi hanno lo stesso nome?
esempio: entrambe si chiamano sqlTInsert.... e lavorano entrambe sulla stessa chiave primaria, possono mischiarsi i dati inseriti dalle due postazioni in questo caso?
Maurizio Brioschi

alx_81 Profilo | Guru

>il problema può essere forse dovuto al fatto che le due transazioni
>seppur partono da due computer diversi hanno lo stesso nome?
>esempio: entrambe si chiamano sqlTInsert.... e lavorano entrambe
>sulla stessa chiave primaria, possono mischiarsi i dati inseriti
>dalle due postazioni in questo caso?
Le transazioni sono ATOMICHE. Il database le organizza. Il nome non conta.
Al massimo la transazione che arriva "dopo" può ridefinire le modifiche effettuate da quelle prima..
Al buio non possiamo dirti di più..

Alx81 =)

http://blogs.dotnethell.it/suxstellino
http://mvp.support.microsoft.com/profile/Alessandro.Alpi
http://italy.mvps.org
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5