es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

No se puede obtener los datos de la fila del proveedor OLE DB. “El identificador de fila se refiere a una fila eliminada o una fila marcada para eliminar.”

Estamos ejecutando un procedimiento almacenado utilizando un trabajo de SQL Server.
En el procedimiento almacenado estamos utilizando un servidor vinculado para consultar una vista que se encuentra en un servidor remoto.

DECLARE @Messages TABLE (message_id uniqueidentifier, message_type nvarchar(5));
INSERT INTO @Messages(message_id, message_type) SELECT rowguid, msg_type FROM [dbo].[v_pending_messages]

v_pending_messages es un sinónimo que apunta a una vista en el servidor remoto (utilizando el servidor vinculado).
Más adelante en el mismo procedimiento almacenado estamos ejecutando la siguiente declaración de actualización:

UPDATE msg_board_w SET is_msg_transferred = 1
        FROM msg_board_w
            JOIN @Messages ON message_id = rowguid;

msg_board_w también es un sinónimo de una tabla en el servidor remoto (estamos utilizando nuevamente el mismo servidor vinculado)
Desafortunadamente, esta declaración de actualización está provocando que este trabajo falle “a veces” y arroje el siguiente mensaje de error:

No se pueden obtener los datos de la fila del proveedor OLE DB “SQLNCLI11” para el servidor vinculado “linkedserverxyz”. [SQLSTATE 42000] (Error 7346) El proveedor OLE DB “SQLNCLI11” para el servidor vinculado “linkedserverxyz” devolvió el mensaje “El identificador de fila hace referencia a una fila eliminada o marcada para eliminación”.

Algunas personas en línea están sugiriendo reemplazar el operador = por un operador LIKE en la declaración JOIN, lo cual es demasiado costoso para nuestro escenario. Ya lo probamos y tomó demasiado tiempo completarlo.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error sugiere que la fila a la que se está accediendo en la tabla msg_board_w ha sido eliminada o marcada para eliminación. Esto podría ocurrir debido a varias razones, como bloqueos o niveles de aislamiento de transacciones. Esto no está necesariamente relacionado con la condición de unión específica que se esté utilizando (= vs LIKE).

    Una posible solución podría ser agregar manejo de errores y lógica de reintento en el procedimiento almacenado para manejar estos errores intermitentes. Alternativamente, se debe evaluar la configuración de la base de datos y la infraestructura para identificar y solucionar cualquier problema subyacente de rendimiento o concurrencia que pueda estar causando estos errores.

Comments are closed.