Archives for 2009

APEX:在系统后台跑PL/SQL

在一个ERP环境中,经常遭遇到一些执行时间非常长的情况。对于EBS产品,可以考虑使用并发请求的方式来让表单将控制权快速返回给用户,有些人也喜欢利用Workflow来应对此类情况(使用Deferred特性)。在和Oracle的对话中,以及Oracle Database 11g产品组件透露的信息上可以看出,APEX(Application Express)越来越成为一个非常重要的角色。从以前独立版本的HTML DB,到现在直接内置到11g中,仿佛就是在向企业用户宣告了另一种企业信息化方案。开发的Web应用程序通常具备非常快速的响应,但是偶尔也会遭遇一些非常情形,比如某个财务报表的运算逻辑非常复杂,通常无法立即返回结果,这时该如何处理呢? 一种比较简单的方式就把这部分工作还给EBS,Web应用程序等处理完毕后再直接获取运算结果,这种方式不需要对原EBS应用做太大调整,而纯粹作为一个结果呈现的客户端。其实还有另外一种方式来处理该问题,即将PL/SQL代码放到后台去执行。APEX给出一个官方的解决方案,使用APEX_PLSQL_JOB。它的原理就是通过DBMS_JOB的功能来让代码延迟执行: APEX_PLSQL_JOB.SUBMIT_PROCESS ( p_sql IN VARCHAR2, p_when IN DATE DEFAULT SYSDATE, p_status IN VARCHAR2 DEFAULT ‘PENDING’) RETURN NUMBER; 该过程提交后台执行的PL/SQL代码,它会返回新创建的job number,可以根据该标识来跟踪job执行状态。这个包里已封装的过程主要包含: JOBS_ARE_ENABLED 判断是否支持使用APEX_PLSQL_JOB提交后台执行的PL/SQL代码。 PURGE_PROCESS 清理已提交的jobs。 SUBMIT_PROCESS 提交后台执行的PL/SQL TIME_ELAPSED 统计job提交后过了多少时间 UPDATE_JOB_STATUS 更新当前执行中的job状态,通常在提交的PL/SQL代码中调用。 为什么是DBMS_JOB而不是DBMS_SCHEDULER呢?众所周知,APEX的前身是HTML DB,它在10g版本以前的数据库中也可以正常工作,而DBMS_SCHEDULER则是10g时代才被引入的。事实上,在很多内部程序或表结构上,如今的APEX还是遗留有许多HTML DB的影子。 只要明白了原理,我们也可以设计更适合自己工作环境的wrapper package,比如可以考虑充分利用DBMS_SCHEDULER的新特性。

Oracle 将终止与 Prometric的合作

Oracle最近发布了一则公告称,他们将终止和Prometric的合作,将认证考试业务转给另一家公司,但是目前尚不知晓是哪一家。 Prometric Testing ID将转换到Oracle Testing ID,同时,原Hand-On Course的表单提交也将于今年9月份终止使用,将会另行启用新的课程提交系统。回想起我当初提交OCP的课程信息时,如果不按照指南,根本就无法顺利提交。新的课程提交系统还是很值得期待的。 在中国,Prometric的考场已经遍地开花了,不知道新的考试服务提供商(我是指中国的),会不会依旧会给广大考生提供如此大的便利。 公告原文见: http://www.oracle.com/global/us/education/certification/exam_vendor.html

库存计划:预测方式

之前已经提到过,对于Non-MRP的库存计划,其核心便是对未来供应和需求的预测。Oracle库存管理模块提供了基于历史数据的预测算法。预测数据可以来源于其他预测,也可以来源于MRP,或者直接基于历史数据根据一定的数学模型创建预测。要创建预测,必须先定义预测规则,包括了时段类型和统计数据来源等,其中需要解释一下预测方式(也称之为预测模型)。 预测方式只有两种:集中(重点)和统计。 集中 集中预测方式通过评估多种预测技术来测试选定物料,并选择一种最佳预测技术来预测需求。该方式主要通过以下5种模型来预测: 预测值 = 上年度同期实际需求 预测值 = 本年度上一期实际需求 预测值 = 本年度前两期实际需求的平均数 预测值 = 上年度同期实际需求 x (本年度上一期实际需求 / 上年度上一期实际需求) 预测值 = 本年度上一期实际需求 x (本年度上一期实际需求 / 本年度上上期实际需求) 集中预测方式仅按照以上模型进行预测。那么,如何评估哪种模型更合适呢?这需要通过绝对百分比误差(APE)来评估预测效果,该值越小,预示着预测精度越高,最终也会选择APE值最小的预测。 APE = (实际需求 – 预测需求) / 实际需求 重点预测方式主要是为了预测某个期间(单期)的需求,实际上,它并不限于需要预测的期间数量,只是针对每一期都采用该方式。 统计 统计预测方式使用指数平滑法、趋势以及季节性算法来预测物料需求,具体包括: 指数平滑模型 趋势模型 季节性模型 趋势和季节性模型 在系统中,针对选择的模型都必须输入介于0和1之间的因子数值。每种模型具体的计算方式,有兴趣的话可以寻找相关资料自行查阅。如果不清楚因子的具体作用,不妨输入1,数值越靠大,表示越偏向于近期的数据。 不管采用何种预测方式,为了保证预测精度,至少要具备一年的历史数据。

