Could not continue scan with NOLOCK due to data movement

27/06/2008 - 16:14 por Jorge Yanez | Informe spam
Hola a todos,

Me ha salido el siguiente error ejecutando una instrucción SQL:

Could not continue scan with NOLOCK due to data movement.

Una vez ya me ha sucedido el error, ¿se puede saber de algún modo qué
instrucción SQL movió los datos causando así el error en la ejecución de mi
instrucción SQL?

Supongo que si hubiera estado ejecutando una traza de la actividad del
servidor SQL podría haber detectado qué se estaba ejecutando sobre el
servidor en ese momento. Pero no es el caso, y tengo curiosidad por saber
qué ha pasado.

Un saludo, y gracias por adelantado.

Jorge.

Preguntas similare

Leer las respuestas

#1 Gux (MVP)
27/06/2008 - 17:19 | Informe spam
No menciona usted versión/edición de SQL Server ni los detalles de la
instrucción SQL que provoca el error cuando usa el hint NOLOCK.

Le pego la explicación de ese tipo de error por si le sirve de pista para
analizar el problema:

Error 601 Severity Level 12 Message
Text Could not continue scan with NOLOCK due to data movement.

Explanation: When scanning with the NOLOCK locking hint or with the
transaction
isolation level set to READ UNCOMMITTED, it is possible for the page at the
current
position of the scan to be deleted. When this happens, Microsoft® SQL
ServerT is not able to continue the scan.

Action: This error aborts the query. Either resubmit the query or remove the
NOLOCK locking hint.

Gustavo Larriera, Microsoft MVP
http://www.linkedin.com/in/gustavolarriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Jorge Yanez" wrote:

Hola a todos,

Me ha salido el siguiente error ejecutando una instrucción SQL:

Could not continue scan with NOLOCK due to data movement.

Una vez ya me ha sucedido el error, ¿se puede saber de algún modo qué
instrucción SQL movió los datos causando así el error en la ejecución de mi
instrucción SQL?

Supongo que si hubiera estado ejecutando una traza de la actividad del
servidor SQL podría haber detectado qué se estaba ejecutando sobre el
servidor en ese momento. Pero no es el caso, y tengo curiosidad por saber
qué ha pasado.

Un saludo, y gracias por adelantado.

Jorge.



Respuesta Responder a este mensaje
#2 Jorge Yanez
27/06/2008 - 17:53 | Informe spam
Hola Gustavo, gracias por su respuesta.

El error se produce en un servidor SQL Server 2005 Enterprise Edition. El
error realmente le ocurre a un cliente de mi empresa mientras ejecuta una
aplicación en la que se suceden cientos de SELECTS, INSERTS y UPDATES, si
bien por el mensaje de error que me envía el cliente supongo que es al hacer
un INSERT que toma los datos a insertar de una consulta SELECT. De todos
modos apostaría a que el problema no está en la query, sino que se hace un
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

antes de empezar toda la ejecución de SQL statements. Este código lo he
heredado por lo que no sé si está 100% justificado el uso del READ
UNCOMMITED, aunque supongo que habría algún motivo razonable para ello en su
momento (tal vez suponga demasiado). Lo que imagino que está sucediendo es
que mientras se hace el SELECT que acompaña al INSERT, alguna transacción
está modificando los datos que lee el SELECT, generando así el error. Por
este motivo lo que me interesa realmente es conocer si al producirse este
error hay algún log de errores o similar donde pueda encontrar quién o cómo
se modificaron los datos que se estaban intentando leer.

Ah, el cliente no tenía nigún SP de SQL Server 2005 instalado, aunque le he
recomendado que se instale el SP2.

Un saludo,

Jorge.

"Gux (MVP)" escribió en el mensaje
news:
No menciona usted versión/edición de SQL Server ni los detalles de la
instrucción SQL que provoca el error cuando usa el hint NOLOCK.

Le pego la explicación de ese tipo de error por si le sirve de pista para
analizar el problema:

Error 601 Severity Level 12 Message
Text Could not continue scan with NOLOCK due to data movement.

Explanation: When scanning with the NOLOCK locking hint or with the
transaction
isolation level set to READ UNCOMMITTED, it is possible for the page at
the
current
position of the scan to be deleted. When this happens, Microsoft® SQL
ServerT is not able to continue the scan.

Action: This error aborts the query. Either resubmit the query or remove
the
NOLOCK locking hint.

Gustavo Larriera, Microsoft MVP
http://www.linkedin.com/in/gustavolarriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Jorge Yanez" wrote:

Hola a todos,

Me ha salido el siguiente error ejecutando una instrucción SQL:

Could not continue scan with NOLOCK due to data movement.

Una vez ya me ha sucedido el error, ¿se puede saber de algún modo qué
instrucción SQL movió los datos causando así el error en la ejecución de
mi
instrucción SQL?

Supongo que si hubiera estado ejecutando una traza de la actividad del
servidor SQL podría haber detectado qué se estaba ejecutando sobre el
servidor en ese momento. Pero no es el caso, y tengo curiosidad por saber
qué ha pasado.

Un saludo, y gracias por adelantado.

Jorge.



Respuesta Responder a este mensaje
#3 Gux (MVP)
27/06/2008 - 21:25 | Informe spam
Si quiere saber lo que sucedió al momento del error deberá usted iniciar una
traza de SQL Profiler y esperar a que el error se produzca para poder
analizar.

Como dice en mi mensaje, las alternativas para solucionar el problema son:
evitar el uso de NOLOCK (o usar isolation Read Commited). Otra forma de
tratar el error es volver a ejecutar la consulta, ya que dicho error canceló
la consulta problemática.

Gustavo Larriera, Microsoft MVP
http://www.linkedin.com/in/gustavolarriera
Este mensaje se proporciona tal como es, sin garantías de ninguna clase.



"Jorge Yanez" wrote:

Hola Gustavo, gracias por su respuesta.

El error se produce en un servidor SQL Server 2005 Enterprise Edition. El
error realmente le ocurre a un cliente de mi empresa mientras ejecuta una
aplicación en la que se suceden cientos de SELECTS, INSERTS y UPDATES, si
bien por el mensaje de error que me envía el cliente supongo que es al hacer
un INSERT que toma los datos a insertar de una consulta SELECT. De todos
modos apostaría a que el problema no está en la query, sino que se hace un
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

antes de empezar toda la ejecución de SQL statements. Este código lo he
heredado por lo que no sé si está 100% justificado el uso del READ
UNCOMMITED, aunque supongo que habría algún motivo razonable para ello en su
momento (tal vez suponga demasiado). Lo que imagino que está sucediendo es
que mientras se hace el SELECT que acompaña al INSERT, alguna transacción
está modificando los datos que lee el SELECT, generando así el error. Por
este motivo lo que me interesa realmente es conocer si al producirse este
error hay algún log de errores o similar donde pueda encontrar quién o cómo
se modificaron los datos que se estaban intentando leer.

Ah, el cliente no tenía nigún SP de SQL Server 2005 instalado, aunque le he
recomendado que se instale el SP2.

Un saludo,

Jorge.

"Gux (MVP)" escribió en el mensaje
news:
> No menciona usted versión/edición de SQL Server ni los detalles de la
> instrucción SQL que provoca el error cuando usa el hint NOLOCK.
>
> Le pego la explicación de ese tipo de error por si le sirve de pista para
> analizar el problema:
>
> Error 601 Severity Level 12 Message
> Text Could not continue scan with NOLOCK due to data movement.
>
> Explanation: When scanning with the NOLOCK locking hint or with the
> transaction
> isolation level set to READ UNCOMMITTED, it is possible for the page at
> the
> current
> position of the scan to be deleted. When this happens, Microsoft® SQL
> ServerT is not able to continue the scan.
>
> Action: This error aborts the query. Either resubmit the query or remove
> the
> NOLOCK locking hint.
>
> Gustavo Larriera, Microsoft MVP
> http://www.linkedin.com/in/gustavolarriera
> Este mensaje se proporciona tal como es, sin garantías de ninguna clase.
>
>
>
> "Jorge Yanez" wrote:
>
>> Hola a todos,
>>
>> Me ha salido el siguiente error ejecutando una instrucción SQL:
>>
>> Could not continue scan with NOLOCK due to data movement.
>>
>> Una vez ya me ha sucedido el error, ¿se puede saber de algún modo qué
>> instrucción SQL movió los datos causando así el error en la ejecución de
>> mi
>> instrucción SQL?
>>
>> Supongo que si hubiera estado ejecutando una traza de la actividad del
>> servidor SQL podría haber detectado qué se estaba ejecutando sobre el
>> servidor en ese momento. Pero no es el caso, y tengo curiosidad por saber
>> qué ha pasado.
>>
>> Un saludo, y gracias por adelantado.
>>
>> Jorge.
>>
>>
>>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida