2011-11-01 9 views
16

Me estoy conectando a un servidor SQL sin utilizar autocommit. Si todo tiene éxito, llamo commit. De lo contrario, simplemente salgo. ¿Tengo que llamar de manera explícita la reversión, o se revertirá automáticamente cuando cerremos la conexión sin comprometer?¿Debo devolver la devolución si nunca me comprometo?

En caso de que importe, estoy ejecutando los comandos SQL desde el proc sql en SAS.

ACTUALIZACIÓN: Parece que SAS puede ejecutar la confirmación automáticamente al final del bloque proc sql si no se llama a la reversión. Entonces, en este caso, la reversión sería más que una buena práctica; sería necesario

Actualización final: Terminamos cambiando a un nuevo sistema, que me parece que se comporta de manera opuesta a la anterior. Al finalizar la transacción sin especificar el compromiso o el retroceso, se retrotraerá. Por lo tanto, los consejos que figuran a continuación son definitivamente correctos: siempre cometer o deshacer de forma explícita.

Respuesta

7

Es debería retroceder al cerrar la conexión. Énfasis en debe por una razón :-)

La correcta gestión de transacciones y errores debe tener siempre comprometido cuando se cumplen las condiciones para la confirmación y se revierten cuando no lo son. Creo que es un gran hábito comprometerse o retrotraerse siempre que haya terminado y no depender de la desconexión/etc. Todo lo que se necesita es un error o sesión incorrecta/no cerrada para crear una pesadilla de cadena de bloqueo para todos :-)

+1

¿Qué efecto tendría la agrupación de conexiones en esto? –

+0

Si gestiona sus transacciones teniendo en cuenta las mejores prácticas, no debería preocuparse, @JoeStefanelli :-) Lo que quiero decir - 1.) dentro y fuera de su transacción lo más rápido que pueda - solo haga lo que sea necesario dentro de ella para mantener la huella e impacto pequeños y 2.) Manejo y limpieza de errores adecuados para confirmar cuando se hace correctamente y deshacer cuando no. No aprobaré un cambio en un entorno que administro si viola estos dos principios básicos. Entonces, la agrupación de conexiones no tendrá efecto allí. –

+0

De acuerdo en que es mejor hacer su propio compromiso explícito cuando las cosas se hacen bien. Mi pregunta fue dirigida más a la parte "*** *** *** roll back on connection" de su respuesta. –

Cuestiones relacionadas