运行Retrieve time from OTL(RCVOTLR) 请求时,出现错误RCV_OTL_GNRET_PROCESS_RUNNING

2024-03-19 06:58

本文主要是介绍运行Retrieve time from OTL(RCVOTLR) 请求时,出现错误RCV_OTL_GNRET_PROCESS_RUNNING,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

运行Retrieve time from OTL 请求时,出现错误RCV_OTL_GNRET_PROCESS_RUNNING

+---------------------------------------------------------------------------+
Purchasing: Version : 12.0.0Copyright (c) 1979, 1999, Oracle Corporation. All rights reserved.RCVOTLR module: Retrieve Time from OTL
+---------------------------------------------------------------------------+Current system time is 24-DEC-2013 12:58:45+---------------------------------------------------------------------------+**Starts**24-DEC-2013 12:58:45
**Ends**24-DEC-2013 12:58:46
Your request could not complete because an earlier request is still being processed. Either submit your request later, or contact your system administrator.+---------------------------------------------------------------------------+
Start of log messages from FND_FILE
+---------------------------------------------------------------------------+


查看了当前用户所有的REQUEST,没有running 的Request; 但另一个同事说他有在运行这个Request,尝试了下面的所有方法,但是都没有解决问题。

1.Cancel掉其他用户的Retrieve time from OTL
2.换用其他的Contingent worker创建新的OTL Timecard

3.给当前的Contingent worker创建新的采购订单。

查看当前的Request是对应的Executable 是RCVOTLR, 类型是PL/SQL Stored Procedure,对应的PL./SQL Package和Procedure 是RCV_HXT_GRP.RETRIEVE_TIMECARDS。

通过FND_NEW_MESSAGES得到的错误代码是RCV_OTL_GNRET_PROCESS_RUNNING

SELECT * 
FROM fnd_new_messages 
WHERE message_text LIKE 'Your request could not complete because an earlier request is still being processed%'

查看相应的procedure RCV_HXT_GRP.RETRIEVE_TIMECARDS,根据错误代码RCV_OTL_GNRET_PROCESS_RUNNING搜索,可以发现是在调用procedure HXC_INTEGRATION_LAYER_V1_GRP.Execute_Retrieval_Process时,发生异常并且异常代码类似 ‘ORA-20001: HXC_0017_GNRET_PROCESS_RUNNING’ 时抛出的。


        BEGINg_generic_start := SYSDATE;HXC_INTEGRATION_LAYER_V1_GRP.Execute_Retrieval_Process(P_Process          => 'Purchasing Retrieval Process',P_Transaction_code => NULL,P_Start_Date       => l_start_date,P_End_Date         => l_end_date,P_Incremental      => 'Y',P_Rerun_Flag       => 'N',P_Where_Clause     => l_where_clause,P_Scope            => 'DAY',P_Clusive          => 'EX');g_generic_stop := SYSDATE;g_generic_time := g_generic_time + (g_generic_stop - g_generic_start);EXCEPTIONWHEN OTHERS THENRCV_HXT_GRP.string( log_level => FND_LOG.LEVEL_EXCEPTION, module => l_log_head, message => 'Generic Retrieval failed: ' || SQLERRM);IF SQLERRM like 'ORA-20001: HXC_0013_GNRET_NO_BLD_BLKS%' ORSQLERRM like 'ORA-20001: HXC_0012_GNRET_NO_TIMECARDS%' THENG_CONC_LOG := G_CONC_LOG || FND_MESSAGE.get_string('PO', 'RCV_OTL_GNRET_NO_TIMECARDS')|| FND_GLOBAL.local_chr(10) || FND_GLOBAL.local_chr(10);RAISE SUCCESS_SHORT_CIRCUIT;ELSIF SQLERRM like 'ORA-20001: HXC_0017_GNRET_PROCESS_RUNNING%' THENG_CONC_LOG := G_CONC_LOG || FND_MESSAGE.get_string('PO', 'RCV_OTL_GNRET_PROCESS_RUNNING')|| FND_GLOBAL.local_chr(10) || FND_GLOBAL.local_chr(10);END IF;RAISE GENERIC_RETRIEVAL_FAILED;END;

HXC_INTEGRATION_LAYER_V1_GRP.Execute_Retrieval_Process 后面会调用HXC_GENERIC_RETRIEVAL_PKG.execute_retrieval_process来做实际的retrieve.

在HXC_GENERIC_RETRIEVAL_PKG.execute_retrieval_process搜索‘ORA-20001: HXC_0017_GNRET_PROCESS_RUNNING’,发现 exception为e_process_already_running,才会抛这个错误。

   EXCEPTIONWHEN e_retrieval_not_registeredTHENfnd_message.set_name ('HXC', 'HXC_0011_GNRET_NOT_REGISTERED');fnd_message.raise_error;WHEN e_process_already_runningTHENfnd_message.set_name ('HXC', 'HXC_0017_GNRET_PROCESS_RUNNING');fnd_message.raise_error;WHEN e_no_rangesTHENfnd_message.set_name ('HXC', 'HXC_0012_GNRET_NO_TIMECARDS');fnd_message.raise_error;WHEN OTHERS

往上看,可以看到当检查是否有运行的Retrieve 的Concurrennt request时候,返回false的时候就会抛出异常e_process_already_running

               IF NOT check_concurrency_ok(p_process_id             => g_retrieval_process_id,p_retrieval_process      => g_params.p_process,p_where_clause           => g_params.p_where_clause,p_unique_params          => g_params.p_unique_params)THENRAISE e_process_already_running;END IF;
这里g_params.p_process 是 RCV_HXT_GRP.RETRIEVE_TIMECARDS 传进来的 'Purchasing Retrieval Process',可以通过下面的SQL获取 p_process_id,这里获得的41

         SELECT rtr.retrieval_process_id, rtr.time_recipient_id,rtr.mapping_idFROM hxc_retrieval_processes rtrWHERE rtr.NAME = 'Purchasing Retrieval Process'
对于'Purchasing Retrieval Process',  function check_concurrency_ok 会通过Cursor 检查在hxc_transactions里有没有正在处理的'Purchasing Retrieval Process', 如果有,就会返回false,execute_retrieval_process就会抛出异常e_process_already_running. 否则,就会进行正常的Retrieve过程。

         CURSOR chk_transactionISSELECT transaction_idFROM hxc_transactions txWHERE transaction_process_id = p_process_idAND status = 'IN PROGRESS';

简单粗暴的方法就是直接删掉 hxc_transactions里面的这条记录,或者是把它的status update 成其他的东西, 但极有可能会造成timecard 的data corruption,最保险的方法是给Oracle提一个SR。 但由于我是个人的开发测试环境,毫不犹豫的删掉了它,重新提交Retrieve time from OTL,万事OK!

这篇关于运行Retrieve time from OTL(RCVOTLR) 请求时,出现错误RCV_OTL_GNRET_PROCESS_RUNNING的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/825147

相关文章

解决Nginx启动报错Job for nginx.service failed because the control process exited with error code问题

《解决Nginx启动报错Jobfornginx.servicefailedbecausethecontrolprocessexitedwitherrorcode问题》Nginx启... 目录一、报错如下二、解决原因三、解决方式总结一、报错如下Job for nginx.service failed bec

SpringBoot3匹配Mybatis3的错误与解决方案

《SpringBoot3匹配Mybatis3的错误与解决方案》文章指出SpringBoot3与MyBatis3兼容性问题,因未更新MyBatis-Plus依赖至SpringBoot3专用坐标,导致类冲... 目录SpringBoot3匹配MyBATis3的错误与解决mybatis在SpringBoot3如果

nginx配置错误日志的实现步骤

《nginx配置错误日志的实现步骤》配置nginx代理过程中,如果出现错误,需要看日志,可以把nginx日志配置出来,以便快速定位日志问题,下面就来介绍一下nginx配置错误日志的实现步骤,感兴趣的可... 目录前言nginx配置错误日志总结前言在配置nginx代理过程中,如果出现错误,需要看日志,可以把

python运用requests模拟浏览器发送请求过程

《python运用requests模拟浏览器发送请求过程》模拟浏览器请求可选用requests处理静态内容,selenium应对动态页面,playwright支持高级自动化,设置代理和超时参数,根据需... 目录使用requests库模拟浏览器请求使用selenium自动化浏览器操作使用playwright

SpringBoot监控API请求耗时的6中解决解决方案

《SpringBoot监控API请求耗时的6中解决解决方案》本文介绍SpringBoot中记录API请求耗时的6种方案,包括手动埋点、AOP切面、拦截器、Filter、事件监听、Micrometer+... 目录1. 简介2.实战案例2.1 手动记录2.2 自定义AOP记录2.3 拦截器技术2.4 使用Fi

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

在IntelliJ IDEA中高效运行与调试Spring Boot项目的实战步骤

《在IntelliJIDEA中高效运行与调试SpringBoot项目的实战步骤》本章详解SpringBoot项目导入IntelliJIDEA的流程,教授运行与调试技巧,包括断点设置与变量查看,奠定... 目录引言:为良驹配上好鞍一、为何选择IntelliJ IDEA?二、实战:导入并运行你的第一个项目步骤1

Python错误AttributeError: 'NoneType' object has no attribute问题的彻底解决方法

《Python错误AttributeError:NoneTypeobjecthasnoattribute问题的彻底解决方法》在Python项目开发和调试过程中,经常会碰到这样一个异常信息... 目录问题背景与概述错误解读:AttributeError: 'NoneType' object has no at

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)

《k8s上运行的mysql、mariadb数据库的备份记录(支持x86和arm两种架构)》本文记录在K8s上运行的MySQL/MariaDB备份方案,通过工具容器执行mysqldump,结合定时任务实... 目录前言一、获取需要备份的数据库的信息二、备份步骤1.准备工作(X86)1.准备工作(arm)2.手