Tool o metodo per annullare query già eseguita

lunedì 20 giugno 2011 - 07.10

stez Profilo | Newbie

Ciao a tutti,
vorrei sapere se esiste un tool o un modo per vedere una lista di tutte le query eseguite con data ora e poterne annullare una anche di diverso tempo fà...
vi spiego il mio scenario:
sto lavorando con sql manager sul db di produzione (faccio update insert correggendo dati etc etc) mentre altri utenti stanno normalmente lavorando, dopo un 15 minuti (esempio) mi rendo conto che ho sbagliato a scrivere un numero e ho fatto l'update di un campo a 0 su un numero di bolla sbagliato... disastro!!!ovviamente nel caso quell'update avesse modificato nmila record sarebbe impossibile ripristinarli uno ad uno
dovrei annullare solo quella query (non posso ripristinare un backup altrimenti perdo quello fatto nel frattempo dagli altri utenti), come faccio?
il massimo sarebbe un tool che ti mostra tutte le query eseguite dall'istanza sql con data ora e utente, mi seleziono quella mia sbagliata e faccio annulla
esiste qualcosa del genere? c'è nella versione full di sql server(io uso la express 2005)?
sono molto attento e non è mai successo ma potrà sempre capitare!!
grazie in anticipo

speedx Profilo | Junior Member

Ciao,
il tool per vedere le query in esecuzione è il sql profiler.
Però se mi permetti ti do' qualche suggerimento.
Non so con che moli di dati lavori, ne quanto siano importanti i dati che tratti, ma non è sicuramente consigliabile fare update, tanto meno massinve mentre gli utenti lavorano....che fai gli cambi i dati sotto al naso a loro insaputa?

Se poi devi fare operazioni di update che potrebbero avere effetti devastanti, potrebbe essere il caso di usare le transazioni in maniera esplicita per porter fare il rollback una volta verificato di aver sbagliato.

//// Marcello C.

alx_81 Profilo | Guru

>Ciao a tutti,
Ciao

>vorrei sapere se esiste un tool o un modo per vedere una lista
>di tutte le query eseguite con data ora e poterne annullare una
>anche di diverso tempo fà...
>vi spiego il mio scenario:
>sto lavorando con sql manager sul db di produzione (faccio update
>insert correggendo dati etc etc) mentre altri utenti stanno normalmente
>lavorando, dopo un 15 minuti (esempio) mi rendo conto che ho
>sbagliato a scrivere un numero e ho fatto l'update di un campo
>a 0 su un numero di bolla sbagliato... disastro!!!ovviamente
>nel caso quell'update avesse modificato nmila record sarebbe
>impossibile ripristinarli uno ad uno
>dovrei annullare solo quella query (non posso ripristinare un
>backup altrimenti perdo quello fatto nel frattempo dagli altri
>utenti), come faccio?
>il massimo sarebbe un tool che ti mostra tutte le query eseguite
>dall'istanza sql con data ora e utente, mi seleziono quella mia
>sbagliata e faccio annulla
>esiste qualcosa del genere? c'è nella versione full di sql server(io
>uso la express 2005)?
>sono molto attento e non è mai successo ma potrà sempre capitare!!
no, non esistono tool che annullano le query precedentemente eseguite. E mi viene da dire anche "menomale"
Immagina quante informazioni per l'undo dovrebbe salvarsi il motore. E poi, lavorare direttamente in produzione (come giustamente Marcello ti indica) è proprio una pratica da non seguire MAI.
Ci sono tool che ti danno la storia delle query eseguite (nel breve però) come SSMS Tools Pack (http://www.ssmstoolspack.com/), ma ti danno la storia delle QUERY, non dello stato in cui hanno portato il database quelle query. Se c'è una cosa che il motore di un DBMS deve garantire è la consistenza. Un'operazione come quella definita nella tua richiesta porterebbe a gestioni di concorrenze, problemi ulteriori che è meglio che il database non pensi a mio avviso. Insomma, per capirci, il CTRL-Z non deve esistere, e se vuoi fare in modo di annullare le operazioni, utilizza delle transazioni e non committare fino a quando non sei sicuro (lockando gli altri eventuali utenti che stanno lavorando o cercando di accedere su quella risorsa) che il risultato sia corretto. E non lavorare mai direttamente in produzione.

>grazie in anticipo
di nulla!
--
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

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

stez Profilo | Newbie

>Ciao,
>il tool per vedere le query in esecuzione è il sql profiler.
proverò a guardare, grazie per l'interessamento.

>Però se mi permetti ti do' qualche suggerimento.

>Non so con che moli di dati lavori, ne quanto siano importanti
>i dati che tratti, ma non è sicuramente consigliabile fare update,
>tanto meno massinve mentre gli utenti lavorano....che fai gli
>cambi i dati sotto al naso a loro insaputa?
quello non è un problema perchè modifico i dati su loro richieste e comunque correggo campi che gli utenti non mi stanno modificando sicuramente

>
>Se poi devi fare operazioni di update che potrebbero avere effetti
>devastanti, potrebbe essere il caso di usare le transazioni in
>maniera esplicita per porter fare il rollback una volta verificato
>di aver sbagliato.

ottima osservazione, resta cmq anche cosi' il problema che se mi telefonano e mi dicono (esempio stupido) "annullami la bolla 61" lo faccio dopo mezz'ora mi richiamano
che non trovano più la bolla e quella da annullare era la settantuno (poi chiaramente sono io che ho capito male, utenti maledetti) io ormai il commit l'ho dato,no?
il top sarebbe una soluzione come quella che ho spiegato nel primo post
>
>//// Marcello C.

speedx Profilo | Junior Member

Bene se è quello il tipo di esigenza lo puoi fare in 2 modi.
1) cancellazione logica, un flag che dice che il record è cancellato e non viene visualizzato nella tua applicazione ma sul db rimane.
2) dare all'utente la possibilita di cancellare direttamente (fisicamente o logicamente)

Se permetti un cosiglio, fai un sistema di cancellazione logica sul sistema delle bolle e dai la possibilità di farlo all'utente.
Meno rogne per te, massima flessibilità
//// Marcello C.

stez Profilo | Newbie

grazie per i consigli e l'ssma pack... non lo conoscevo e mi sembra molto utile/comodo!

dato che funziona solo su sql 2000 a me non serve ma magari può essere utile ad altri utenti
ho trovato un tool per fare quello che chiedevo a inizio pagina
si chiama Sql Log Rescue della RedGate

ciao!

speedx Profilo | Junior Member

Scusa se mi intrometto, ma prima di spendere soldi in tool, per una questione di sto genere si possono seguire strade migliori.
La più banale che ti mi viene in mente, visto che le precedenti non ti sono piaciute è un backup tabellare.
Di tutto o solo dei record che vai a cancellare, per poi eventualmente reinserili.
Potresti addiritura fare tutto con una procedura...
Che prima salva il record che cancella in una tabella bak
e poi elimina il record dalla tabella.
Altra procedura fa il ripristino.
//// Marcello C.

stez Profilo | Newbie

si si l'ho scritto solo per informazione...(io budget sempre a zero) se a qualcuno poteva interessare,ho visto il video delle features e fà quello che chiedevo con un wizard molto comodo
quel tool una volta era a pagamento ora da quanto ho letto alla veloce dovrebbe essere gratuito e suppongo che basta registrarsi...(ma non ho provato)

io come soluzione adotto già la cancellazione logica per alcune tabelle di anagrafica classico flag visibile a true/false, dovrò estenderla a tutto appena possibile e per le mie query manuali di correzione farò un backup dei record interessati prima di lanciare i delete o update mi sembra la soluzione migliore per evitare di fare casini sul db di produzione
nessuna intromissione, anzi i consigli sono bene accetti
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