La Transaccion bloquea una SELECT

15/06/2005 - 14:07 por Cesar | Informe spam
Tengo el siguiente problema y no me cuadra con lo que leo en la ayuda del SQL
Server 2000.
Hago el siguiente proceso en mi aplicacion:
1.- Me conecto la servidor con ADO.
2.- Inicio una transaccion.
3.- Ejecuto un insert en la TABLA 1.

Desde este mismo momento la TABLA 1 queda bloqueada completamente, y no
puedo hacer SELECT de ella, ni desde otras aplicaciones, ni desde el
Administrador Corporativo, ni desde en Analizador de consultas. Sólo se
libera cuando realizo el commit del transaccion.

Esta es la configuración de la conexión que estoy usando:
mObjADOConexion.CommandTimeout = iTimeOutProceso
mObjADOConexion.ConnectionString = pStrConexion
mObjADOConexion.ConnectionTimeout = iTimeOutConexion
mObjADOConexion.CursorLocation = adUseClient
mObjADOConexion.Properties("Prompt").Value = adPromptNever
Y he probado con casi todos los IsolationLevel.

¿Es normal esto en SQL Server 2000?.
Yo pensaba que la SELECT debería funcionar aunque no me apareciera el
registro insertado en la transacción, ya que aún no he realizado el commit.

Preguntas similare

Leer las respuestas

#6 Liliana Sorrentino
16/06/2005 - 20:09 | Informe spam
Hola Hermes,
Mientras no hagas un COMMIT, la tabla seguirá bloqueada, para la aplicación,
para el EM o el Analizador.
Si usás en otra conexión un SELECT con NOLOCK, como dice Don Roque, tenés
que poder verla.
De todas maneras, un INSERT que tarde 30 segundos... hay algo para cambiar
me parece
Si querés postear tu código, podemos verlo.
Saludos, Liliana.

"Hermes" escribió en el mensaje
news:


"Alejandro Mesa" wrote:

> Cesar,
>
> Esa tabla tiene primary key?

Sí Tiene una primary key, que es un Autonumérico.

> Cuanto tiempo estas manteniendo esa transaccion abierta?

En realidad, esta transacción dura unos 30 segundos, aunque podría
rediseñarla para que tardase menos. Aún así, no entiendo como un INSERT de


un
registro en una tabla dentro de una transacción puede bloquear la tabla
entera para IMPEDIR hacer SELECT sobre ella. La tabla tiene ahora sólo 3
registros, con el INSERT quiero añadir el cuarto ¿Puede esto influir?.


> Dices que probastes con casi todos los niveles de IsolationLevel, donde
> seteastes el nivel en la conexion o en el batch que ejecutas en sql


server?.

Lo añadí al código de Visual Basic, justo debajo de las otras lineas que
setean las propiedades de la conexión, por ejemplo:
mObjADOConexion.IsolationLevel = adXactCursorStability

Estoy muy agradecido por tu interés.
Muchas Gracias


>
>
> AMB
>
> "Cesar" wrote:
>
> > Tengo el siguiente problema y no me cuadra con lo que leo en la ayuda


del SQL
> > Server 2000.
> > Hago el siguiente proceso en mi aplicacion:
> > 1.- Me conecto la servidor con ADO.
> > 2.- Inicio una transaccion.
> > 3.- Ejecuto un insert en la TABLA 1.
> >
> > Desde este mismo momento la TABLA 1 queda bloqueada completamente, y


no
> > puedo hacer SELECT de ella, ni desde otras aplicaciones, ni desde el
> > Administrador Corporativo, ni desde en Analizador de consultas. Sólo


se
> > libera cuando realizo el commit del transaccion.
> >
> > Esta es la configuración de la conexión que estoy usando:
> > mObjADOConexion.CommandTimeout = iTimeOutProceso
> > mObjADOConexion.ConnectionString = pStrConexion
> > mObjADOConexion.ConnectionTimeout = iTimeOutConexion
> > mObjADOConexion.CursorLocation = adUseClient
> > mObjADOConexion.Properties("Prompt").Value = adPromptNever
> > Y he probado con casi todos los IsolationLevel.
> >
> > ¿Es normal esto en SQL Server 2000?.
> > Yo pensaba que la SELECT debería funcionar aunque no me apareciera el
> > registro insertado en la transacción, ya que aún no he realizado el


commit.
Respuesta Responder a este mensaje
#7 Cesar
16/06/2005 - 20:50 | Informe spam
Hola:
En la tabla tengo una primary key autonumerica.
Mi problema es que quiero abrir transacción, insertar registros, pero no
bloquear la tabla para selects.

¿Cómo?
Gracias...

"Alejandro Mesa" escribió:

Cesar,

Esa tabla tiene primary key?
Cuanto tiempo estas manteniendo esa transaccion abierta?
Dices que probastes con casi todos los niveles de IsolationLevel, donde
seteastes el nivel en la conexion o en el batch que ejecutas en sql server?.


AMB

"Cesar" wrote:

> Tengo el siguiente problema y no me cuadra con lo que leo en la ayuda del SQL
> Server 2000.
> Hago el siguiente proceso en mi aplicacion:
> 1.- Me conecto la servidor con ADO.
> 2.- Inicio una transaccion.
> 3.- Ejecuto un insert en la TABLA 1.
>
> Desde este mismo momento la TABLA 1 queda bloqueada completamente, y no
> puedo hacer SELECT de ella, ni desde otras aplicaciones, ni desde el
> Administrador Corporativo, ni desde en Analizador de consultas. Sólo se
> libera cuando realizo el commit del transaccion.
>
> Esta es la configuración de la conexión que estoy usando:
> mObjADOConexion.CommandTimeout = iTimeOutProceso
> mObjADOConexion.ConnectionString = pStrConexion
> mObjADOConexion.ConnectionTimeout = iTimeOutConexion
> mObjADOConexion.CursorLocation = adUseClient
> mObjADOConexion.Properties("Prompt").Value = adPromptNever
> Y he probado con casi todos los IsolationLevel.
>
> ¿Es normal esto en SQL Server 2000?.
> Yo pensaba que la SELECT debería funcionar aunque no me apareciera el
> registro insertado en la transacción, ya que aún no he realizado el commit.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida