Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
ASP.NET 2.0 / 3.5 / 4.0
Problema concorrenza?
venerdì 07 marzo 2008 - 08.55
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
the-mauri
Profilo
| Newbie
20
messaggi | Data Invio:
ven 7 mar 2008 - 08:55
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
722
messaggi | Data Invio:
ven 7 mar 2008 - 09:20
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
20
messaggi | Data Invio:
ven 7 mar 2008 - 09:23
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
722
messaggi | Data Invio:
ven 7 mar 2008 - 10:05
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
8.814
messaggi | Data Invio:
ven 7 mar 2008 - 10:16
>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
20
messaggi | Data Invio:
ven 7 mar 2008 - 13:27
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
8.814
messaggi | Data Invio:
ven 7 mar 2008 - 13:42
>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
Torna su
Stanze Forum
Elenco Threads
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 !