Error en SQLServer 2000 que se resiste

com.genexus.GXRuntimeException: java.sql.SQLException: [SRV-DB1]
Could not continue scan with NOLOCK due to data movement

.....

Cada tanto (54 veces en los últimos 2 meses), nos pasa que una aplicación hecha en GeneXus / java, accediendo a SQL Server 2000, nos da el error de arriba. Esto es causado porque el programa hace un for each sobre una tabla, recorriéndola, pero no actualizándola (lo que genera un select con NOLOCK).

Al mismo tiempo la tabla es actualizada por otros usuarios, dando de alta y de baja registros de la misma.

Si otro proceso borra un registro, después que el programa declaró el cursor, pero antes de terminar de recorrerlo, se produce el error y cancela el programa.

Este error únicamente nos da en el cliente con mas usuarios....

Se "soluciona", sacando el NOLOCK (en Genexus seria actualizar algún atributo al recorrer, con lo cual bloquearía los registros que voy a actualizar), lo cual no sirve para estos casos.

Otra opción, seria cambiar el ISOLATION LEVEL, que a pesar de que tenemos READ COMMITED, el programa igual hace un READ UNCOMMITED, cuando se hace NOLOCK (esto se soluciona con SQLServer 2005!!).

Aquí hay una solución que ya probamos, pero no igual el error sigue produciéndose.

Si alguien lo ha sufrido y consiguió algo que funcione, les agadeceria muchísimo!.

Cualquier monedita sirve!.


Comentarios

Entradas más populares de este blog

Aplicación monolítica o distribuida?

La nefasta influencia del golero de Cacho Bochinche en el fútbol uruguayo

Funcionalidades de GeneXus que vale la pena conocer: DATE Constants.