2011-11-01 16 views
16

Mi collego a un server SQL senza l'autocommit. Se tutto ha successo, chiamo commit. Altrimenti, esco. Devo richiamare esplicitamente il rollback o verrà ripristinato automaticamente quando chiudiamo la connessione senza eseguire commit?Devo chiamare il rollback se non commetto mai?

Nel caso in cui sia importante, eseguo i comandi SQL dall'interno di proc sql in SAS.

AGGIORNAMENTO: Sembra che SAS possa chiamare il commit automaticamente alla fine del blocco sql proc se il rollback non viene chiamato. Quindi in questo caso il rollback sarebbe più che una buona pratica; sarebbe necessario.

Aggiornamento finale: Abbiamo finito per passare a un nuovo sistema, che mi sembra comportarsi in modo opposto rispetto al precedente. Al termine della transazione senza specificare il commit o il rollback, verrà eseguito il rollback. Quindi, il consiglio dato di seguito è sicuramente corretto: sempre esplicitamente commit o rollback.

risposta

7

E deve eseguire il rollback alla chiusura della connessione. L'enfasi su dovrebbe per un motivo :-)

Una corretta transazione e la gestione degli errori dovrebbero farti sempre commit quando le condizioni per il commit sono soddisfatte e il rollback quando non lo sono. Penso che sia una buona abitudine eseguire sempre il commit o il rollback quando è fatto e non fare affidamento su disconnect/etc. Tutto ciò che serve è un errore o una sessione errata/non chiusa per creare un incubo a catena di blocco per tutti :-)

+1

Che effetto avrebbe il pool di connessioni su questo? –

+0

Se gestisci le tue transazioni con le migliori pratiche in mente non dovresti preoccuparti, @JoeStefanelli :-) Cosa intendo - 1.) dentro e fuori la tua transazione il più velocemente possibile - fai solo ciò che è necessario al suo interno per mantenere l'ingombro e l'impatto di piccole dimensioni e 2.) corretta gestione degli errori e pulizia da impegnare quando fatto bene e rollback quando no. Non approverò un cambiamento in un ambiente che gestisco se viola questi due principi di base. Quindi il pooling delle connessioni non avrà alcun effetto. –

+0

Concordato che è meglio fare il tuo commit esplicito quando le cose sono fatte bene. La mia domanda era mirata più alla parte "*** dovrebbe *** arretrare sulla chiusura della connessione" della tua risposta. –

Problemi correlati