Caduta sessione e rollback operazioni sql

venerdì 26 ottobre 2012 - 18.28
Tag Elenco Tags  C#  |  .NET 4.0  |  Visual Studio 2010

andrestu Profilo | Expert

Salve a tutti,
non so se vie è capitata mai questa problematica, vi dò una breve spiegazione dl contesto.
Sito web Aspnet con database Sql tutto su hosting Register (servizio base quindi NON un server dedicato).
i dati all'avvio dell'applicazione vengono caricati in memoria, quindi visualizzati direttamente da oggetti residenti in memoria.
A seguito di un aggiornamento di record su database i dati vengono immediatamente ricaricati in memoria, viene dunque fatto un refresh immediato, quindi per come e impostata la logica se vedo subito le modifiche allora per forza di cose questi dati sono stati scritte altrimenti non le vedrei neanche.
Fino a qui tutto ok se non fosse che alcune volte (non sempre) succede che a seguito di un aggiornamento passa un pò di tempo riapro la pagina e mi rivedo i dati vecchi.
L'unica spiegazione che mi son dato è che dopo aver modificato i dati nel database IIS riavvia l'applicazione e quando questo accade Sql fà il rollback delle ultime operazioni, ma può succedere una cosa simile ?
quali sono i motivi per il quale Sql può fare un rollback delle operazioni dopo un tot di tempo e non subito a seguito di un operazione di aggiornamento ?

Andrea Restucci - Web Developer

alx_81 Profilo | Guru

>Salve a tutti,
ciao

>i dati all'avvio dell'applicazione vengono caricati in memoria,
>quindi visualizzati direttamente da oggetti residenti in memoria.
>A seguito di un aggiornamento di record su database i dati vengono
>immediatamente ricaricati in memoria, viene dunque fatto un refresh
>immediato, quindi per come e impostata la logica se vedo subito
>le modifiche allora per forza di cose questi dati sono stati
>scritte altrimenti non le vedrei neanche.
>Fino a qui tutto ok se non fosse che alcune volte (non sempre)
>succede che a seguito di un aggiornamento passa un pò di tempo
>riapro la pagina e mi rivedo i dati vecchi.
>L'unica spiegazione che mi son dato è che dopo aver modificato
>i dati nel database IIS riavvia l'applicazione e quando questo
>accade Sql fà il rollback delle ultime operazioni, ma può succedere
>una cosa simile ?
>quali sono i motivi per il quale Sql può fare un rollback delle
>operazioni dopo un tot di tempo e non subito a seguito di un
>operazione di aggiornamento ?
SQL fa rollback quando deve annullare una transazione, nulla più.
Il timeout è impostato a livello di connessione e se quello scade, la chiamata dovrebbe essere rollbackata.
con IIS non vedo nessun legame però..
Io vedo solo una chiamata che per qualche motivo (anche timeout appunto, ma ADO.Net, non è sql di suo) non termina, e quindi in memoria non ti trovi mai i dati "freschi".
Hai verificato se dopo quello strano comportamento però i dati su db ci sono?
In teoria no, e se non ci sono, semplicemente non è andata a buon fine l'operazione su db.
In tal caso, dovrai ottimizzare la chiamata (magari indicizzando) oppure cambiando proprio strategia (anche se non sapendo di preciso come fai non posso dire se c'è qualcosa che non va, non sembra a parole, ottimizzerei la chiamata, magari profilandola).
A volte basta un lock in multiutenza per darti delle attese molto alte.
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://www.alessandroalpi.net
http://blogs.dotnethell.it/suxstellino
http://mvp.microsoft.com/profiles/Alessandro.Alpi

andrestu Profilo | Expert

allora, la logica con cui è implementato il mio sito è molto semplice:

- dati memorizzati su database sql
- all'avvio del sito (Application_Start glòobal.asax) i dati vengono letti dal db, convertiti in liste e salvati in oggetti in Application.
- quando un utente apre la pagina del sito il consumo dei dati avviene esclusivamente leggendo da queste liste presenti in Application
- quando un utente deve apportare delle modifiche cè una precisa procedura che scrive su database e immediatamente dopo la scrittura viene aggiornata la lista di riferimento che è presente in memroia, quindi se le modifiche sono state scritte correttamente le vedo subito altrimenti no
tutto questo è implementato a mano, non uso oggetti tipo dataset o datatable, l'unica cosa che uso sono gli oggetti del provider membership che mi connettono al db quindi using(... oggetto connessione){ sqlcommand ... }

la cosa strana è che alle volte succede che se un utente aggiorna qualche record inizialmente sembra che è andato tutto a buon fine, quindi vede correttamente le modifiche apportate, poi dopo per esempio mezzora vengono annullate da qualche causa a me sconosciuta, i record vengono ripristinati a prima delle modifiche. Sincermaente non ho fatto un controllo diretto su database (lo farò) anche perchè ho dato per scontato che se l'utente vede correttamente le modifiche per come è progettata l'app devono essere sate perforza scritte.
In effetti anchio non vedo nessun legame tra IIS e Sql quindi non dovrebbe centrare il riavvio dell'applicazione, anche se facendo un test una sola volta mi è capitato che il fenomeno si è verificato immediatamente dopo la chiusura del browser (quindi della sessione) sarà stato un caso. comunque ieri dopo ripetuti test non sono riuscito a far ripetere il problema.
Le uniche spiegazioni sono due:
o l'utente mi sta prendendo per il c... oppure il database ogni tanto indipendentemente dalle operazioni fatte su IIS fa a random un rollback delle ultime modifiche, magari perchè mal configurato.
A questo punto mi rimane solo da fare una cosa:
aggiungo a mano del codice che prima di ogni operazione fatta dall'utente mi salva in un file di testo data ora e tipo di operazione, creando una specie di log sul sito e in più volevo analizzare le operazioni fatte su db, Sql mantiene il log delle operazioni effettuate ?
in che modo posso analizzarlo ?
considera che utilizzo un servizio hosting qundi non posso mettere mano diretta ai file, l'unica cosa posso esportare backup (ma non credo che serva per i log) c'è magari qualche SP di sistema che mi fornisce la lista delle operazioni fatte ?





Andrea Restucci - Web Developer

andrestu Profilo | Expert

Errata Corrige !!!
mea culpa, dopo analisi approfondita ne sono venuto a capo, alla fine era un errore nella procedura di aggiornamento da me creata, quindi niente perdita dei dati da parte di Sql.

Grazie comunque per l'interessamento...

Andrea Restucci - Web Developer
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-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5