Solucionado: Error en ORDS, ORA-00604, error occurred at recursive SQL level 1, ORA-01031 insufficient privileges
Un día cualquiera trabajando con Oracle APEX, cuando los usuarios me reportan problemas al acceder a los servicios REST.
Reviso el log del tomcat en el cual esta desplegado mi ORDS y me encuentro con el siguiente error:
Caused by: Error : 604, Position : 0, Sql = select nvl(h.items_per_page,m.items_per_page) items_per_page, t.etag_type, t.etag_query, h.source_type, cursor(select p.name, p.bind_variable_name, p.source_type,p.access_method, p.param_type from user_ords_parameters p where p.handler_id = h.id) parameters, h.source from user_ords_modules m, user_ords_templates t, user_ords_handlers h where m.status = 'PUBLISHED' and t.id = h.template_id and m.id = t.module_id and h.id = :1 , OriginalSql = select nvl(h.items_per_page,m.items_per_page) items_per_page, t.etag_type, t.etag_query, h.source_type, cursor(select p.name, p.bind_variable_name, p.source_type,p.access_method, p.param_type from user_ords_parameters p where p.handler_id = h.id) parameters, h.source from user_ords_modules m, user_ords_templates t, user_ords_handlers h where m.status = 'PUBLISHED' and t.id = h.template_id and m.id = t.module_id and h.id = ?,
Error Msg = ORA-00604: error occurred at recursive SQL level 1
ORA-01031: insufficient privileges
Los síntomas eran al acceder al cualquier servicios RESTFul y un mensaje de error 500 en la pantalla del ORDS.
Oracle me recomendaba para reproducir el error, ejecutar la siguiente consulta:
nvl(h.items_per_page,m.items_per_page) items_per_page,
t.etag_type,
t.etag_query,
h.source_type,
CURSOR (
SELECT
p.name,
p.bind_variable_name,
p.source_type,
p.access_method,
p.param_type
FROM
user_ords_parameters p
WHERE
p.handler_id = h.id
) parameters,
h.source
FROM
user_ords_modules m,
user_ords_templates t,
user_ords_handlers h
WHERE
m.status = 'PUBLISHED'
AND t.id = h.template_id
AND m.id = t.module_id
Al parecer todo se debia a un BUG no publicado Bug 27926255
El problema al parecer se produce al usar una version de ORDS no soportada con la DBCS, lo cual no me hacia sentido ya que venia mas de un año trabajando bien, sin embargo la workaround segerido era aplicar manualmente los siguientes permisos:
grant select on ORDS_METADATA.ORDS_PARAMETERS to <your_user>;
grant select on ORDS_METADATA.ORDS_SCHEMAS to <your_user>;
Ejecute la solución sugerida, reinicie el tomcat, espero esto no soluciono mi problema. Lo dejo aquí para que sea el primera paso por si a alguno le es de utilidad.
Buscando un poco mas me encontré con el mismo comportamiento reportado, que aplicaba para versión 19.1 de ORDS en adelante (19.4) sobre cualquier plataforma.
Mismos síntomas:
Error Msg = ORA-00604: error occurred at recursive SQL level
ORA-01031: insufficient privileges
En este caso se refiere el fabricante a otro error bug no publicado Bug 29049673. La nota indica que ha sido identificado como un defecto del producto.
La solución sugerida es que deshabilitar el parche (fix) para 20648883 en la sesión (que no me hace sentido) o a nivel del sistema (me solvento el problema).
alter session set "_fix_control"='20648883:OFF';
alter system set "_fix_control"='20648883:OFF';
Eureka, luego de aplicar estos cambios volvió a operar mi ORDS con normalidad.
Al parecer en futuras versiones este problema será corregido, espero que algún alma necesita le sirva esta entrada.
Muchas gracias. De no ser por esta nota, seguiríamos buscando la causa raíz vía el bug 2439386.1 que, en realidad, apunta a un problema con BD en nube cuya corrección es instalando una versión de ORDS más reciente, lo cual no era nuestro escenario.
ResponderEliminarque bueno haber podido ayudar
EliminarGracias, la solución es adecuada para la versión DB 19.19. Eres el mejor
ResponderEliminar