Foros del Web » Programando para Internet » ASP Clásico »

Hasta que punto puedo confiar en beginTrans y commitTrans?

Estas en el tema de Hasta que punto puedo confiar en beginTrans y commitTrans? en el foro de ASP Clásico en Foros del Web. Hola, actualmente estoy trabajando con beginTrans y commitTrans para garantizar la integridad de las tablas de mi base de datos al momento de hacer actualizaciones ...
  #1 (permalink)  
Antiguo 15/08/2005, 19:23
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Hasta que punto puedo confiar en beginTrans y commitTrans?

Hola, actualmente estoy trabajando con beginTrans y commitTrans para garantizar la integridad de las tablas de mi base de datos al momento de hacer actualizaciones que guardan alguna relación entre sí.
El esquema que sigo es más o menos similar a este:
Código:
ON ERROR RESUME NEXT
 
set conn = server.createObject("ADODB.connection")
	 conn.open strConn
	 conn.beginTrans
			conn.execute("insercion_de_registros")
			conn.execute("primera_actualizacion")
			conn.execute("segunda_actualizacion")
			if conn.errors.count = 0 then
			   conn.commitTrans
			else
			   'Muestro el mensaje de que se produjo un error al intentar			realizar	  la operación
			end if
	 conn.close()
set conn = nothing
Probandolo en local funciona correctamente, si detecta algún error en alguna de las tres ejecuciones que intenta hacer la conexion, me muestra el mensaje y no se realiza ninguna tarea.
Mis preguntas son dos:
1.-¿Se puede confiar en este método? o ¿tienen conocimiento de alguna falla que se le encuentra comunmente cuando se trabaja de esta forma?
2.-¿Cuales son los errores que detecta la coleccion errors del objeto conexion? ¿son solo errores de sintaxis u otros errores atribuibles al programador? o ¿también son errores como una caida en la conexion por x motivo, o una saturacion en las llamadas a la base de datos, etc?

Muchas gracias por su ayuda.
Saludos!.
__________________
Add, never Remove
  #2 (permalink)  
Antiguo 18/08/2005, 13:38
 
Fecha de Ingreso: febrero-2005
Mensajes: 1.015
Antigüedad: 19 años, 4 meses
Puntos: 6
Qué casualidad que haya visto este tópic, porque he mandado hace un rato un mensaje a bases de datos, http://www.forosdelweb.com/f21/varios-accesos-vez-base-datos-sql-server-2000-a-316956/, preguntando lo mismo.

Yo he probado a no ejecutar el COMMIT TRANSACTION, y la tabla que había sido alterada se veía "en blanco" e imposible de modificar. ¿Esta es una de sus limitaciones, que si a mitad de proceso falla lo que sea, nos quedamos sin las tablas implicadas (hasta que alguien después vuelva a hacer un "COMMIT TRANSACTION")?
  #3 (permalink)  
Antiguo 18/08/2005, 21:37
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Que buen post un_tio!, cuando decís se veía en blanco, también te referís a que la tabla queda sin poderse usar para leer registros? o solo para tareas de modificación, inserción y eliminación?. Con respecto a algo que mencionaste en el post, no estoy de acuerdo en que lo más grave que pueda llegar a pasar sin usar BEGIN TRANSACTION es que una tabla quede modificada y otra no, es decir, eso es gravísimo para mi gusto, y deberías hacerlo de esa manera, ya que como te comentaron en ese mismo post, hay formas de evitar ese posible error que comentas cuando no se ejecuta el COMMIT TRANSACTION. Si bien siempre uno va a realizar seguimientos a su base de datos para ver como anda todo, esos errores supongo yo que pueden ser fatales para la estructura general de la base de datos y deberían ser muy tenidos en cuenta por todos. Además, como lo corregirías? te irías fijando uno por uno los registros de cada una de las tablas que están relacionadas para ver si se corresponden entre sí? o lo harías de otra forma?
Un saludo un_tio, muy buen post como dije al principio.
Suerte!.
__________________
Add, never Remove
  #4 (permalink)  
