Tabla bloqueada dentr de un atransaccion

29/01/2009 - 23:20 por Saga | Informe spam
Saludos!

Estoy usando VB6 SP5, ADO 2.7 y SQL Server 2000

Tengo una rutina semejante a los siguiente

Conecto al servidor

Begin transaccion

Borro registros de una tabla (DBConx.Execute SQL)

Borro registros de otra tabla (DBConx.Execute SQL)

Inserto registros nuevos en las tablas

Commit transaccion


El problema es que cuando se ejecuta (por decirlo asi) el primer DELETE para borrar
los registros la tabla se bloquea (locked), no dejando que otros usuarios entren a
areas especificas de la aplicacion que usa esa misma tabla. La tabla se desbloquea
cuando se ejecuta el "commit transaccion".

Estoy usando los metods BeginTrans y CommitTrans del objecto de conexion.

Probe abriendo la conexion al servidor usando ambos tipos de cursores: UseClient
y UseServer, pero el comportamiento es igual.

Este comportamiento es igual si uso ADO o RDO. Estoy buscando en Google,
pero hasta ahora no he encontrado anda. Alguien tendra experiencia con esto
para que me pueda orientar? Gracias! Saga

Soluciones Para Mejorar
www.reset.com.mx

Preguntas similare

Leer las respuestas

#1 Jose Mariano Alvarez
30/01/2009 - 03:46 | Informe spam
Debes borrar menos registros por vez y acceder por índices para que el resto
no se vea afectado.


Saludos


Ing. Jose Mariano Alvarez
SQLTotal Consulting

(Cambia los ceros por O y saca lo que sobra)

Este mensaje se proporciona tal como es, SIN GARANTIAS de ninguna clase. Por
favor tratar de indicar la versión de SQL y Service Pack. La inclusión de
(CREATE, INSERTS, etc.) para poder reproducir el problema también ayuda.










"Saga" wrote in message
news:uuZeP$
Saludos!

Estoy usando VB6 SP5, ADO 2.7 y SQL Server 2000

Tengo una rutina semejante a los siguiente

Conecto al servidor

Begin transaccion

Borro registros de una tabla (DBConx.Execute SQL)

Borro registros de otra tabla (DBConx.Execute SQL)

Inserto registros nuevos en las tablas

Commit transaccion


El problema es que cuando se ejecuta (por decirlo asi) el primer DELETE
para borrar
los registros la tabla se bloquea (locked), no dejando que otros usuarios
entren a
areas especificas de la aplicacion que usa esa misma tabla. La tabla se
desbloquea
cuando se ejecuta el "commit transaccion".

Estoy usando los metods BeginTrans y CommitTrans del objecto de conexion.

Probe abriendo la conexion al servidor usando ambos tipos de cursores:
UseClient
y UseServer, pero el comportamiento es igual.

Este comportamiento es igual si uso ADO o RDO. Estoy buscando en Google,
pero hasta ahora no he encontrado anda. Alguien tendra experiencia con
esto
para que me pueda orientar? Gracias! Saga

Soluciones Para Mejorar
www.reset.com.mx


Respuesta Responder a este mensaje
#2 Carlos Sacristan
30/01/2009 - 08:40 | Informe spam
Hay índices útiles para esas instrucciones DELETE? Con qué nivel de
aislamiento abres esa transacción?


Un saludo
-
www.navento.com
Servicios de Localización GPS


"Jose Mariano Alvarez" wrote:

Debes borrar menos registros por vez y acceder por ndices para que el resto
no se vea afectado.


Saludos


Ing. Jose Mariano Alvarez
SQLTotal Consulting

(Cambia los ceros por O y saca lo que sobra)

Este mensaje se proporciona tal como es, SIN GARANTIAS de ninguna clase. Por
favor tratar de indicar la versin de SQL y Service Pack. La inclusin de
(CREATE, INSERTS, etc.) para poder reproducir el problema tambin ayuda.










"Saga" wrote in message
news:uuZeP$
> Saludos!
>
> Estoy usando VB6 SP5, ADO 2.7 y SQL Server 2000
>
> Tengo una rutina semejante a los siguiente
>
> Conecto al servidor
>
> Begin transaccion
>
> Borro registros de una tabla (DBConx.Execute SQL)
>
> Borro registros de otra tabla (DBConx.Execute SQL)
>
> Inserto registros nuevos en las tablas
>
> Commit transaccion
>
>
> El problema es que cuando se ejecuta (por decirlo asi) el primer DELETE
> para borrar
> los registros la tabla se bloquea (locked), no dejando que otros usuarios
> entren a
> areas especificas de la aplicacion que usa esa misma tabla. La tabla se
> desbloquea
> cuando se ejecuta el "commit transaccion".
>
> Estoy usando los metods BeginTrans y CommitTrans del objecto de conexion.
>
> Probe abriendo la conexion al servidor usando ambos tipos de cursores:
> UseClient
> y UseServer, pero el comportamiento es igual.
>
> Este comportamiento es igual si uso ADO o RDO. Estoy buscando en Google,
> pero hasta ahora no he encontrado anda. Alguien tendra experiencia con
> esto
> para que me pueda orientar? Gracias! Saga
>
> Soluciones Para Mejorar
> www.reset.com.mx
>
>
Respuesta Responder a este mensaje
#3 Saga
30/01/2009 - 16:16 | Informe spam
Gracias por tu ayuda.

De hecho, el estatuto DELETE es algo asi:

delete from MiTabla where CteId=XYZ and Fecha=XYZ

Segun entiendo, debo de poner un indice en la campos CteId y Fecha?

Gacias de nuevo, Saga
Soluciones Para Mejorar
www.reset.com.mx



"Jose Mariano Alvarez" wrote in message
news:
Debes borrar menos registros por vez y acceder por índices para que el resto no se vea afectado.


Saludos


Ing. Jose Mariano Alvarez
SQLTotal Consulting

(Cambia los ceros por O y saca lo que sobra)

Este mensaje se proporciona tal como es, SIN GARANTIAS de ninguna clase. Por favor tratar de
indicar la versión de SQL y Service Pack. La inclusión de (CREATE, INSERTS, etc.) para poder
reproducir el problema también ayuda.










"Saga" wrote in message news:uuZeP$
Saludos!

Estoy usando VB6 SP5, ADO 2.7 y SQL Server 2000

Tengo una rutina semejante a los siguiente

Conecto al servidor

Begin transaccion

Borro registros de una tabla (DBConx.Execute SQL)

Borro registros de otra tabla (DBConx.Execute SQL)

Inserto registros nuevos en las tablas

Commit transaccion


El problema es que cuando se ejecuta (por decirlo asi) el primer DELETE para borrar
los registros la tabla se bloquea (locked), no dejando que otros usuarios entren a
areas especificas de la aplicacion que usa esa misma tabla. La tabla se desbloquea
cuando se ejecuta el "commit transaccion".

Estoy usando los metods BeginTrans y CommitTrans del objecto de conexion.

Probe abriendo la conexion al servidor usando ambos tipos de cursores: UseClient
y UseServer, pero el comportamiento es igual.

Este comportamiento es igual si uso ADO o RDO. Estoy buscando en Google,
pero hasta ahora no he encontrado anda. Alguien tendra experiencia con esto
para que me pueda orientar? Gracias! Saga

Soluciones Para Mejorar
www.reset.com.mx


Respuesta Responder a este mensaje
#4 Victor Koch
30/01/2009 - 17:53 | Informe spam
Hola Saga,

La tabla a la cual haces el DELETE tiene definido un índice único, porque si
no lo tiene el motor de SQL puede llegar a bloquear toda la tabla.

Un Saludo, Víctor Koch



"Saga" escribió en el mensaje
news:
Gracias por tu ayuda.

De hecho, el estatuto DELETE es algo asi:

delete from MiTabla where CteId=XYZ and Fecha=XYZ

Segun entiendo, debo de poner un indice en la campos CteId y Fecha?

Gacias de nuevo, Saga
Soluciones Para Mejorar
www.reset.com.mx



"Jose Mariano Alvarez"
wrote in message
news:
Debes borrar menos registros por vez y acceder por índices para que el
resto no se vea afectado.