MRP技术概览

Oracle是通过基于内存的计划引擎来生成MRP计划的,所谓基于内存,是相对于以前版本中将中间过程存储在数据库中的方式而言,它一次性将所需数据(快照)装入内存,然后在内存中进行各类运算。这些数据包括很多方面,如离散任务、重复性计划、资源需求、采购申请、物料保留、采购订单、安全库存等等。在运算逻辑上,相关资料很多,此处不谈。在技术组件的设计上,大致按以下流程图所示: 可以看到几个关键信息: 快照监控程序通过数据库管道和基于内存的快照进行进程间的通讯。 快照删除工作流程清理过期快照数据,有助于提高本次运算速度。 运算结果数据直接写入操作系统的文件,然后通过SQL*Loader装载数据并进行到下一步骤。 基于内存的计划员执行计划,期间会调用数个工作器来计算特殊逻辑。 基于内存的计划引擎有个最大的缺点便是,在忙时很容易出现ORA-01555 snapshot too old 的错误。 逻辑计算过程,可以通过 MRP –> 查看计划状态 –> 快照任务 功能来查看。 P.S: 流程是用Visio画的,不是很熟练,缺少一些想象中的示意图形。不过,基本上应该算是清楚的了。

库存计划

ERP一个最大的作用就是把理论模型整合成一个简单的功能来使用。在实际应用时,最缺的不是理论,而是缺少简单明了的实现方式。如果一种工具能够通过简单的操作来让使用者实现管理目标的话,那就是最好的工具。在成长性企业中,由于缺少成熟的管理工具和体制,这尤其重要。 安全库存是一种建立于统计学理论基础上的,根据平均消耗速度变化情况建立的保险库存。在量化计算上,有很多影响因素,比如历史需求、提前期、期望服务水平等等。在SAP中,关于安全库存方面有很清晰的功能区分和设置,比如动态安全库存、安全时间等。Oracle电子商务套件中也有专门关于库存优化(Inventory Optimization)的内容,里面有多种优化工具和技术,不过这些都适合专业分析人士使用。其实,Oracle库存管理模块就已经提供了更适合业务部门(初级用户)使用的、更简单的方式来制定库存计划:最小最大计划和再订购点计划,两者使用方式和适用对象有所不同,各有优缺点。 最小最大计划。 要求预先手工设置库存物料的最小值和最大值,这是一份相对静态的数据,系统判断现有量是否到达最小值这一临界点来决定是否需要采购。同时,要提供订货量范围和提前期等信息,以确保订货量符合经济订货原则,又满足供货商的订货要求,这在很多场合下非常重要。对于需求比较固定,日均耗用比较平稳的物料,这种方式是可以考虑。对于项目专用的物料,一般不考虑使用。 再订购点计划。 该方式根据预设的安全库存量自动判断是否需要订购。安全库存量的设置可以是手工的,也可以根据预测自动装入。预测是根据一些可选的模型来自动计算的,它是一门科学,也是一种艺术。这种方式多数情况下无法灵活划分采购数量范围(可以根据安全库存量和预测数量确定),仓库管理员可能会有一种无法把控的感觉。也就是说,需要有稳定的供货来源,而这样的供应商却是比较难找的。 算法为:再订购点 = 安全库存量 + 提前期 x 日均耗量。 从数理统计方面讲,两者都是建立在复杂的运算逻辑之上的,不过简而言之,两种方式都是通过计算库存量是否达到一个临界点,如果到了,就按照规则自动生成供货需求(通常是指采购申请)。所不同的是,再订购点是一种相对动态的安全库存管理算法,它的可靠性更多地依赖于预测的准确性,而预测的准确性则依赖于计划的准确性。对于项目制造型企业,这个很有难度。 在考虑动态安全库存时不得不联系到MRP,必须承认,在实际应用中,MRP很少有成功的案例。在很多时候,MRP是最受人追捧的计划手段,但是它的实际效果往往和预期的有很大出入,原因在于它是一种基于需求的计划。如果一个企业中,项目风险控制能力和计划水平有限,往往导致需求的不确定,此时,基于需求的计划便往往适得其反。很多企业,MRP并没有带来效益,反而成了一种灾难。而上面所述的两种计划手段更多的是基于历史需求,尽管有很多预测模型可供选择,但是它们也只是为了平滑需求曲线,并不会造成太大的偏差。因而基于历史库存消耗量的库存计划,更能让人感觉可靠。 如果生产计划做不好,就慎用MRP,从而也要慎用基于需求的库存策略,在预测中,需要减少需求的因素。而最小最大计划,则更适用于通用库存物料。不过,安全库存量依旧是一个成熟的、有依据的数据(有一整套的理论模型),不妨用于做最小最大计划中订购量数值的参考。