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

相关文章

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

MySQL中时区参数time_zone解读

《MySQL中时区参数time_zone解读》MySQL时区参数time_zone用于控制系统函数和字段的DEFAULTCURRENT_TIMESTAMP属性,修改时区可能会影响timestamp类型... 目录前言1.时区参数影响2.如何设置3.字段类型选择总结前言mysql 时区参数 time_zon

Spring常见错误之Web嵌套对象校验失效解决办法

《Spring常见错误之Web嵌套对象校验失效解决办法》:本文主要介绍Spring常见错误之Web嵌套对象校验失效解决的相关资料,通过在Phone对象上添加@Valid注解,问题得以解决,需要的朋... 目录问题复现案例解析问题修正总结  问题复现当开发一个学籍管理系统时,我们会提供了一个 API 接口去

Java后端接口中提取请求头中的Cookie和Token的方法

《Java后端接口中提取请求头中的Cookie和Token的方法》在现代Web开发中,HTTP请求头(Header)是客户端与服务器之间传递信息的重要方式之一,本文将详细介绍如何在Java后端(以Sp... 目录引言1. 背景1.1 什么是 HTTP 请求头?1.2 为什么需要提取请求头?2. 使用 Spr

Python 标准库time时间的访问和转换问题小结

《Python标准库time时间的访问和转换问题小结》time模块为Python提供了处理时间和日期的多种功能,适用于多种与时间相关的场景,包括获取当前时间、格式化时间、暂停程序执行、计算程序运行时... 目录模块介绍使用场景主要类主要函数 - time()- sleep()- localtime()- g

解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题

《解决mybatis-plus-boot-starter与mybatis-spring-boot-starter的错误问题》本文主要讲述了在使用MyBatis和MyBatis-Plus时遇到的绑定异常... 目录myBATis-plus-boot-starpythonter与mybatis-spring-b

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

如何在一台服务器上使用docker运行kafka集群

《如何在一台服务器上使用docker运行kafka集群》文章详细介绍了如何在一台服务器上使用Docker运行Kafka集群,包括拉取镜像、创建网络、启动Kafka容器、检查运行状态、编写启动和关闭脚本... 目录1.拉取镜像2.创建集群之间通信的网络3.将zookeeper加入到网络中4.启动kafka集群

如何使用 Bash 脚本中的time命令来统计命令执行时间(中英双语)

《如何使用Bash脚本中的time命令来统计命令执行时间(中英双语)》本文介绍了如何在Bash脚本中使用`time`命令来测量命令执行时间,包括`real`、`user`和`sys`三个时间指标,... 使用 Bash 脚本中的 time 命令来统计命令执行时间在日常的开发和运维过程中,性能监控和优化是不

SpringBoot中Get请求和POST请求接收参数示例详解

《SpringBoot中Get请求和POST请求接收参数示例详解》文章详细介绍了SpringBoot中Get请求和POST请求的参数接收方式,包括方法形参接收参数、实体类接收参数、HttpServle... 目录1、Get请求1.1 方法形参接收参数 这种方式一般适用参数比较少的情况,并且前后端参数名称必须