#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. |
#2
|
|||
|
|||
Lo que te esta diciendo es que estas intentando borrar un registro que esta bloqueado por otra transaccion
|
#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. |
#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 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|