Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Begin transaction tabla en particular?

Estas en el tema de Begin transaction tabla en particular? en el foro de SQL Server en Foros del Web. Hola Hay alguna manera de indicar q haga un Begin transaction pero de una tabla en espcífco y no de toda la bbdd? Esto es ...
  #1 (permalink)  
Antiguo 23/03/2011, 12:06
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 0
Begin transaction tabla en particular?

Hola
Hay alguna manera de indicar q haga un Begin transaction pero de una tabla en espcífco y no de toda la bbdd? Esto es pq. quiero bloquear dos tablas pero el resto no para q los users puedan seguir trabajando con ellas
Gracias
  #2 (permalink)  
Antiguo 24/03/2011, 15:01
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Begin transaction tabla en particular?

Utiliza ROWLOCK por cada tabla que vayas a actualizar, claro esta, con su correspondiente BEGIN TRAN, para que puedas hacer un ROLLBACK en caso necesario.

Recuerda que el tiempo de la transaccion, debe ser lo mas corto posible.
__________________
MCTS Isaias Islas
  #3 (permalink)  
Antiguo 24/03/2011, 17:34
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Begin transaction tabla en particular?

ME he mirado el tema de los bloqueos: http://sql-server-performance.com/Co...62/111966.aspx

Este sería un ejemplo para bloquear tabla
INSERT INTO TableA WITH (TABLOCK) ( propertyName )
SELECT DISTINCT propertyName from TableB
WHERE propertyName NOT IN ( SELECT propertyName FROM TableA )

No lo h eprobado...

Pero si pongo una transacción por el principio... no estoy bloqueando toda la bbdd de nuevo y no solo la tabla?
  #4 (permalink)  
Antiguo 24/03/2011, 18:52
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Begin transaction tabla en particular?

En lugar de bloquear TODA LA TABLA, bloquea por registro ROWLOCK, pero insisto, debes contemplar el begin tran, porque de lo contrario, ¿como harias tu rollback en caso de tener la necesidad?
__________________
MCTS Isaias Islas
  #5 (permalink)  
Antiguo 25/03/2011, 03:34
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Begin transaction tabla en particular?

"En lugar de bloquear TODA LA TABLA, bloquea por registro ROWLOCK, pero insisto, debes contemplar el begin tran, porque de lo contrario, ¿como harias tu rollback en caso de tener la necesidad?"

Me voy ha explicar lo mejor que pueda...

Lo que quiero es bloquear toda la tabla pq. es una tabla de cabecera de ftas y detalle de ftas
Si hay error al insertar en detalle o cabecera no quiero que haga nada con ninguna de esas tablas y dejarla como estaba para que el próximo user q inserte se la encuentre como si no hubiera pasado nada. Si bloqueo solo el registro no me funcionaría así entiendo... no?

PERO el resto de tablas de la base de datos se deben poder seguir usando (socios, nominas, etc..) por eso quiero bloquear solo una tabla. Entiendo (no lo se he?) que si hago begin trans me bloqueará toda la base de datos y no salvaré mi problema... me equivoco? Hay manera de decirle 'inicia transacción pero solo de esta tabla y no me bloquees la base de datos'... he leido algo de isolated pero esto se me escapa a mi conocimiento ya

Gracias
  #6 (permalink)  
Antiguo 25/03/2011, 07:02
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Begin transaction tabla en particular?

Quizas entendi mal.

pero cuando yo realizo un procedimiento de insert de cabezera o detalle, me resguardo con un
BEGIN TRAN...
hago el insert completo y si no tengo error alguno, le doy un Commit, en el caso de que tenga un error, lo rescato y le doy un ROLLBACK, asi las tablas vuelven a quedar como estaban antes de realizar las transacciones que estan dentro del BEGIN TRAN...
Si es eso lo que quieres, he ahi tu respuesta...
  #7 (permalink)  
Antiguo 25/03/2011, 08:01
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Begin transaction tabla en particular?

Garilax ... si pero BEGIN TRAN... bloquea toda la base de datos (juraría) y yo solo quiero hacer un BEGIN TRAN a nivel de tabla para que el resto de usuarios si hay que insertar 1000 facturas con sus detalles puedan seguir trabajando y no esperar a que acabe la sql del BEGIN TRAN...
  #8 (permalink)  
Antiguo 25/03/2011, 13:06
 
Fecha de Ingreso: julio-2010
Mensajes: 90
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Begin transaction tabla en particular?

En ese caso no se me ocurre otra cosa que darle un (nolock) a las tablas con las cuales seguiras trabajando...
pero creo que no seria efectivo al momento de aplicarlo en un software esperando 10 minutos a que se suban X registros para uqe el resto del software pueda seguir trabajando con las tablas...
:/
  #9 (permalink)  
Antiguo 25/03/2011, 13:27
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Begin transaction tabla en particular?

De acuerdo con Garilax, el BEGIN TRAN no BLOQUEA TODA LA BASE, simplemente ABRE UNA TRANSACCION en linea.

Si hay mas transacciones por completarse, estas, entran en una "cola de espera".

La logica de las transacciones, es que estan deben ser completadas en el tiempo mas corto posible.
__________________
MCTS Isaias Islas
  #10 (permalink)  
Antiguo 28/03/2011, 12:41
 
Fecha de Ingreso: enero-2008
Mensajes: 229
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Begin transaction tabla en particular?

"De acuerdo con Garilax, el BEGIN TRAN no BLOQUEA TODA LA BASE, simplemente ABRE UNA TRANSACCION en linea.".....

No bloquean toda la BBDD?.. hubiera jurado que si.. pero si bloquea la tabla sin necesidad del TABLOCK donde se realiza la transacción no?
  #11 (permalink)  
Antiguo 28/03/2011, 13:53
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Respuesta: Begin transaction tabla en particular?

Se debe comprender que cuando se hace uso del TABLOCK, se bloque AL TABLA(s) POR COMPLETO y hasta en tanto, no se quite dicha restriccion, nadie mas, pero nadie mas, puede hacer un simple SELECT sobre dichas tablas.

Saludos
__________________
MCTS Isaias Islas

Etiquetas: tablas, transacciones
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




La zona horaria es GMT -6. Ahora son las 13:59.