Antiguo 19/08/2005, 16:19
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Hola!

Trans es lo mas seguro actualmente para esta clase de seguridad, de heho hasta los triggers estan basados en este concepto, lo que podria estar mal es la estructura que sigues...

la estructura debe ser como:

BEGIN TRANS

- execute SQL

if error then

ROLLBACK TRANS

end if

COMMIT

Esa seria la estructura, claro si nosotros no podemos bien el codigo, claro que cualquier procedimiento se vuelve inseguro.

Si ocurre un error y no pones el ROLLBACK siempre llega al COMMIT, pero claro con errores en la transaccion, las tablas son DESBLOQUEADAS pero con la posibilidad de malos datos.

Siempre lo he usado dentro de SP para hacerlo aun mas seguro, en mi opinion no veo el caso de usar trans desde ASP si sabes que dentro del servidor WEB puede haber un error independiente y entonces el TRANS no va a cumplir correctamente su cometido.

Recomiendo que eso sea completamente en el servidor de Bases de Datos, sino me parece que a algo seguro le estas agregando posibilidades de error.

Bueno, eso pienso.

Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #5 (permalink)  
Antiguo 20/08/2005, 22:30
 
Fecha de Ingreso: marzo-2005
Mensajes: 1.418
Antigüedad: 19 años, 2 meses
Puntos: 9
Toda la razón te doy Neuron. Con la estructura que estaba utilizando solamente se cerraba la transacción si no había errores, si no era así, esta no se cerraba, lo cual estoy seguro que es algo malo para hacer, pero no se cuales son las consecuencias de dejar un transacción abierta (si es que no se cierra automáticamente al irse de la página el usuario).
Y con respecto a lo de SP, también es cierto, te aseguras de una parte del asunto, pero no del todo de esa forma. Ahora, como se hace dentro de un SP? Tenés algún ejemplo?. Estoy empezando con esto de SQL Server y los procedimientos almacenados, y según leí, hay que tener cuidado con cuantos procedimientos se crea, por que en lugar de favorecer quizás terminen ocupando espacio al vicio y perjudiquen la aplicación.
Nos vemos!.
Suerte!.
__________________
Add, never Remove
  #6 (permalink)  
Antiguo 23/08/2005, 07:27
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Solo toma en cuenta que las transacciones hay que llevarlas en el servidor web y/o en el servidor de base de datos, ya que si quieres ir de uno al otro con sola una transacción, no funciona.

Se que es lógico pero no esta de más apuntarlo.

Si tengo una transacción en ASP con conn.beginTrans y dentro de ella llamó a un SP sin BEGIN TRANS, y en él algo falla, el ASP ni se enterá.

Saludos
  #7 (permalink)  
Antiguo 24/08/2005, 13:50
Avatar de Neuron_376  
Fecha de Ingreso: abril-2005
Mensajes: 1.051
Antigüedad: 19 años, 2 meses
Puntos: 2
Hola!

Un ejemplo basico es asi:
Código HTML:
CREATE PROCEDURE spNombre
	@spPrm varchar(255)
as
  begin

	BEGIN TRAN

		update tabla1 set Campo = @spPrm

		if @@ERROR <> 0 
		begin
			rollback tran
			return @@ERROR
		end
	
	COMMIT TRAN
	return 0
  end
GO
Suerte!!
__________________
NeuronaNet.com... la idea correcta.
http://www.NeuronaNet.com
  #8 (permalink)  
Antiguo 04/08/2006, 04:43
 
Fecha de Ingreso: abril-2004
Mensajes: 116
Antigüedad: 20 años, 2 meses
Puntos: 0
Tengo una pregunta con estos metodos:

Con un addnew y luego un update eso se consideraria dentro de las transacciones tambien o tienen q ser del tipo sql (insert, delete, update)?
  #9 (permalink)  
Antiguo 04/08/2006, 16:21
Avatar de Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 22 años, 4 meses
Puntos: 146
Como comenté en su momento, la transacción la puedes llevar en el ASP mediante el objeto connection (conn.beginTrans) o en la BD's con el BEGIN TRAN


Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 02:09.