Sobre transacciones

04/10/2004 - 22:19 por El principiante | Informe spam
Hola.

En un form de una aplicacion necesito hacer una validacion en la base de
datos pero requiero que determinadas tablas esten bloqueadas para poder
hacerla. Pense ponerla en la misma transaccion de salvar los datos pero la
pregunta es como puedo bloquear tablas especificas que no seran modificadas
en la transaccion ?

Transacciones manuales ? como se hace ?

Preguntas similare

Leer las respuestas

#1 Tinoco
04/10/2004 - 23:53 | Informe spam
Hola

Con estas lineas se puede bloquear algunos registros o
toda una tabla. Se puede cambiar el tipo de bloqueo segun
se necesite, busca en los BOL [Locking Hints].

BEGIN TRANS
SELECT nombre, codigo FROM empleados WITH (NOLOCK)
GO

Hermilson T.
Colombia

Hola.

En un form de una aplicacion necesito hacer una


validacion en la base de
datos pero requiero que determinadas tablas esten


bloqueadas para poder
hacerla. Pense ponerla en la misma transaccion de salvar


los datos pero la
pregunta es como puedo bloquear tablas especificas que


no seran modificadas
en la transaccion ?

Transacciones manuales ? como se hace ?
Respuesta Responder a este mensaje
#2 Salvador Ramos
05/10/2004 - 11:23 | Informe spam
Hola:

Lo que quieres hacer se puede conseguir modificando los niveles de
aislamiento, bien de forma genérica o bien para las operaciones que vas a
ejecutar. El problema es que puede perjudicar seriamente al rendimiento, ya
que el resto de usuarios quedarán a la espera para realizar operaciones.

Puedes ampliar información en la ayuda buscando por 'niveles de
aislamiento'. Aunque también sería interesante que explicases con más
detalle el problema, y entre todos busquemos una solución con el mejor
rendimiento posible.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿ Te interesa participar en las reuniones
del grupo de Usuarios de SQL Server y .NET ?
Se harán en levante de España, (Alicante o Murcia)?

"El principiante" escribió en el mensaje
news:
Hola.

En un form de una aplicacion necesito hacer una validacion en la base de
datos pero requiero que determinadas tablas esten bloqueadas para poder
hacerla. Pense ponerla en la misma transaccion de salvar los datos pero la
pregunta es como puedo bloquear tablas especificas que no seran


modificadas
en la transaccion ?

Transacciones manuales ? como se hace ?


Respuesta Responder a este mensaje
#3 El principiante
05/10/2004 - 13:28 | Informe spam

Puedes ampliar información en la ayuda buscando por 'niveles de
aislamiento'. Aunque también sería interesante que explicases con más
detalle el problema, y entre todos busquemos una solución con el mejor
rendimiento posible.





Muchas gracias a todos por sus respuestas.

Sobre el tema especifico es que necesito que por la gran concurrencia
durante la transacción ningún otro usuario debe poder modificarme
determinadas tablas que sirven para un cálculo (no son grandes simplemente
es que no debe concurrir una transaccion de otro usuario que las actualice
hasta que no termine la transacción). Es algo similar por ejemplo al
tipico caso de controlar manualmente un numero de documento consecutivo,
dentro de la transaccion debo evitar que alguien lo vaya a poder modificar
justo antes de terminar la transaccion que salva el documento la cual puede
incluir actualizar varias tablas.

Es para muchos usuarios (unos 100 o mas) concurrentes que registran
documentos simultaneamente. De ahi la preocupacion por la concurrencia.
Respuesta Responder a este mensaje
#4 Salvador Ramos
05/10/2004 - 13:50 | Informe spam
Pues en el caso que indicas, precisamente debido a los usuarios concurrentes
que vas a tener, y para evitar cuellos de botella, debes tener las filas
(mucho mejor bloqueo de filas que de tablas para evitar bloquear también a
los usuarios que quieran acceder a otra fila de la misma tabla) bloqueadas
el menor tiempo posible.

Una solución puede ser un procedimiento almacenado con una transacción, y
que al principio haga un update sobre esa tabla, haga el resto de
operaciones y finalice. Así al hacer un update sobre la tabla quedará
bloqueada la fila a actualizar hasta que finalice la transacción. En este
caso sería suficiente el nivelde aislamiento serializable, que es el que
utiliza SQL Server por defecto.

También quiero comentarte que lo que he indicado es una solución genérica, y
que habría que estudiar más a fondo el problema. Si no es suficiente con
esta explicación, sería interesante que enviases las sentencias DDL y nos
contases el proceso a realizar.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿ Te interesa participar en las reuniones
del grupo de Usuarios de SQL Server y .NET ?
Se harán en levante de España, (Alicante o Murcia)?

"El principiante" escribió en el mensaje
news:
>
> Puedes ampliar información en la ayuda buscando por 'niveles de
> aislamiento'. Aunque también sería interesante que explicases con más
> detalle el problema, y entre todos busquemos una solución con el mejor
> rendimiento posible.
>


Muchas gracias a todos por sus respuestas.

Sobre el tema especifico es que necesito que por la gran concurrencia
durante la transacción ningún otro usuario debe poder modificarme
determinadas tablas que sirven para un cálculo (no son grandes simplemente
es que no debe concurrir una transaccion de otro usuario que las actualice
hasta que no termine la transacción). Es algo similar por ejemplo al
tipico caso de controlar manualmente un numero de documento consecutivo,
dentro de la transaccion debo evitar que alguien lo vaya a poder modificar
justo antes de terminar la transaccion que salva el documento la cual


puede
incluir actualizar varias tablas.

Es para muchos usuarios (unos 100 o mas) concurrentes que registran
documentos simultaneamente. De ahi la preocupacion por la concurrencia.





Respuesta Responder a este mensaje
#5 Salvador Ramos
05/10/2004 - 13:52 | Informe spam
También te voy a recomendar el libro "A fondo SQL Server 2000" de Kalen
Delaney, allí tienes una explicación clara y detallada del tema (la que más
me ha gustado de las que he leído), que seguro que te aclarará muchas de tus
dudas y te dará una visión para afrontar mejor tu problema.

Un saludo
Salvador Ramos
Murcia - España
[Microsoft MVP SQL Server]
www.helpdna.net
¿ Te interesa participar en las reuniones
del grupo de Usuarios de SQL Server y .NET ?
Se harán en levante de España, (Alicante o Murcia)?

"El principiante" escribió en el mensaje
news:
>
> Puedes ampliar información en la ayuda buscando por 'niveles de
> aislamiento'. Aunque también sería interesante que explicases con más
> detalle el problema, y entre todos busquemos una solución con el mejor
> rendimiento posible.
>


Muchas gracias a todos por sus respuestas.

Sobre el tema especifico es que necesito que por la gran concurrencia
durante la transacción ningún otro usuario debe poder modificarme
determinadas tablas que sirven para un cálculo (no son grandes simplemente
es que no debe concurrir una transaccion de otro usuario que las actualice
hasta que no termine la transacción). Es algo similar por ejemplo al
tipico caso de controlar manualmente un numero de documento consecutivo,
dentro de la transaccion debo evitar que alguien lo vaya a poder modificar
justo antes de terminar la transaccion que salva el documento la cual


puede
incluir actualizar varias tablas.

Es para muchos usuarios (unos 100 o mas) concurrentes que registran
documentos simultaneamente. De ahi la preocupacion por la concurrencia.





Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida