运行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

相关文章

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

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

SpringBoot排查和解决JSON解析错误(400 Bad Request)的方法

《SpringBoot排查和解决JSON解析错误(400BadRequest)的方法》在开发SpringBootRESTfulAPI时,客户端与服务端的数据交互通常使用JSON格式,然而,JSON... 目录问题背景1. 问题描述2. 错误分析解决方案1. 手动重新输入jsON2. 使用工具清理JSON3.

MyBatis Plus 中 update_time 字段自动填充失效的原因分析及解决方案(最新整理)

《MyBatisPlus中update_time字段自动填充失效的原因分析及解决方案(最新整理)》在使用MyBatisPlus时,通常我们会在数据库表中设置create_time和update... 目录前言一、问题现象二、原因分析三、总结:常见原因与解决方法对照表四、推荐写法前言在使用 MyBATis

Java -jar命令如何运行外部依赖JAR包

《Java-jar命令如何运行外部依赖JAR包》在Java应用部署中,java-jar命令是启动可执行JAR包的标准方式,但当应用需要依赖外部JAR文件时,直接使用java-jar会面临类加载困... 目录引言:外部依赖JAR的必要性一、问题本质:类加载机制的限制1. Java -jar的默认行为2. 类加

如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socket read timed out的问题

《如何解决Druid线程池Cause:java.sql.SQLRecoverableException:IO错误:Socketreadtimedout的问题》:本文主要介绍解决Druid线程... 目录异常信息触发场景找到版本发布更新的说明从版本更新信息可以看到该默认逻辑已经去除总结异常信息触发场景复

Python struct.unpack() 用法及常见错误详解

《Pythonstruct.unpack()用法及常见错误详解》struct.unpack()是Python中用于将二进制数据(字节序列)解析为Python数据类型的函数,通常与struct.pa... 目录一、函数语法二、格式字符串详解三、使用示例示例 1:解析整数和浮点数示例 2:解析字符串示例 3:解

java -jar命令运行 jar包时运行外部依赖jar包的场景分析

《java-jar命令运行jar包时运行外部依赖jar包的场景分析》:本文主要介绍java-jar命令运行jar包时运行外部依赖jar包的场景分析,本文给大家介绍的非常详细,对大家的学习或工作... 目录Java -jar命令运行 jar包时如何运行外部依赖jar包场景:解决:方法一、启动参数添加: -Xb

CentOS 7 YUM源配置错误的解决方法

《CentOS7YUM源配置错误的解决方法》在使用虚拟机安装CentOS7系统时,我们可能会遇到YUM源配置错误的问题,导致无法正常下载软件包,为了解决这个问题,我们可以替换YUM源... 目录一、备份原有的 YUM 源配置文件二、选择并配置新的 YUM 源三、清理旧的缓存并重建新的缓存四、验证 YUM 源

eclipse如何运行springboot项目

《eclipse如何运行springboot项目》:本文主要介绍eclipse如何运行springboot项目问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目js录当在eclipse启动spring boot项目时出现问题解决办法1.通过cmd命令行2.在ecl

python web 开发之Flask中间件与请求处理钩子的最佳实践

《pythonweb开发之Flask中间件与请求处理钩子的最佳实践》Flask作为轻量级Web框架,提供了灵活的请求处理机制,中间件和请求钩子允许开发者在请求处理的不同阶段插入自定义逻辑,实现诸如... 目录Flask中间件与请求处理钩子完全指南1. 引言2. 请求处理生命周期概述3. 请求钩子详解3.1