Error DBIF_RSQL_SQL_ERROR. SAP RH.

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • educun
    Junior Member
    • may
    • 13

    #1

    Error DBIF_RSQL_SQL_ERROR. SAP RH.

    Hola a todos,
    tengo un problema con el acceso a una tabla.
    Lanzamos un programa, que on-line funciona y para pocos empleados en fondo tambien, pero cuando lo lanzamos para muchos empleado, nos da este dump.
    Errores tiempo ejec. DBIF_RSQL_SQL_ERROR
    Excepción CX_SY_OPEN_SQL_DB

    Notas para corregir errores
    Database error text........: "[1205] Transaction (Process ID 239) was
    deadlocked on lock resources with another process and has been chosen as the
    deadlock victim. Rerun the transaction."
    Internal call code.........: "[RSQL/DELE//IECI/HR_FM_TD07 ]"
    Please check the entries in the system log (Transaction SM21).

    Detalle del codigo.
    DELETE FROM /ieci/hr_fm_td07
    WHERE ejercicio = pnpbegda(4) AND
    version = p_versi AND
    pernr = pnppernr-low.


    A ver si me podeis ayudar, que estoy un poco estancado.

    Muchas gracias.
    Enrique.
  • ballan
    Senior Member
    • oct
    • 671

    #2
    Lo que te esta diciendo es que estas intentando borrar un registro que esta bloqueado por otra transaccion

    Comentario

    • educun
      Junior Member
      • may
      • 13

      #3
      Teoricamente no se esta lanzando nada mas que los jobs de ese programa.
      Y cada Job es de un empleado diferente, por lo que borra registros diferentes.

      A no ser que este equivocado, entiendo que pueden acceder a la tabla varios procesos a la vez a borrar diferentes registros.
      Por eso, no entiendo que se esten bloqueando registros.

      Puede ser cosa de la declaración de la tabla. Es que no se que mirar.

      Gracias.

      Comentario

      • ballan
        Senior Member
        • oct
        • 671

        #4
        Pues aparentemente eso es lo que te esta diciendo el dump

        Al ser procesos que corren en fondo es un poco complicado determinar quien lo bloquea pero se puede hacer

        Voy a dar por supuesto que el programa es Z y lo puedes modificar, de no ser asi tendxriamos que buscar otra opcion

        Antes del fragmento de codigo

        Detalle del codigo.
        DELETE FROM /ieci/hr_fm_td07
        WHERE ejercicio = pnpbegda(4) AND
        version = p_versi AND
        pernr = pnppernr-low.

        Tendrias que añadir un bucle como el siguiente

        data: lv_exit.
        do.
        if not lv_exit is initial.
        exit.
        endif.
        enddo.

        Asi cuando lanzes el proceso se quedaba en un bucle infinito

        Despues vas a la transaccion sm50 y te fijas en cual es el proceso correspondiente al programa que lanzaste (fijate en los procesos que tienen tu usuario) seleccionas el proceso y vas al menu
        Programa/modo -> programa -> debugging

        Te saltara el debugging justo en el bucle, si marcas la variable lv_exit con una 'X' o lo que sea saldras del bucle, situate justo antes del delete

        ANTES de hacer el delete vete a la transaccion SM12y ahi te apareceran todos los bloqueos existentes en el sistema

        Si ves que aparece un bloqueo para esa tabla podras ver algo mas de informacion adicional, a que hora se hizo, que usuario, etc y quiza pueda arrojarte algo de luz

        Comentario

        Trabajando...