Saludos


Ing. Jose Mariano Alvarez
SQLTotal Consulting

(Cambia los ceros por O y saca lo que sobra)

Este mensaje se proporciona tal como es, SIN GARANTIAS de ninguna clase.
Por favor tratar de indicar la versión de SQL y Service Pack. La
inclusión de (CREATE, INSERTS, etc.) para poder reproducir el problema
también ayuda.










"Saga" wrote in message
news:uuZeP$
Saludos!

Estoy usando VB6 SP5, ADO 2.7 y SQL Server 2000

Tengo una rutina semejante a los siguiente

Conecto al servidor

Begin transaccion

Borro registros de una tabla (DBConx.Execute SQL)

Borro registros de otra tabla (DBConx.Execute SQL)

Inserto registros nuevos en las tablas

Commit transaccion


El problema es que cuando se ejecuta (por decirlo asi) el primer DELETE
para borrar
los registros la tabla se bloquea (locked), no dejando que otros
usuarios entren a
areas especificas de la aplicacion que usa esa misma tabla. La tabla se
desbloquea
cuando se ejecuta el "commit transaccion".

Estoy usando los metods BeginTrans y CommitTrans del objecto de
conexion.

Probe abriendo la conexion al servidor usando ambos tipos de cursores:
UseClient
y UseServer, pero el comportamiento es igual.

Este comportamiento es igual si uso ADO o RDO. Estoy buscando en Google,
pero hasta ahora no he encontrado anda. Alguien tendra experiencia con
esto
para que me pueda orientar? Gracias! Saga

Soluciones Para Mejorar
www.reset.com.mx








Respuesta Responder a este mensaje
#5 Jesús
30/01/2009 - 21:42 | Informe spam
Terner un índice sobre esas dos columnas será bueno, pero

¿Y cuantos registros elimina?

Porque si elimina más de un cierto número (creo que son 9000) se producirá
un "lock escalation" que hará que se bloquee toda la tabla.

Jesús López
www.soldiq.com



"Saga" escribió en el mensaje de noticias
news:
Gracias por tu ayuda.

De hecho, el estatuto DELETE es algo asi:

delete from MiTabla where CteId=XYZ and Fecha=XYZ

Segun entiendo, debo de poner un indice en la campos CteId y Fecha?

Gacias de nuevo, Saga
Soluciones Para Mejorar
www.reset.com.mx



"Jose Mariano Alvarez"
wrote in message
news:
Debes borrar menos registros por vez y acceder por índices para que el
resto no se vea afectado.


Saludos


Ing. Jose Mariano Alvarez
SQLTotal Consulting

(Cambia los ceros por O y saca lo que sobra)

Este mensaje se proporciona tal como es, SIN GARANTIAS de ninguna clase.
Por favor tratar de indicar la versión de SQL y Service Pack. La
inclusión de (CREATE, INSERTS, etc.) para poder reproducir el problema
también ayuda.










"Saga" wrote in message
news:uuZeP$
Saludos!

Estoy usando VB6 SP5, ADO 2.7 y SQL Server 2000

Tengo una rutina semejante a los siguiente

Conecto al servidor

Begin transaccion

Borro registros de una tabla (DBConx.Execute SQL)

Borro registros de otra tabla (DBConx.Execute SQL)

Inserto registros nuevos en las tablas

Commit transaccion


El problema es que cuando se ejecuta (por decirlo asi) el primer DELETE
para borrar
los registros la tabla se bloquea (locked), no dejando que otros
usuarios entren a
areas especificas de la aplicacion que usa esa misma tabla. La tabla se
desbloquea
cuando se ejecuta el "commit transaccion".

Estoy usando los metods BeginTrans y CommitTrans del objecto de
conexion.

Probe abriendo la conexion al servidor usando ambos tipos de cursores:
UseClient
y UseServer, pero el comportamiento es igual.

Este comportamiento es igual si uso ADO o RDO. Estoy buscando en Google,
pero hasta ahora no he encontrado anda. Alguien tendra experiencia con
esto
para que me pueda orientar? Gracias! Saga

Soluciones Para Mejorar
www.reset.com.mx








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