retail 13.2 安装配置之 RPM

retail 13.2 安装配置之 RPM

reim 的安装 非常简单 ,看完文档 15分钟装完
截图如下

1. Oracle Retail Merchandising System (RMS), Oracle Retail Trade Management (RTM),
Oracle Retail Sales Audit (ReSA), Optional: Oracle Retail Fiscal Management (ORFM)
Note: ORFM is an optional application for RMS if you are
implementing Brazil localization.
2. Oracle Retail Service Layer (RSL)
3. Oracle Retail Extract, Transform, Load (RETL)
4. Oracle Retail Active Retail Intelligence (ARI)
5. Oracle Retail Warehouse Management System (RWMS)
6. Oracle Retail Allocation
7. Oracle Retail Invoice Matching (ReIM)
8. Oracle Retail Price Management (RPM)
Note: During installation of RPM, you are asked for the
RIBforRPM provider URL. Since RIB is installed after RPM,
make a note of the URL you enter. If you need to change the
RIBforRPM provider URL after you install RIB, you can do
so by editing the remote_service_locator_info_ribserver.xml
file.
9. Oracle Retail Central Office (ORCO)
10. Oracle Retail Returns Management (ORRM)
11. Oracle Retail Back Office (ORBO) or Back Office with Labels and Tags (ORLAT)
12. Oracle Retail Store Inventory Management (SIM)Note: During installation of SIM, you are asked for the RIB
provider URL. Since RIB is installed after SIM, make a note
of the URL you enter. If you need to change the RIB provider
URL after you install RIB, you can do so by editing the
remote_service_locator_info_ribserver.xml file.
13. Oracle Retail Predictive Application Server (RPAS)
14. Oracle Retail Demand Forecasting (RDF)
15. Oracle Retail Category Management
16. Oracle Retail Replenishment Optimization (RO)
17. Oracle Retail Analytic Parameter Calculator Replenishment Optimization (APC RO)
18. Oracle Retail Regular Price Optimization (RPO)
19. Oracle Retail Merchandise Financial Planning (MFP)
20. Oracle Retail Size Profile Optimization (SPO)
21. Oracle Retail Assortment Planning (AP)
22. Oracle Retail Item Planning (IP)
23. Oracle Retail Item Planning Configured for COE (IP COE)
24. Oracle Retail Advanced Inventory Planning (AIP)
25. Oracle Retail Integration Bus (RIB)
26. Oracle Retail Point-of-Service (ORPOS)
27. Oracle Retail Markdown Optimization (MDO)
28. Oracle Retail Clearance Optimization Engine (COE)
29. Oracle Retail Analytic Parameter Calculator for Markdown Optimization (APCMDO)
30. Oracle Retail Analytic Parameter Calculator for Regular Price Optimization (APCRPO)
31. Oracle Retail Promotion Intelligence and Promotion Planning and Optimization (PIPPO)
32. Oracle Retail Workspace (ORW)
今天开始安装 第九个 前8个已安装完毕

allocation 的安装相对比较容易 稍后整理文档
只是 官方文档很多地方都是错的 NND !!!
备注:WEBLOGIC 可以不用创建新的domain , 使用以前的就好了
进入后截图如下
——- 安装进度 : 基本半天 可以安装完一个模组,剩余模组 预计下周全部安装完毕,然后开始紧张测试
时间 2012年12月20号

applmgr 用户的LANG 环境变量设置为中文可能导致的问题:
现象:env | grep LANG
显示:LANG=zh_CN.UTF-8
1、调用 FndXdfGen 生成数据库对象的xml描述文件时出错:
adjava oracle.apps.fnd.odf2.FndXdfGen xsl_directory=/d01/oracle/VIS/apps/apps_st/appl/fnd/12.0.0/patch/115/xdf/xsl jdbc_protocol=thin jdbc_conn_string=syfdemo.ml.com:1521:VIS apps_schema=apps apps_pwd=apps object_type=TABLE object_name=POA_BIS_SAVINGS owner_name=PO xdf_filename=/home/applmgr/.hdspcitk/out/20121206-135310.pid-32250
Unable to apply XSLT transformation on the xml file
Jackshang log This Message file
Exception occured : Invalid char in text.
程序跟踪错误是发生在这句话:
localDOMParser1.parse(paramInputStream);
这句话出错是因为Inputstream中有无效字符(下图SPARE6部分),此无效字符是因为applmgr环境的LANG=zh_CN.UTF-8 ,从而取到的日期格式是中文的,转到inputstream中的时候变成了无效字符;
解决方法:把applmgr的LANG默认设置成en_US.UTF-8就可以了。
vi .bash_profile
添加: export LANG=”en_US.UTF-8”
===============================================================================
十一、RIB 安装
10.1、创建 Rib oc4j instance
su – root
Xhost+
su – oracle
启动OAS 10.1.3.4
ORACLE_HOME=/d01/app/oracle/product/10.1.3.1/OracleAS_2
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export export ORACLE_HOME PATH
$ORACLE_HOME/opmn/bin/opmnctl startall
进入oas控制台,http://retek13.hand-china.com:2000/em
As Instance name : retekas2
Oc4jadmin 密码: ********1
创建instance和group
$ORACLE_HOME/bin/createinstance -instanceName rib-rms-oc4j-instance -groupName rib_group
密码:handhand1
$ORACLE_HOME/bin/createinstance -instanceName rib-rpm-oc4j-instance -groupName rib_group
$ORACLE_HOME/bin/createinstance -instanceName rib-rwms-oc4j-instance -groupName rib_group
$ORACLE_HOME/bin/createinstance -instanceName rib-func-artifact-oc4j-instance -groupName rib_group
$ORACLE_HOME/bin/createinstance -instanceName rib-tafr-oc4j-instance -groupName rib_group
添加 global-jndi-lookup-enabled="true" 属性到
$ORACLE_HOME/j2ee/rib-<app>-oc4j-instance/config/server.xml
<application-server> 元素.
编辑$ORACLE_HOME/opmn/conf/opmn.xml 添加如下属性到rib-<app>-oc4j-instance 定义出的启动参数部分
-Doc4j.jmx.security.proxy.off=true
<data id="oc4j-options" value="-userThreads"/>
重新加载配置:
$ORACLE_HOME/opmn/bin/opmnctl reload
启动这些oc4j实例
$ORACLE_HOME/opmn/bin/opmnctl startproc process-type="rib-<app>-oc4j-instance"
10.2 RIB数据库安装检查
10.2.1分别登录rms 和rwms的数据库,以sys身份先创建两个视图(v$xatrans$ 、pending_trans$ 可从网上查一下这两个视图的创建脚本),然后进行授权:
grant select on v$xatrans$ to public;
grant select on pending_trans$ to public;
grant select on dba_2pc_pending to public;
grant select on dba_pending_transactions to public;
grant execute on dbms_system to public;
10.2.2更新rms 数据库中RIB_OPTIONS
Rms:
update rib_options set xml_schema_base_url=’http://retek13.hand-china.com:2000/rib-func-artifact/payload/xsd’
Rwms:
insert into rib_options values
(‘http://www.oracle.com/retail/integration/base/bo‘,
‘http://retek13.hand-china.com:2000/rib-func-artifact/payload/xsd‘,
‘http://www.w3.org/2001/XMLSchema-instance‘)
10.2.3 创建tafr rib hospital
在rms数据库:
CREATE USER "TAFRHOSP"
IDENTIFIED BY "TAFRHOSP"
DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP";
GRANT "CONNECT" TO "TAFRHOSP";
GRANT "RESOURCE" TO "TAFRHOSP";
su – oracle
source dbrms.env
sqlplus TAFRHOSP/TAFRHOSP@retl
SQL> @/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/rib_objects/ddl/Kernel/1_KERNEL_CREATE_OBJECTS.SQL;
Commit complete.
********************************************************************************
* 1_KERNEL_CREATE_OBJECTS.SQL END *
********************************************************************************
SQL> quit;
10.2.4 准备AQ JMS Provider
在RMS数据库(安装指南就安逸AQ JMS Provider不要和任何app数据库放在一起,但我们demo环境,资源有限,所以就只能和rms数据库放在一起了)
sqlplus ‘/as sysdba’
SQL>
create tablespace AQJMS datafile ‘/d01/app/oracle/oradata/retl/aqjms_data01.dbf’ size 100M autoextend on;
CREATE USER "RIBAQ" IDENTIFIED BY "RIBAQ"
DEFAULT TABLESPACE "AQJMS"
TEMPORARY TABLESPACE "TEMP";
GRANT "CONNECT" TO "RIBAQ";
GRANT "RESOURCE" TO "RIBAQ";
GRANT CREATE SESSION TO "RIBAQ";
GRANT EXECUTE ON "SYS"."DBMS_AQ" TO "RIBAQ";
GRANT EXECUTE ON "SYS"."DBMS_AQADM" TO "RIBAQ";
GRANT EXECUTE ON "SYS"."DBMS_AQIN" TO "RIBAQ";
GRANT EXECUTE ON "SYS"."DBMS_AQJMS" TO "RIBAQ";
GRANT "AQ_ADMINISTRATOR_ROLE" TO "RIBAQ";
10.2.5 RIB application 安装
cd /d01/app/retail_apps
mkdir rib
cp /d01/stage/retail/rib/RIB/RibKernel13.1.0ForAll13.x.xApps_eng_ga.jar /d01/app/retail_apps/rib/
Cd rib
Unzip RibKernel13.1.0ForAll13.x.xApps_eng_ga.jar
export RIB_HOME=/d01/app/retail_apps/rib/Rib1310ForAll13xxApps/rib-home
cp /d01/stage/retail/rib/RIB/RibFuncArtifact13.1.0ForAll13.1.0Apps_eng_ga.tar $RIB_HOME/download-home/rib-func-artifacts/
cp /d01/stage/retail/rib/RIB/RibPak13.1.0ForRms13.1.0_eng_ga.tar $RIB_HOME/download-home/all-rib-apps/
cp /d01/stage/retail/rib/RIB/RibPak13.1.0ForRpm13.1.0_eng_ga.tar $RIB_HOME/download-home/all-rib-apps/
cp /d01/stage/retail/rib/RIB/RibPak13.1.0ForRwms13.1.0_eng_ga.tar $RIB_HOME/download-home/all-rib-apps/
cp /d01/stage/retail/rib/RIB/RibPak13.1.0ForTafr13.1.0_eng_ga.tar $RIB_HOME/download-home/all-rib-apps/
cp /d01/stage/retail/rib/RIB/Rdmt13.1.0ForAll13.x.xApps_eng_ga.tar $RIB_HOME/tools-home/
cd $RIB_HOME/tools-home/
tar -xvf Rdmt13.1.0ForAll13.x.xApps_eng_ga.tar
JAVA_HOME=$ORACLE_HOME/jdk
export JAVA_HOME
cd $RIB_HOME
./rib-installer.sh
10.2.6 RIB Application Post Install
10.2.6.1 安装RDMT
cd $RIB_HOME/tools-home/rdmt
./configbuilder.sh
安装riha
cp /d01/stage/retail/rib/RIB/Riha13.1.0ForAll13.x.xApps_eng_ga.tar $RIB_HOME/tools-home/
tar -xvf Riha13.1.0ForAll13.x.xApps_eng_ga.tar
下载hibernate 2.1.8
cp /d01/stage/retail/rpm/rpm/application/hibernate/hibernate2.jar $RIB_HOME/tools-home/riha/external-lib/
cd $RIB_HOME/tools-home/riha/bin
./riha-config.sh
安装过程中会提示创建用户,输入:rihaadmin
密码: ********1
安装完成后,运行测试:
$RIB_HOME/tools-home/riha/bin/riha.sh
10.2.7 安装后检查
10.2.7.1 各RIB应用的管理界面(rib-131-og.pdf)
关键点:oc4jadmin默认是各实例的管理用户,但却不是各实例中应用的默认用户,登录管理界面是需要输入用户名和密码,考虑都是用oc4jadmin这个用户比较方便,所以需要在各应用的安全配置中添加该用户:
上述用户建立好以后,在对Web模块 rib-admin-gui 进行测试的时候需要输入用户名oc4jadmin 可验证通过;(若不在应用层添加该用户则验证不通过,因为:虽然是oc4jadmin是实例的管理用户,但它不是应用的用户)
进入rib-admin-gui以后可以查看所有的适配器状态,日志;
10.2.7.2 RDMT 健康测试:使用RDMT测试RIB是否正常
关键点:运行rdmt工具前,必须设置正确的java运行环境,若设置会导致一大堆错误,关键错误信息是:"oracle.oc4j.security.KeyExchange.createKeyPairGenerator"
google或者bing搜索"oracle.oc4j.security.KeyExchange.createKeyPairGenerator" 均可得到正解:java版本不对,需要在path中把1.5的java 可执行放在前面(否则默认会使用/usr/bin/java 这个是1.4版本,不对的)
题外话:java例外,我一般按照caused by 后面的短语查,但建议不要用baidu查了,效果很差,google最好,但有时被ZF封锁连接打不开,此时可考虑用bing。
正确运行Rdmt的效果如下:
描述:这个测试将新建一个Role, 并把Role分配给用户,验证在RSM中可以成功的给某个角色赋予RPM工作流程的权限。
Setp1 : 操作:打开RSM
期望:RSM应用程序被打开;
Step2: 操作:在任务区域,打开角色管理,在下面的区域打开:角色管理
期望:角色管理窗口被打开
说明:RSM与RPM是同一个访问URL:
http://retek13.hand-china.com:2000/rpm-client/launch?template=rpm_jnlp_template.vm
Step3:操作:点击“新建”按钮
期望:光标停留在“新建角色”窗口的“角色名称”处;
Step4: 操作:新建一个角色,选择一些属于这个角色的用户,然后点击“应用”,“完成”
期望:成功创建一个角色
Step5:操作: 在任务区域选择“角色管理”,然后在下面的“角色管理“区域中选择”编辑工作流程权限“
期望:”工作流程权限“窗口被打开
Step6: 操作:选择刚才创建的角色,然后点”编辑“
期望:编辑工作流权限的区域被打开
Step7: 操作:在”选择应用程序“中选择”Oracle Retail Price Management”
期望:列出该应用所有的工作流程权限,默认都是“无访问权限”
Step8:操作:把每个工作流程的“无权限访问”中的勾去掉,使得新的角色有权访问这些工作流程;然后点“修改”按钮
期望:针对该应用程序下的这些工作流程的权限出现在下面的区域中;
Step9: 操作:点击“应用”,“完成” 按钮
期望:角色管理区域关闭。
描述:验证一旦登录到RPM后,此前在RSM中分配给登录用户对应角色的RPM工作流/任务都可以被显示出来:
Step1: 操作:以上一步我们创建的剧社对应的用户登录RPM(Alan.Braun/retek)
期望:RPM被打开
Step2: 验证 如下任务是否被显示在任务列表中:系统选项、基础、合计级别、链接代码、购物篮代码、区域结构、价格指导、日历、候选规则、价格变动、清仓、财务明细、促销活动、促销、促销界限、促销限制、供应商资助默认值、定价策略、工作表、冲突检查结果、查看任务、价格查询
Step3: 操作:点击“系统选项”
期望:如下子任务被显示出来:系统选项编辑、系统选项查看、系统默认值编辑、系统默认值查看
Step4:操作:点击“基础”
期望:如下子任务被显示出来:代码维护
Step5: 操作:点击“链接代码”
期望:如下子任务被显示出来:创建连接代码、维护链接代码
创建连接代码 发生致命错误
按照明细中 caused by 找到关键词:com.retek.rpm.domain.admin.bo.SystemOptions ,查metlink 得到note ID:ID 1312827.1;
解决方法:
The solution to solve the exception:
1. Go into the application: Retail Price Management
2. Navigate to MENUPATH: System Options > System Options Edit
3. Either populate the screen with data or, if already populated, save the data and ensure that the
‘RPM_SYSTEM_OPTIONS’ table now contains a row of data.
4. Retest the issue.
5. Migrate the solution as appropriate to other environment
按此Solution确实可解决问题。
Step6:操作:点击“合计级别”
期望:如下子任务被显示出来:维护合计级别
Step7: 操作:点击“购物篮代码”
期望:如下子任务被显示出来:创建购物篮代码、维护购物篮代码
Step8: 操作:点击“区域结构”
期望:如下子任务被显示出来:创建区域组、维护区域组、维护主要区域组、维护地点移动
Step9: 操作:点击“价格指导”
期望:如下子任务被显示出来:创建价格指导、维护价格指导、复制价格指导、链接价格指导
Step10: 操作:点击“日历”
期望:如下子任务被显示出来:创建日历、维护日历
Step11:操作:点击“候选规则”
期望:如下子任务被显示出来:创建候选规则、维护候选规则、维护规则变量
Step12:操作:点击“价格变动”
期望:如下子任务被显示出来:创建价格变动、维护价格变动、自动批准结果、地区差别的价格变动
Step13:操作:点击“清仓”
期望:如下子任务被显示出来:创建清仓、维护清仓、创建清仓重设、清仓重设查询
Step14: 操作:点击“促销事件”
期望:如下子任务被显示出来:创建/维护活动
Step15:操作:点击“促销”
期望:如下子任务被显示出来:创建促销、创建组成、维护促销、维护组成
创建促销,发生致命错误,caused by: Item: com.retek.rpm.domain.admin.bo.SystemDefaults
参考上一个错误,估计是系统选项的默认值也要保存一下。
解决方法:系统选项->系统默认值编辑->保存一下。 问题解决。
Step16:操作:点击“促销界限”
期望:如下子任务被显示出来:创建界限、维护界限
Step17:操作:点击”促销限制“
期望:如下子任务被显示出来:创建促销限制、维护促销限制
实际:缺少了“创建促销限制”这个菜单:
分析: 换个用户 Alain.Frecon登录,发现这个菜单是有的,说明是授权问题;
解决:使用Alain.Frecon登录,切换到RSM->角色管理->编辑工作流权限 , 把syfadmin角色的RPM工作流程授权中遗漏的部分补上(打勾,然后按修改,点“应用”即可)
Step18: 操作:点击”供应商资助默认值“
期望:如下子任务被显示出来:创建默认值、维护默认值
期望:如下子任务被显示出来:查看冲突检查结果
Step20: 操作:点击”定价策略“
期望:如下子任务被显示出来: 创建定价策略、维护定价策略
Step21: 操作:点击“工作表”
期望:如下子任务被显示出来:工作表状态、商品提取货品删减
Step22:操作:点击“查看任务”
期望:如下子任务被显示出来:查看任务
Step23:操作:点击”价格查询“
期望:如下子任务被显示出来:检索货品价格;
Step14:操作:点击“财务明细”
期望:如下子任务被显示出来:创建/维护财务明细
描述:这个测试包括在RPM中设置初始数据,包括系统选项、系统默认值和基础数据(价格更改原因代码、清算原因代码和链接代码),创建一个初始化的区域结构。
Step1: 以合适的用户登录RPM (Alan.Braun/retek)
期望:RPM应用被打开
Step2: 验证系统选项:从任务区域点击系统选项,打开子菜单:系统选项编辑
期望:系统选项容器被打开
Step3:点击系统选项编辑,看看如下字段是否完整:销售额计算方法、多个货品地点促销、更新货品属性、价格变动/促销重叠、成本计算方法、清仓/促销重叠、识别仓库为地点、允许复合促销、打开区域使用、准确交易/已资助促销日期、清除、重设清仓月数、默认缺货天数、拒绝后天数、默认重设日期、促销拒绝后天数、价格变动处理天数、促销历史月数、零小数位货币的末尾数字、货币、需要活动ID、允许外部价格、区域/父范围、先应用促销变动类型、地点移动提前期、地点移动清除天数、动态地区差别、Allow Buy Get Cycles、Display Promotion Header Markup%、 仅显示冲突、活动在Vdate之前显示的天数、活动在Vdate之后显示的天数、过滤价格变动/清仓结果、显示完整的促销列明细、显示完整的价格变动/清仓列明细
后台冲突检查:
Price Changes / Clearances、Promotions、Worksheet
最大搜索结果:
价格变动、清仓、促销;
实际: 黄色部分缺乏;
Step4:验证系统默认值:在任务区域点”系统选项“,在子任务区域点“系统默认值编辑”
期望:系统默认值编辑 的容器被打开。
Step5: 验证如下默认值是否被设置:货品级别、定价策略、差别类型、类型、货币、维护毛利策略方法、忽略限制。 点击保存;
期望:系统默认值编辑 的容器关闭;
Step6: 设置基础数据:在任务区域点“基础”,然后在子任务区域点“代码维护”
期望:代码容器被打开
Step7: 点击“新建”,类型选择:正常价格,代码和描述分别输入HPOS_CODE1,然后按“保存+重复”按钮;
期望:正常价格变动代码被保存;
Step8: 点击“新建”,类型选择:清仓价格,代码和描述分别输入HPOS_CLR1, 然后按“保存+重复”按钮
期望:清仓价格变动代码被保存;
Step9: 点击“完成”
Step10: 建立一个区域结构:从任务中选择区域结构,在子任务中选择“创建区域组”
期望:“创建区域组” 的容器被打开
Step11-14: 区域组ID是系统自动生成的,填写区域组名称:HPOS-TEST1 ,类型选择要求选择所有的三种,但实际操作界面是单选界面(变通的选择方法是先一个一个选,然后界面上虽然显示只有一个,实际内部已经选择了3个)
然后点“下一步”;输入区域名称:HPOS-TEST1 ,然后点“应用”按钮;会在下面新生成一行,点击该行,然后点“地点”按钮,按类型=门店搜索,选择所有门店,然后按“保存+重复”按钮;完成区域组的创建。
描述:验证在RMS中创建仓库后,在RPM中也有;
Step1: 登录到RMS (rms13dev/handhand)
期望:RMS启动菜单被打开
Step2-3: 导航到 Action->Organization Hierarchy 选择warehouse , 然后点 “Add“ 按钮
新建一个仓库,ID :101 ,名称:hpos-W2 币种:USD
“Zone Loc “ 按钮点进去,选一个默认的;
“Address” 按钮点进去,新建2个地址,类型分别为business 和postal ,点OK回到Warehouse界面;
从工具条菜单 Option –>Visual Warehouse 进入新建一个从属于HPOS-W2的虚拟仓库 ID:102 名称:HPOS-W2-V1 , 从工具条 Option->WareHouse/Inventory Attribute 进入属性界面,在Replishment warehouse 前打勾,然后点OK回到Visual Warehouse 界面,然后Ok 回到WhereHouse界面
选择HPOS-W2-V1 作为 HPOS-W2的主虚拟仓库,然后OK 确认。
期望:查 WH_ADD 可以看到新建的仓库
Step4:运行批处理 whadd.pc
/*
su – oracle
source rmsbatch.env
cd $MMHOME/oracle/proc/bin
whadd rms13dev/******
成功运行!
运行的历史记录可在 select * from restart_program_history 中查询到。
期望:批处理成功运行,仓库信息出现在wh表,并且从wh_add表中删除,同事仓库资料也出现在RPM_ZONE_LOCATION表中
描述:此测试验证在RMS中创建一个部门后,会出现在RPM中,这个测试包括:在RMS中创建一个部门,在RPM中为该部门设置初始价格,这样商品就可以被添加到该部门,然后在RSM中添加数据权限。
Step1-2: 登录到RMS (rms13dev), 在RMS菜单中选择 Action->Merchandize Hierarchy ,点击Department ,然后点击 New
期望:部门窗口被打开。
Step3: 输入新建部门 id:101, 名称:HPOS_DEPT1 , Group: 307 , Markup caclation type: % of retail , Markup of retial %: 30
打开option –> Vat maintenance ,输入vat code : stand ,输入完成点OK , 回到部门新建界面点OK
期望:新部门被成功创建,并收到一条消息,在该部门可以新添商品之前,必须在RPM中为其创建一个主区域。
Step4: 登录到RPM (Alan.Braun/retek, 首次登陆需要耐心等1分钟 )
Step5: 为新建的部门创建初始价格 / 主区域组
导航:任务->区域结构->维护主要区域组
Step6-7: 点击 “添加“ 按钮
部门:选刚创建的101 HPOS_DEPT1, 区域组:选择1c)中创建的 HPOS-TEST1 , 初始价格设置:成本加价 30% , 然后点“应用”,“完成”
Step8: 登录到RSM (Alain.Frecon/retek)
Step9-11: 导航 : 任务->RSM->角色管理->编辑数据权限
选择Administrator Role ,然后点【编辑】,在“为以下内容编辑数据权限”处点【新建】,在“编辑数据权限明细”处,输入:应用: RPM,数据元素:商品层次,部门:HPOS_DEPT1,开始日期:保持默认值。然后点【修改】,【完成】
Step12:登录到RMS(hand/handhand) ;为新建部门添加分类和子分类;
添加分类:导航:操作->商品层次 ,点击“分类”,部门选择:101 HPOS_DEPT1, 然后点【新建】 ,新建2个分类:10 HPOS_DEPT1_分类1 , 20 HPOS_DEPT1_分类2 ,然后点确定;
添加子分类:导航操作->商品层次,点击“子分类”,部门选择:101 HPOS_DEPT1, 分类选择:10 HPOS_DEPT1_分类1,然后点【新建】,新家2个子分类:10 HPOS_DEPT1_分类1_子类1 , 20 HPOS_DEPT1_分类1_子类2 ,然后点确定;
验证:在RMS中创建门店后,在RPM中也自动创建。
Step1: 登录到RMS(hand/handhand)
Step2-4: 在RMS中新增一个门店
NAV: 操作->组织层次 , 选择 “门店”,点【新建】按钮
输入新建商店信息:
店铺类型:Franchise
店铺:100 ,HPOS_专卖店1
店铺业态:Fashion
渠道:Direct
默认仓库:HPOS-W2-V1
货币:美元
…
然后点【分区地点】 ,输入店家店铺:Boston, 成本地点:HPOS… ,然后确定。
回到店铺维护界面点【地址】 ,输入营业地点、开票地点、批发/专卖 地点。 然后确定。
再回到店铺维护界面,点【确定】。
此时,在所有店铺的列表里面并未出现新增的店铺,需要运行一个批才能生效。
Step5:运行批storeadd ,以生效新增店铺
/*
su – oracle
source rmsbatch.env
cd $MMHOME/oracle/proc/bin
storeadd rms13dev/******
期望:批正常结束,NAV: 操作->组织层次 , 选择 “门店” ,在所有店铺列表中可以看到新增的店铺。 在RPM_ZONE_LOCATION 表中,可看到Step3中指定的价格门店所在的区域都有对应新增的门店 location
说明:验证在RMS中新增商品并分配到地点后,在RPM中也能正常使用。
Step1: 登录到RMS (hand/handhand)
Step2-3 :新建一个货品
Nav: 货品->货品
操作:新货品
货品类型:正常货品
部门:HPOS_DEPT1
分类:HPOS_DEPT1_分类1
子分类:HPOS_DEPT1_分类1_子类1
点【确定】 ,弹出“货品维护窗口” 输入:
货品类型:RETEK 货品编号
事务级别:LINE
货品描述:HPOS测试货品1
然后点左边的“供应商” ,出现供应商信息输入界面,输入:
供应商:选择一个供应商 Battery Supplier
供应商地点:Philip Morris
然后点【应用】按钮;在左上角,选择:Item-supplier-Country of Sourcing , 出现“货品-供应商-原产国”输入窗口: 输入:
在原产国 旁边点【创建】按钮,输入:
成本:货箱 800
尺码 内包装:35
尺码 箱子: 350
层:5
高:5
然后点【确定】按钮 回到“货品-供应商“界面 ,再点【确定】回到“货品维护”界面
在“货品维护”界面的左边选择“按区域的零售价”菜单,打开“按区域的货品零售价”窗口,点【确定】按钮
在“货品维护”界面的左边选择“地点”菜单,出现“货品地点”窗口,在此窗口中创建如下记录
第一条:组类型:仓库,组值:HPOS-W2-V1 点【应用】按钮
点【添加】按钮
第二条:组类型:店铺,组值:HPOS_专卖店1, SOURCE WH: HPOS-W2-V1 .点[APPLY]按钮。
========================================
说明:
1)这里Testcase中的顺序是先添加店铺类地点,再添加仓库类地点,但由于我们先前创建的店铺是专营店,retek要求在添加此类店铺地点前必须现有仓库类地点。因此,第一条先添加仓库类地点。
2)在添加第二条店铺类地点的时候,要求选择来源仓库,但LOV没有值,打开源代码看后发现主要问题是其代码中要求,当前用户的语言必须是与主语言一致,本系统安装时主语言选择的是 US, 而当前登录用户hand的用户语言是中文。所以选择不到,解决方法是,暂时切换到rms13dev这个用户(其用户语言与主语言一致,都是英语),选择编辑货品,继续完成测试。
select distinct v_wh.wh_name, v_wh.wh
from v_wh ,item_loc il,wh where il.loc_type=’W’
and v_wh.wh = il.loc
and il.item =:B_HEAD.TI_ITEM
and v_wh.stockholding_ind = ‘Y’
and wh.finisher_ind = ‘N’
and :GLOBAL.prim_lang = :GLOBAL.user_lang
=========================================
完成后点【确定】回到货品维护界面。
选择左边菜单:标价牌类型,添加可用的标价牌类型然后点【确定】
备注:如果选不到标价牌类型,需要在NAV: Item->Ticket Type->Edit 进行新增,这里新增两种:USp1 和 USP2( 也需要登录用户语言是主语言,否则不让输入描述)
在“货品维护”界面的左边 点击“提交”
在“货品维护”界面的左边 点击“批准”
然后在“货品维护”界面 点【确定】
Step4: 以Step2-3的方法再新增一个货品:HPOS测试货品2
Step5:运行Execute query Select * from rpm_stage_item_loc 检查新增的记录是否存在
期望:存在
实际:存在
Step6: 运行rpm 批处理 : newItemLocBatch
有关如何运行rpm 批处理,请参考:rpm-131-og.pdf page 108 ;
/*
su – oracle
source rpmbatch.env
cd $RPMBATCHDIR
./newItemLocBatch Alain.Frecon ******
*/
Step7: 登录到RPM
Nav: 任务->价格查询->检索货品价格
输入查询条件:
部门:HPOS_DEPT1
分类:HPOS_DEPT1_分类1
子分类:HPOS_DEPT1_分类1_子分类1
地点:HPOS_专卖店1
然后点【检索价格】按钮
期望:能查到RMS中新增的商品(验证上一步的RPM BATCH是否运行成功)
Step8: 执行查询 Execute query Select * from rpm_future_retail; 看新增的Item是否存在。
期望:存在,实际:存在。
1h) RMS to RPM 货品重新分类
描述:对某个货品进行重新分类操作,操作完成后期望在RMS看到更新后的分类,在RPM中按老分类查询该货品查询不到,而按照新分类可以查到。
Step1: 登录到RMS
Nav: 货品 –>货品 ;我们先查询一下 HPOS测试货品1,其目前的子分类是:HPOS_DEPT1_分类1_子类1
Step2-4:重新分类一件货品
Nav: 货品->重新分类->重新分类一件货品
把货品:HPOS测试货品2 的子分类设置为:HPOs_DEPT1_分类1_子类2
点【确定】会报消息:权限不够;,切换到用户 rms13dev 操作可以。
Step5: 运行RMS JOB RECLSDLY.PC , 这个批会处理所有生效日期+1 < Sysdate 的重分类。
/*
su – oracle
source rmsbatch.env
cd $MMHOME/oracle/proc/bin
reclsdly rms13dev/****** P
reclsdly rms13dev/****** E
*/
备注: 有关该批的使用方法,参考rms-131-og1.pdf page 473 ,不过此批的语法为: reclsdly uid/password process Mode ; 其中的process Mode 在此og中并未解释;Note :960795.1 中有用法 。
Step6:运行 RPM BATCH itemReclassBatch.sh
/*
su – oracle
source rpmbatch.env
cd $RPMBATCHDIR
./itemReclassBatch.sh Alain.Frecon ******
*/
Step7: 在RMS中检查重分类是否生效
Nav: 货品->货品 查看货品
期望:子分类 = HPOS_DEPT1_分类1_子类2
实际:子分类 = HPOS_DEPT1_分类1_子类1
没有达成期望结果;
分析:可能是RMS batch没有成功执行,查 /d01/app/retail_apps/rms/batch/log 下的 Feb_07.log
发现如下错误:
Tue Feb 7 16:46:07 Program: reclsdly: PID=27213: Started by rms13dev
Tue Feb 7 16:46:07 Program: reclsdly: PID=27213: Terminated – No threads available
Tue Feb 7 16:46:11 Program: reclsdly: PID=27217: Started by rms13dev
Tue Feb 7 16:46:11 Program: reclsdly: PID=27217: Terminated – No threads available
Tue Feb 7 18:12:09 Program: cremhierdly: PID=30209: Started by rms13dev
Tue Feb 7 18:12:09 Program: cremhierdly: PID=30209: Thread 1 – Terminated Successfully
Tue Feb 7 18:12:19 Program: reclsdly: PID=30211: Started by rms13dev
Tue Feb 7 18:12:19 Program: reclsdly: PID=30211: Terminated – No threads available
Tue Feb 7 18:12:30 Program: reclsdly: PID=30215: Started by rms13dev
Tue Feb 7 18:12:30 Program: reclsdly: PID=30215: Terminated – No threads available
解决方法:
Update restart_program_status
Set program_status = ‘ready for start’
Where program_name = ‘reclsdly’
再次运行rmsbatch:
/*
su – oracle
source rmsbatch.env
cd $MMHOME/oracle/proc/bin
reclsdly rms13dev/****** P
reclsdly rms13dev/****** E
*/
看log:
Wed Feb 8 15:58:06 Program: reclsdly: PID=16435: Started by rms13dev
Wed Feb 8 15:58:09 Program: reclsdly: PID=16435: Thread 1 – Terminated Successfully
Wed Feb 8 15:58:22 Program: reclsdly: PID=16442: Started by rms13dev
Wed Feb 8 15:58:22 Program: reclsdly: PID=16442: Terminated – No threads available
说明:第2步没有成功,原因是运行第一步后批状态变成了“completed”
再次更新状态到:’ready for start’
Update restart_program_status
Set program_status = ‘ready for start’
Where program_name = ‘reclsdly’
/*
reclsdly rms13dev/****** E
*/
再次检查是否生效
在RMS中检查重分类是否生效
Nav: 货品->货品 查看货品
这次生效了。
再次重新运行 RPM Batch:
/*
su – oracle
source rpmbatch.env
cd $RPMBATCHDIR
./itemReclassBatch.sh Alain.Frecon ******
*/
Step 8-9 :在RPM中分别按老分类和新分类查询,看结果是否符合:
期望:按照老分类查不到被测物品,按照新的分类可以查到。
实际符合:
在之类1下面,已经查不到测试货品2
在之类2下面才可以查到测试货品2
描述:创建3种类型的价格事件:价格变动、促销、清仓;使用1g)中创建的货品作为测试货品。
Step1:登录到RPM (Alain.Frecon/retek)
Step2-3:创建价格变动
Nav:任务->价格变动->创建价格变动
备注:step3 区域组LOV为空,区域LOV为空 导致无法完成创建价格变动
解决方法:
详情查看 metalink上的 Doc ID: NOTE:580426.1
简要步骤说明:
1. 登录rsm
2. 选择角色管理->编辑数据权限
3. 双击administrator role
4. 点击新建
5. 应用程序选择RPM
6. 数据元素选择地点层次
7. 选择自己需要的区域和区域组
8. 点击修改,应用,完成
9. 重新登陆进入rpm可以发现,刚才添加的区域和区域组出现在LOV中
此问题在12版中也是存在的,可参考:http://blog.retailsolution.cn/archives/96
不过,即使按照上述方法操作,也还是选不到区域组,所以就使用rpm的调试跟踪,按照metalink的说法,
RPM 应用的调试跟踪: Note ID 568004.1]
rpm的调试跟踪使用的是sql trace方法,操作如下:
—————————————————
Instructions:
在RMS13DEV 这个Schema下
确保RMS13DEV有alter session权限
1. Create the procedure set_sql_trace_at_logon first.
2. Create trigger SQLTRACE_TRIGGER
3. Disable the trigger when the tracing is completed.
CREATE OR REPLACE PROCEDURE set_sql_trace_at_logon(
p_username IN VARCHAR2 DEFAULT SYS_CONTEXT(‘userenv’, ‘session_user’),
p_module IN VARCHAR2 DEFAULT SYS_CONTEXT(‘userenv’, ‘module’)
)
AS
BEGIN
insert into system.syf_dbaction_log values (sysdate,’set_sql_trace_at_logon 1′);
insert into system.syf_dbaction_log values (sysdate,’p_username=’||p_username);
insert into system.syf_dbaction_log values (sysdate,’p_module =’||p_module );
IF ( p_username = ‘RMS13DEV’ and substr(p_module,1,4)=’java’)
THEN
insert into system.syf_dbaction_log values (sysdate,’set_sql_trace_at_logon 2′);
EXECUTE IMMEDIATE ‘alter session set timed_statistics=TRUE’;
EXECUTE IMMEDIATE ‘alter session set SQL_TRACE=TRUE’;
EXECUTE IMMEDIATE ‘alter session set max_dump_file_size = unlimited’;
EXECUTE IMMEDIATE ‘alter session set tracefile_identifier=”RMS13DEV_RPM”’;
EXECUTE IMMEDIATE ‘alter session set events ”10046 trace name context forever, level 12”’;
insert into system.syf_dbaction_log values (sysdate,’set_sql_trace_at_logon 3′);
END IF;
insert into system.syf_dbaction_log values (sysdate,’set_sql_trace_at_logon 4′);
END;
CREATE OR REPLACE TRIGGER SQLTRACE_TRIGGER
AFTER LOGON
ON RMS13DEV.SCHEMA
BEGIN
insert into system.syf_dbaction_log values (sysdate,’rms13dev logon’);
set_sql_trace_at_logon;
insert into system.syf_dbaction_log values (sysdate,’rms13dev logon 2′);
END;
/
1.Log out of all applications.
This step will depend on how you have installed the applications. If you have installed RPM in a separate schema, then there is no need to logout from all applications.
2.Sign on to application and reproduce issue.
Please keep the navigation to a minimum to reduce the trace file size. As soon as the issue is reproduced log out and retrieve the trace file(s).
3.Disable trace using ‘alter TRIGGER SQLTRACE_TRIGGER disable’.
4.Get trace files in the user_dump_dest and tkprof the trace file.
5.Use the following to create the tkprof file:
tkprof <trace_file>.trc </home/my_traces/output_file>.out sys=no sort=exeela, fchela explain=<username/password>
6.Upload the tkprof and raw data files to the service request for review.
——————————————————-
根据trace的结果,发现变价单主要使用package : RPM_PRICE_CHANGE_SQL , 权限过滤方面使用采用全局临时表:RPM_PC_SEARCH_NUM_TBL,不过如何根据用户,权限把区域组插入到这张表,trace中未找到线索。
不过我注意到一个现象:在RSM中添加角色的数据权限,添加区域组以后,虽然当时没有效果,但第2天是有效果的,可以在价格变动中选到区域组; 但我如果在RSM中添加区域组后,人为从plsql中更改生效日期到昨天,却没有效果,难道是有个daily run的批在自动运行?还是因为缓存更新问题?
Step4 :批准价格变动
在操作中选择:批准,然后点【更新】按钮。
点【更新】按钮后,会提示:已经提交处理,完成时会通知。
过了一会,看见一个警告:
在冲突检查结果中可看到一条记录:id=1, 结果:无冲突;
在创建价格变动的窗口点【完成】 按钮。
/*
su – oracle
source rpmbatch.env
cd $RPMBATCHDIR
./itemReclassBatch.sh Alain.Frecon ******
*/
Step5: 在数据库表中验证价格变动
Select * from rpm_price_event_payload.
实际:这张表中有无内容,取决于testcase的prerequest要求的第7条操作:
The property delete_staged_rib_payloads must be set to false. (delete_staged_rib_payloads=false) in rpm.properties to prevent payloads from being deleted during the price event approval process when using the new batch programs to extract price events. The rpm.properties file can be found in the "conf" folder of the deployed rpm application.
Step6-10 :创建促销
Nav: 任务->促销->创建促销
点[添加组成]
点[下一步]
组成类型选择简单,货品选择HPOS测试货品1 , 地点选择:HPOS专卖店1 ,更改类型:折扣百分比, 应用至:正常和清仓
然后点[应用]按钮
选中刚才新产生的行,操作选择”批准“,然后点[更新]按钮,状态将变成”冲突检查“,
到”维护促销“菜单去查询会发现,状态已经变成”已批准“
Step 11- :创建清仓
Nav:任务->清仓->创建清仓
类型:正常
更改类型:折扣百分比
变动百分比:60
地点选择:HPOS_专卖店1
货品选择:HPOS测试货品1
输入完毕点下面的 [应用] 按钮。
然后回到上面,选中新生成的一条记录,选操作“更新”然后点[更新]按钮。 状态会变成“冲突检查”
完成冲突检查后进入“维护清仓”界面查询查不到记录
===============================================================================
九、RSL 安装
9.1 RSL Appserver 安装
9.1.1 确认ReIM 所在数据库已经启动
若未启动,设置环境变量启动之
su – root
Xhost+
su – oracle
ORACLE_BASE=/d01/app/oracle
ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1
ORACLE_SID=retl
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
RMS_STAGEDIR=/d01/stage/retail/rms/rms
export RMS_STAGEDIR
NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG
sqlplus ‘/as sysdba’
Sql> startup
8.1.2 启动OAS 10.1.3.4
ORACLE_HOME=/d01/app/oracle/product/10.1.3.1/OracleAS_2
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export export ORACLE_HOME PATH
$ORACLE_HOME/opmn/bin/opmnctl startall
进入oas控制台,http://retek13.hand-china.com:2000/em
As Instance name : retekas2
Oc4jadmin 密码: ********1
创建instance和group
$ORACLE_HOME/bin/createinstance -instanceName rsl-oc4j -groupName rsl_group
密码:********1
启动oc4j
$ORACLE_HOME/opmn/bin/opmnctl @cluster startproc ias-component=rsl_group
设置JAVA_HOME环境变量:
JAVA_HOME=$ORACLE_HOME/jdk
export JAVA_HOME
cd /d01/stage/retail/rpm/RSL1310forRMS
./rsl-installer.sh
RMS 13 JDBC URL: jdbc:oracle:oci:@retl
RMS 13 schema: RMS13DEV
oc4jAdmin密码设置为:********1
配置logging:
cd $ORACLE_HOME/j2ee/rsl-oc4j/config
cp j2ee-logging.xml j2ee-logging.xml.bak_bf_rsl
vi j2ee-logging.xml
在 <logging_configuration> tag后 输入::
<logging_properties>
<property name=’java.util.logging.FileHandler.formatter’ value=’java.util.logging.SimpleFormatter’/>
<property name=’java.util.logging.FileHandler.pattern’ value=’%ORACLE_HOME%/j2ee/<oc4j-instance-name>/log/rsl.log’/>
</logging_properties>
在 <log_handlers> tag 后输入:
<log_handler name=’rsl-log-handler’ class=’java.util.logging.FileHandler’>
<property name=’path’ value=’%ORACLE_HOME%/j2ee/%OPMN_PROC_TYPE%/log/%OPMN_PROC_TYPE%_%OPMN_PROC_SET%_%OPMN_PROC_INDEX%/oc4j’/>
<property name=’maxFileSize’ value=’10485760’/>
<property name=’maxLogSize’ value=’104857600’/>
<property name=’encoding’ value=’UTF-8’/>
<property name=’supplementalAttributes’ value=’J2EE_APP.name,J2EE_MODULE.name,WEBSERVICE.name,WEBSERVICE_PORT.name’/>
</log_handler>
在 <logger> tag 后输入:
<logger name=’oracle.retail’ level=’INFO’ useParentHandlers=’false’>
<handler name=’rsl-log-handler’/>
</logger>
<logger name=’com.retek’ level=’INFO’ useParentHandlers=’false’>
<handler name=’rsl-log-handler’/>
</logger>
重启动oc4j
$ORACLE_HOME/opmn/bin/opmnctl @cluster stopproc ias-component=rsl_group
$ORACLE_HOME/opmn/bin/opmnctl @cluster startproc ias-component=rsl_group
改变log层次:
登录,按照ig上的操作
http://retek13.hand-china.com:2000/em
===============================================================================
十、RPM 安装
10.1 RPM DB 安装
在安装rms的时候已经完成RPM的db object的安装
10.2 RPM Appserver 安装
10.2.1 确认RPM 所在数据库已经启动
若未启动,设置环境变量启动之
su – root
Xhost+
su – oracle
ORACLE_BASE=/d01/app/oracle
ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1
ORACLE_SID=retl
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
RMS_STAGEDIR=/d01/stage/retail/rms/rms
export RMS_STAGEDIR
NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG
sqlplus ‘/as sysdba’
Sql> startup
10.2.2 启动OAS 10.1.3.4
ORACLE_HOME=/d01/app/oracle/product/10.1.3.1/OracleAS_2
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export export ORACLE_HOME PATH
$ORACLE_HOME/opmn/bin/opmnctl startall
进入oas控制台,http://retek13.hand-china.com:2000/em
As Instance name : retekas2
Oc4jadmin 密码: ********1
创建instance和group
$ORACLE_HOME/bin/createinstance -instanceName rpm_oc4j -groupName rpm_group
密码设置为:********1
启动oc4j:
$ORACLE_HOME/opmn/bin/opmnctl @cluster startproc ias-component=rpm_group
配置Apache 支持JNLP:
cp $ORACLE_HOME/Apache/Apache/conf/mime.types $ORACLE_HOME/Apache/Apache/conf/mime.types.bak_bf_rpm
vi $ORACLE_HOME/Apache/Apache/conf/mime.types
添加:
application/x-java-jnlp-file jnlp
重启 httpServer:
$ORACLE_HOME/opmn/bin/opmnctl restartproc process-type=HTTP_Server
下载 hibernate2.jar version 2.1.8,存放于:$INSTALL_DIR/rpm/application/hibernate(/d01/stage/retail/rpm/rpm/application/hibernate)
设置JAVA_HOME环境变量:
JAVA_HOME=$ORACLE_HOME/jdk
export JAVA_HOME
cd /d01/stage/retail/rpm/rpm/application
./install.sh
RPM/RMS 13 JDBC URL: jdbc:oracle:oci:@retl
RPM/RMS 13 schema: RMS13DEV
RMS 13 schema owner: RMS13DEV
Loging Module 选择 xml , 在rpm的部署目录下编辑user_rpm.xml来添加用户。
给客户端配置jar签名:
$JAVA_HOME/bin/keytool -genkey -alias foo
[oracle@retek13 application]$ $JAVA_HOME/bin/keytool -genkey -alias foo
Enter keystore password: ********
What is your first and last name?
[Unknown]: jack
What is the name of your organizational unit?
[Unknown]: hand
What is the name of your organization?
[Unknown]: hand
What is the name of your City or Locality?
[Unknown]: shanghai
What is the name of your State or Province?
[Unknown]: shanghai
What is the two-letter country code for this unit?
[Unknown]: cn
Is CN=jack, OU=hand, O=hand, L=shanghai, ST=shanghai, C=cn correct?
[no]: yes
Enter key password for <foo>
(RETURN if same as keystore password):
[oracle@retek13 application]$
cd $ORACLE_HOME/j2ee/rpm_oc4j/applications/rpm13/JnlpLaunchServlet/lib
$JAVA_HOME/bin/jarsigner rpm_client_config.jar foo
安装测试:
http://retek13.hand-china.com:2000/rpm-client/launch?template=rpm_jnlp_template.vm
用户参见:/d01/app/oracle/product/10.1.3.1/OracleAS_2/j2ee/rpm_oc4j/applications/rpm13/conf/retek/user_rsm.xml
登录后任务是空的,select * from rpm_task 也是空的,难道rpm初始化数据未执行?
查:file:///d01/stage/retail/rms/rms/dbschema/build.xml 中有一章是insert rpm data的:经检查这些脚本insert的数据都存在,证明这些脚本是被正确执行的。
select * from rsm_user_role
select * from rsm_role
显示只有 Alain.Frecon 被赋予管理员角色,无其他用户被分配角色。
所以用:Alain.Frecon登录
有内容,正常:
===============================================================================
八、ReIM 安装
8.1 ReIM DB 安装
在安装rms的时候已经完成ReIM的db object的安装
8.2 ReIM Appserver 安装
8.2.1 确认ReIM 所在数据库已经启动
若未启动,设置环境变量启动之
su – root
Xhost+
su – oracle
ORACLE_BASE=/d01/app/oracle
ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1
ORACLE_SID=retl
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
RMS_STAGEDIR=/d01/stage/retail/rms/rms
export RMS_STAGEDIR
NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG
sqlplus ‘/as sysdba’
Sql> startup
8.2.2 启动OAS 10.1.3.4
ORACLE_HOME=/d01/app/oracle/product/10.1.3.1/OracleAS_2
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export export ORACLE_HOME PATH
$ORACLE_HOME/opmn/bin/opmnctl startall
进入oas控制台,http://retek13.hand-china.com:2000/em
As Instance name : retekas2
Oc4jadmin 密码: ********1
创建instance和group
$ORACLE_HOME/bin/createinstance -instanceName reim_oc4j -groupName reim_group
密码设置为********1
启动oc4j:
$ORACLE_HOME/opmn/bin/opmnctl @cluster startproc ias-component=reim_group
设置JAVA_HOME环境变量:
JAVA_HOME=$ORACLE_HOME/jdk
export JAVA_HOME
cd /d01/stage/retail/reim/reim/application
./install.sh
ReIM/RMS 13 JDBC URL: jdbc:oracle:oci:@retl
ReIM/RMS 13 schema: RMS13DEV
RMS 13 schema owner: RMS13DEV
安装测试:
http://retek13.hand-china.com:2000/reim/index.jsp
备注:这个登录用户在ig中也未提到,利用数据库session跟踪效果不好,查源代码可知其用户信息存放于:IM_USER_AUTHORIZATION 表中。
反编译:/d01/app/oracle/product/10.1.3.1/OracleAS_2/j2ee/reim_oc4j/applications/reim13/reim13/WEB-INF/classes/com/retek/reim/db/ImUserAuthorizationAccess.class
select * from IM_USER_AUTHORIZATION
===============================================================================
七、ALLOC 安装
7.1 Alloc DB 安装
在安装rms的时候已经完成alloc的db object的安装
Allocation schema: ALLOC13DEV
密码:*********
7.2 Alloc Appserver 安装
7.2.1 确认alloc所在数据库已经启动
若未启动,设置环境变量启动之
su – root
Xhost+
su – oracle
ORACLE_BASE=/d01/app/oracle
ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1
ORACLE_SID=retl
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
RMS_STAGEDIR=/d01/stage/retail/rms/rms
export RMS_STAGEDIR
NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG
sqlplus ‘/as sysdba’
Sql> startup
7.2.2 启动OAS 10.1.3.4
ORACLE_HOME=/d01/app/oracle/product/10.1.3.1/OracleAS_2
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export export ORACLE_HOME PATH
$ORACLE_HOME/opmn/bin/opmnctl startall
进入oas控制台,http://retek13.hand-china.com:2000/em
As Instance name : retekas2
Oc4jadmin 密码: *********1
创建instance和group
$ORACLE_HOME/bin/createinstance -instanceName alloc_oc4j -groupName alloc_group
密码输入:*********1
cp $ORACLE_HOME/opmn/conf/opmn.xml $ORACLE_HOME/opmn/conf/opmn.xml.bak_bf_alloc
vi $ORACLE_HOME/opmn/conf/opmn.xml
设置语言环境
<process-type id="alloc_oc4j" module-id="OC4J" status="enabled">
<environment>
<variable id="LANG" value="en_US" />
</environment>
$ORACLE_HOME/opmn/bin/opmnctl reload
$ORACLE_HOME/opmn/bin/opmnctl @cluster startproc ias-component=alloc_group
JAVA_HOME=$ORACLE_HOME/jdk
export JAVA_HOME
cp /d01/app/oracle/OraHome_1/network/admin/tnsnames.ora /d01/app/oracle/product/10.1.3.1/OracleAS_2/network/admin/
cd /d01/stage/retail/alloc/alloc/application
./install.sh
输入:
Alloc/RMS 13 JDBC URL: jdbc:oracle:oci:@retl
Allocation schema: ALLOC13DEV
RMS 13 schema: RMS13DEV
需要rpm_oc4j
application name: rpm13
alloc安装完成后会自动启动一个ocm的安装,此安装在最后一步向oracle的configuration manager server 注册时因为超时而失败。
安装测试:
http://retek13.hand-china.com:2000/alloc/index.jsp
SELECT * FROM ALC_USERS
输入用户名:RETEK
密码:retek
===============================================================================
六、RWMS 安装
按照rwms的ig安装
6.1) RWMS DB 安装
6.1.1)创建OFA目录
su – oracle
ORACLE_BASE=/d01/app/oracle
ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1
ORACLE_SID=rwms
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
RWMS_STAGEDIR=/d01/stage/retail/rwms/dbserverunix
export RWMS_STAGEDIR
NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG
cd $ORACLE_BASE/oradata
mkdir $ORACLE_BASE/oradata/rwms
mkdir $ORACLE_BASE/admin/rwms
mkdir $ORACLE_BASE/admin/rwms/adump
mkdir $ORACLE_BASE/admin/rwms/bdump
mkdir $ORACLE_BASE/admin/rwms/cdump
mkdir $ORACLE_BASE/admin/rwms/udump
mkdir $ORACLE_BASE/admin/rwms/dpdump
mkdir $ORACLE_BASE/admin/rwms/pfile
mkdir $ORACLE_BASE/admin/rwms/arch
cp $RWMS_STAGEDIR/create_db/init102_release.ora $ORACLE_HOME/dbs/initrwms.ora
更改正确的路径和Dbname:
vi $ORACLE_HOME/dbs/initrwms.ora (ok)
vi $RWMS_STAGEDIR/create_db/crdb1.sql
vi $RWMS_STAGEDIR/create_db/crdb2.sql
vi $RWMS_STAGEDIR/create_db/crdb3.sql
vi $RWMS_STAGEDIR/create_db/create_rwms_tablespaces.sql
运行crdb3.sql时, xdb_protocol.log 中有错误,原因是执行到某个操作时,报告不能分配share pool; 因为我把默认的sga参数都调整到原来的一半了,原来的SGA是1G,我调整到了512M ,特别是share pool也被我从350M 调整到了175M,在安装过程中出现了share pool不够用的情况,Action ,调大share pool 到原来的350M,其他依然是原来的一半,重启数据库后继续:
spool xdb_protocol.log
@$ORACLE_HOME/rdbms/admin/catqm.sql change_on_install SYSAUX TEMP;
spool off
@$ORACLE_HOME/rdbms/admin/utlrp.sql
重新运行可以。
创建Schema:
sqlplus ‘/as sysdba’
create role developer;
create role wms_user;
cd $RWMS_STAGEDIR/utility
sqlplus ‘/as sysdba’
@create_user.sql
@rwms_owner_grants.sql
创建RIB对象
sqlplus ‘/as sysdba’
ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "SYSTEM"
ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "RETEK_DATA"
ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "RETEK_INDEX"
ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "LOB_DATA"
cd $RWMS_STAGEDIR/rib_objects/ddl
sqlplus rwms13dev/********
@rib13ddl.sql
log显示很多表创建失败,主要是对DATA_MEDIUM , DATA_LARGE表空间无权限
sqlplus ‘/as sysdba’
ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "DATA_MEDIUM";
ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "INDEX_MEDIUM";
ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "DATA_LARGE";
ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "INDEX_LARGE";
cd $RWMS_STAGEDIR/rib_objects/db_objects/130
sqlplus rwms13dev/********
Sql>@InstallAndCompileAllRibOracleObjects.sql
创建rwms对象:
cd $RWMS_STAGEDIR/types/130
sqlplus rwms13dev/********
@rwms13type.sql
cd $RWMS_STAGEDIR/ddl
sqlplus rwms13dev/********
@rwms13.sql
log显示很多表创建失败,主要是对DATA_MEDIUM , DATA_LARGE表空间无权限
sqlplus ‘/as sysdba’
ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "DATA_MEDIUM";
ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "INDEX_MEDIUM";
ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "DATA_LARGE";
ALTER USER "RWMS13DEV" QUOTA UNLIMITED ON "INDEX_LARGE";
再次运行rwms13.sql
cd $RWMS_STAGEDIR/triggers/130
sqlplus rwms13dev/********
@rwms13trg.sql
cd $RWMS_STAGEDIR/db_objects/130
sqlplus rwms13dev/********
@rwms13dbo.sql
cd $RWMS_STAGEDIR/utility
sqlplus rwms13dev/********
@inv_obj_comp.sql
插入初始化数据:
cd $RWMS_STAGEDIR/data/130
sqlplus rwms13dev/********
@create_base_data.sql
升级到1301:
cd $RWMS_STAGEDIR/dbcs/1301
sqlplus rwms13dev/********
@patch1301dbcs.sql
cd $RWMS_STAGEDIR/db_objects/1301
sqlplus rwms13dev/********
@patch1301rwms.sql
cd $RWMS_STAGEDIR/data/1301
sqlplus rwms13dev/********
@patch1301ctl.sql
cd $RWMS_STAGEDIR/utility
sqlplus rwms13dev/********
@inv_obj_comp.sql
升级到1302:
cd $RWMS_STAGEDIR/rib_objects/db_objects/1302
sqlplus rwms13dev/********
Sql>@InstallAndCompileAllRibOracleObjects.sql
cd $RWMS_STAGEDIR/types/1302
sqlplus rwms13dev/********
Sql>@patch1302types.sql
cd $RWMS_STAGEDIR/dbcs/1302
sqlplus rwms13dev/********
Sql>@patch1302dbcs.sql
cd $RWMS_STAGEDIR/db_objects/1302
sqlplus rwms13dev/********
Sql>@patch1302rwms.sql
cd $RWMS_STAGEDIR/utility
sqlplus rwms13dev/********
@inv_obj_comp.sql
cd $RWMS_STAGEDIR/data/1302
sqlplus rwms13dev/********
Sql>@base_reports_parameters.sql
Sql>@I18N_main_script.sql
升级到13.1
cd $RWMS_STAGEDIR/rib_objects/db_objects/131
sqlplus rwms13dev/********
Sql>@InstallAndCompileAllRibOracleObjects.sql
cd $RWMS_STAGEDIR/types/131
sqlplus rwms13dev/********
Sql>@patch131types.sql
cd $RWMS_STAGEDIR/dbcs/131
sqlplus rwms13dev/********
Sql>@patch131dbcs.sql
cd $RWMS_STAGEDIR/triggers/131
sqlplus rwms13dev/********
Sql>@patch131trg.sql
cd $RWMS_STAGEDIR/db_objects/131
sqlplus rwms13dev/********
Sql>@patch131rwms.sql
cd $RWMS_STAGEDIR/utility
sqlplus rwms13dev/********
@inv_obj_comp.sql
cd $RWMS_STAGEDIR/data/131
sqlplus rwms13dev/********
Sql>
@base_copyright_info.sql
@base_currency.sql
@base_item_master.sql
@13.1_main_script.sql
————————————————————————————-
6.2) RWMS APP 安装
6.2.1 准备环境变量:
设置环境变量:
su – oracle
INSTALL_DIR=/d01/app/retail_apps
Export INSTALL_DIR
cd $INSTALL_DIR
cp -R /d01/stage/retail/rwms/appserverunix/* .
cd $INSTALL_DIR/rwms
cp -R $INSTALL_DIR/forms_scripts $INSTALL_DIR/rwms/
rm -fR $INSTALL_DIR/forms_scripts
ORACLE_HOME=/d01/app/oracle/OraHome_1
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/opmn/bin:$ORACLE_HOME/dcm/bin:$INSTALL_DIR/rwms/forms_scripts:$PATH
export ORACLE_HOME PATH
ORACLE_SID=rwms
export ORACLE_SID
NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG
CLASSPATH=$ORACLE_HOME/jlib/importer:$ORACLE_HOME/jlib/debugger.jar:$ORACLE_HOME/jlib/utj.jar:$ORACLE_HOME/jlib/ewt3.jar:$ORACLE_HOME/jlib/share.jar:$ORACLE_HOME/jlib/dfc.jar:$ORACLE_HOME/jlib/help4.jar:$ORACLE_HOME/jlib/oracle_ice.jar:$ORACLE_HOME/jlib/jewt4.jar
export CLASSPATH
FORMS_BUILDER_CLASSPATH=$CLASSPATH
FORMS_PATH=$INSTALL_DIR/rwms/forms/bin:$ORACLE_HOME/forms
REPORTS_PATH=$INSTALL_DIR/rwms/reports/bin:$ORACLE_HOME/forms
TK_UNKNOWN=$ORACLE_HOME/guicommon/tk/admin
UP=rwms13dev/********@rwms
export FORMS_BUILDER_CLASSPATH FORMS_PATH TK_UNKNOWN UP
在tnsnames.ora中添加rwms
允许xserver链接
su – root
xhost +
确认数据库已经启动
编译pll:
cp $INSTALL_DIR/rwms/forms/src/*.pll $INSTALL_DIR/rwms/forms/bin/
cd $INSTALL_DIR/rwms/forms/bin/
forms.pll.sh
cp $INSTALL_DIR/rwms/forms/src/*.fmb $INSTALL_DIR/rwms/forms/bin/
cd $INSTALL_DIR/rwms/forms/bin/
forms.fmb.sh
cp $INSTALL_DIR/rwms/forms/src/*.mmb $INSTALL_DIR/rwms/forms/bin/
cd $INSTALL_DIR/rwms/forms/bin/
menus.mmb.sh
rm -f *.mmb
cp $INSTALL_DIR/rwms/reports/bin/label.prt $INSTALL_DIR/rwms/extras/
安装帮助:
启动ias,创建一个oc4j实例:rwms_help_instance,把rwms-help.war部署上去。
启动FormServer
$ORACLE_HOME/opmn/bin/opmnctl startall
$ORACLE_HOME/bin/emctl start iasconsole
为RWMS配置AppServer:
cp $ORACLE_HOME/forms/admin/resource/US/fmrweb.res $ORACLE_HOME/forms/server/rwms_key_mapping.res
vi $ORACLE_HOME/forms/server/rwms_key_mapping.res (把ig中的键盘映射内容拷贝进去)
9 : 0 : "Tab" : 1 : "Next Field"
9 : 1 : "Shift+Tab" : 2 : "Previous Field"
85 : 2 : "Ctrl+U" : 3 : "Clear Field"
38 : 0 : "Up" : 6 : "Up"
80 : 2 : "Ctrl+P" : 6 : "Up"
40 : 0 : "Down" : 7 : "Down"
76 : 2 : "Ctrl+L" : 7 : "Down"
33 : 0 : "PageUp" : 12 : "Scroll Up"
34 : 0 : "PageDown" : 13 : "Scroll Down"
69 : 2 : "Ctrl+E" : 22 : "Edit"
10 : 0 : "Return" : 27 : "Return"
81 : 2 : "Ctrl+Q" : 32 : "Exit"
112 : 2 : "Ctrl+k" : 35 : "Show Keys"
49 : 2 : "Ctrl+1" : 83 : "F1"
50 : 2 : "Crtl+2" : 84 : "F2"
51 : 2 : "Ctrl+3" : 85 : "F3"
52 : 2 : "Ctrl+4" : 86 : "F4"
53 : 2 : "Ctrl+5" : 87 : "F5"
54 : 2 : "Ctrl+6" : 88 : "F6"
55 : 2 : "Ctrl+7" : 89 : "F7"
56 : 2 : "Ctrl+8" : 90 : "F8"
57 : 2 : "Ctrl+9" : 91 : "F9"
27 : 0 : "Esc" : 82 : "F10"
86 : 1 : "Shift+V" : 29 : "List of Values"
cp $ORACLE_HOME/Apache/Apache/conf/httpd.conf $ORACLE_HOME/Apache/Apache/conf/httpd.conf.bak_bf_rwms
mkdir /d01/app/retail_apps/rwms/temp
mkdir /d01/app/retail_apps/rwms/reptemp
mkdir /d01/app/retail_apps/rwms/web_html
vi $ORACLE_HOME/Apache/Apache/conf/httpd.conf
添加内容:
Listen 7878
<VirtualHost *:7878>
ServerName retek13.hand-china.com
ServerAlias retek13.hand-china.com.*
DocumentRoot "/d01/app/oracle/OraHome_1/Apache/Apache/htdocs"
Alias /web_html/ "/d01/app/retail_apps/rwms/web_html/"
Alias /web_gif/ "/d01/app/retail_apps/rwms/web_gif/"
Alias /temp/ "/d01/app/retail_apps/rwms/temp/"
Alias /rwms_reptemp/ "/d01/app/retail_apps/rwms/reptemp/"
Alias /rf_launch_value/ "/d01/app/retail_apps/rwms/rf_launch/"
</VirtualHost>
编辑env文件:
cp $ORACLE_HOME/forms/server/default.env $ORACLE_HOME/forms/server/rwms.env
vi $ORACLE_HOME/forms/server/rwms.env
添加:
FORMS_PATH=/d01/app/retail_apps/rwms/forms/bin:$ORACLE_HOME/forms
ORACLE_RWMS_REPORTS_HOST=http://retek13.hand-china.com:7878/
ORACLE_RWMS_RWSERVER=reports/rwservlet
ORACLE_RWMS_REPORTS_SERVER=rwms_reports_server+envid=rwms
REPORTS_TEMP=/d01/app/retail_apps/rwms/reptemp
REPORTS_PATH=/d01/app/retail_apps/rwms/reports/bin:$ORACLE_HOME/forms
ORACLE_RWMS_EXTRAS_PATH=/d01/app/retail_apps/rwms/extras
NLS_DATE_FORMAT=DD-MON-RR
NLS_LANG=AMERICAN_AMERICA.UTF8
FORMS_REJECT_GO_DISABLED_ITEM=FALSE
备注:<report_server>究竟该填写什么,ig中讲得不清楚。
配置formsweb.cfg …尚未开始。
添加
[rwms]
envfile=rwms.env
width=950
height=685
form=logon_scr.fmx
separateFrame=true
lookAndFeel=Oracle
colorScheme=swan
userid=rwms13dev/********@rwms
baseHTMLjinitiator=basejpi.htm
jpi_download_page=http://java.sun.com/products/archive/j2se/1.4.2_06/index.html
jpi_classid=clsid:CAFEEFAC-0014-0002-0006-ABCDEFFEDCBA
jpi_codebase=http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,06
jpi_mimetype=application/x-java-applet;jpi-version=1.4.2_06
[rwms_hh]
envfile=rwms.env
width=100%
height=100%
form=hh_intro_s.fmx
separateFrame=false
lookAndFeel=Oracle
colorScheme=swan
Logo=false
background=false
ShowMenuBar=false
ShowStatusBar=false
baseHTML=base.htm
baseHTMLjinitiator=basejpi.htm
jpi_download_page=http://java.sun.com/products/archive/j2se/1.4.2_06/index.html
jpi_classid=clsid:CAFEEFAC-0014-0002-0006-ABCDEFFEDCBA
jpi_codebase=http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,06
jpi_mimetype=application/x-java-applet;jpi-version=1.4.2_06
otherparams=term=/d01/app/oracle/OraHome_1/forms/server/key_mapping.res usesdi=YES
splashScreen=false
HTMLbodyAttrs=scroll=”no” topmargin=”0”leftmargin=”0” marginheight=”0” marginwidth=”0”onload=”window.moveTo(0,0);”
userid=rwms13dev/********@rwms
[rwms_tm]
envfile=rwms.env
width=100%
height=100%
form=tm_intro_s.fmx
separateFrame=false
lookAndFeel=Oracle
Logo=false
background=false
ShowMenuBar=false
ShowStatusBar=false
baseHTML=base.htm
baseHTMLjinitiator=basejpi.htm
jpi_download_page=http://java.sun.com/products/archive/j2se/1.4.2_06/index.html
jpi_classid=clsid:CAFEEFAC-0014-0002-0006-ABCDEFFEDCBA
jpi_codebase=http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,06
jpi_mimetype=application/x-java-applet;jpi-version=1.4.2_06
otherparams=term=/d01/app/oracle/OraHome_1/forms/server/rwms_key_mapping.res usesdi=YES
splashScreen=false
HTMLbodyAttrs=scroll=”no” topmargin=”0” leftmargin=”0” marginheight=”0” marginwidth=”0” onload=”window.moveTo(0,0);”
userid=rwms13dev/********@rwms
[rwms_wr]
envfile=rwms.env
width=100%
height=100%
form=wr_intro_s.fmx
separateFrame=false
lookAndFeel=Oracle
colorScheme=swan
Logo=false
background=false
ShowMenuBar=false
ShowStatusBar=false
baseHTML=base.htm
baseHTMLjinitiator=basejpi.htm
jpi_download_page=http://java.sun.com/products/archive/j2se/1.4.2_06/index.html
jpi_classid=clsid:CAFEEFAC-0014-0002-0006-ABCDEFFEDCBA
jpi_codebase=http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,06
jpi_mimetype=application/x-java-applet;jpi-version=1.4.2_06
otherparams=term=/d01/app/oracle/OraHome_1/forms/server/rwms_key_mapping.res usesdi=YES
splashScreen=false
HTMLbodyAttrs=scroll=”no” topmargin=”0”leftmargin=”0” marginheight=”0” marginwidth=”0”onload=”window.moveTo(0,0);”
userid=rwms13dev/********@rwms
cp $ORACLE_HOME/reports/conf/rep_retek13_oracleas1.conf $ORACLE_HOME/reports/conf/rwms_reports_server.conf
vi $ORACLE_HOME/reports/conf/rwms_reports_server.conf
添加:
<environment id="rwms">
<envVariable name="REPORTS_PATH" value="/d01/app/retail_apps/rwms/reports/bin"/>
<envVariable name="NLS_LANG" value="AMERICAN_AMERICA.UTF8"/>
</environment>
cp $ORACLE_HOME/reports/conf/rwms_reports_server.conf $ORACLE_HOME/forms/server/
vi /d01/app/retail_apps/rwms/rf_launch/rwms_rf_menu.htm
更改值如下:
var hh_device = "http://retek13.hand-china.com:7878/forms/frmservlet?config=rwms_hh";
var tm_device = "http://retek13.hand-china.com:7878/forms/frmservlet?config=rwms_tm";
var wr_device = "http://retek13.hand-china.com:7878/forms/frmservlet?config=rwms_wr";
var exit_script ="http://retek13.hand-china.com:7878/rf_launch_value/close.htm";
重启FormServer:
停止FormServer
$ORACLE_HOME/bin/emctl stop iasconsole
$ORACLE_HOME/opmn/bin/opmnctl stopall
启动FormServer
$ORACLE_HOME/opmn/bin/opmnctl startall
$ORACLE_HOME/bin/emctl start iasconsole
测试:
http://retek13.hand-china.com:7878/forms/frmservlet?config=rwms
IG 中讲的登录用户信息是错误的,通过跟踪session的sql可以知道正确的用户存放于dms_user表中,可以从这张表获取用户信息。
select * from dms_user
———————————————————————————————–
为rwms配置ocm
vi $ORACLE_HOME/retail_inventory/oracle_retail_ARIApp.properties
添加如下两行:
rmsappsvr.retek13.hand-china.com.rwms+RWMS_INSTALL_DATE=2010-12-30 11:38:10
rmsappsvr.retek13.hand-china.com.rwms+RWMS_VERSION=13.1.0
===============================================================================
五、ARI 安装
5.1 DB object 安装
—————————————————————–
创建 Tablespace :
cd /d01/stage/retail/ari/dbserverunix/create_db
vi create_ari_tablespaces.sql
更改数据文件的绝对路径
————————————————————————————-
— Script: create_ari_tablespaces.sql
— Execute as: sysdba
— Note: Before running this script:
— Modify <datafile_path> values.
— Modify datafile storage parameters and sizes as needed
———————————————————————————-
spool create_ari_tablespaces.log
CREATE TABLESPACE ARI_INDEX
DATAFILE ‘/d01/app/oracle/oradata/retl/ari_index01.dbf’ SIZE 500M
AUTOEXTEND ON NEXT 100M MAXSIZE 2000M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT MANUAL
;
CREATE TABLESPACE ARI_DATA
DATAFILE ‘/d01/app/oracle/oradata/retl/ari_data01.dbf’ SIZE 500M
AUTOEXTEND ON NEXT 100M MAXSIZE 2000M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT MANUAL
;
spool off
Exit
—————————————————————————————————————————————–
su – oracle
ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1
ORACLE_SID=retl
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
NLS_LANG=AMERICAN_AMERICA.UTF8
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH NLS_LANG
sqlplus ‘/as sysdba’
Sql>@create_ari_tablespaces.sql;
创建Schema (密码都设置为********)
cd /d01/stage/retail/ari/dbserverunix/utility
sqlplus ‘/as sysdba’
Sql>@create_master_schema_user.sql;
Schema 输入:ARI131M
Sql>@create_gen_schema_user.sql
Schema 输入: ARI131G
创建database object
cd /d01/stage/retail/ari/dbserverunix/ddl
sqlplus ari131m/********@retl
Sql>@ari13.sql
cd /d01/stage/retail/ari/dbserverunix/db_objects
sqlplus ari131m/********@retl
Sql>@ari13dbo.sql
cd /d01/stage/retail/ari/dbserverunix/utility
sqlplus ari131m/********@retl
Sql>@inv_obj_comp.sql
创建 ARI Data
cd /d01/stage/retail/ari/dbserverunix/data
sqlplus ari131m/********@retl
Sql>@ari13ctl.sql
cd /d01/stage/retail/ari/dbserverunix/data/forms_menu_elements
sqlplus ari131m/********@retl
Sql>@base_form_menu_elements.sql;
创建语言数据
cd /d01/stage/retail/ari/dbserverunix/data/forms_menu_elements
sqlplus ari131m/********@retl
Sql>@base_form_menu_elements_langs_zhs.sql;
Alter ARI Data
cd /d01/stage/retail/ari/interface/MTS_Support
sqlplus ari131m/********@retl
Sql>@mts_realm.sql;
Sql>@mts_parm_type.sql;
SQL>@mts_parm.sql
SQL>@update_group_lookup.sql
Create Generated Schema Synonyms
cd /d01/stage/retail/ari/dbserverunix/utility
sqlplus ari131g/********@retl
Sql>@generated_syns.sql
Create User Synonyms
cd /d01/stage/retail/ari/dbserverunix/utility
sqlplus ari131m/********@retl
Sql>@user_syns.sql
——————————————–
警告:缺少 user_syns.sql 文件 。
5.2 Application Server 层 安装
—————————————————————–
su – oracle
mkdir /d01/app/retail_apps/ari
cd /d01/app/retail_apps/ari
unzip ari131appserver.zip
设置环境变量:
INSTALL_DIR=/d01/app/retail_apps/ari
Export INSTALL_DIR
ORACLE_HOME=/d01/app/oracle/OraHome_1
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/opmn/bin:$ORACLE_HOME/dcm/bin:$INSTALL_DIR/forms10gr2_scripts:$PATH
export ORACLE_HOME PATH
ORACLE_SID=retl
export ORACLE_SID
NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG
CLASSPATH=$ORACLE_HOME/jlib/importer:$ORACLE_HOME/jlib/debugger.jar:$ORACLE_HOME/jlib/utj.jar:$ORACLE_HOME/jlib/ewt3.jar:$ORACLE_HOME/jlib/share.jar:$ORACLE_HOME/jlib/dfc.jar:$ORACLE_HOME/jlib/help4.jar:$ORACLE_HOME/jlib/oracle_ice.jar:$ORACLE_HOME/jlib/jewt4.jar
export CLASSPATH
FORMS_BUILDER_CLASSPATH=$CLASSPATH
FORMS_PATH=$INSTALL_DIR/forms/bin:$INSTALL_DIR/forms/src:$ORACLE_HOME/forms
TK_UNKNOWN=$ORACLE_HOME/guicommon/tk/admin
UP=ari131m/********@retl
export FORMS_BUILDER_CLASSPATH FORMS_PATH TK_UNKNOWN UP
允许xserver链接
su – root
xhost +
启动数据库
另起一个session 启动数据库
编译:
这里注意:不能按照安装文档的说法把文件从src目录拷贝到bin目录,否则会出现错误 FRM-30312: Failed to compile the library. 错误。
原因是frm_cmp.sh 试图从原目录中拷贝fmb文件到当前执行编译命令的目录,冲突了。
cd $INSTALL_DIR/forms/bin/
pll2plx10gr2_ari
rm -f *.plx
cp $INSTALL_DIR/forms/src/*.fmb $INSTALL_DIR/forms/bin/
fmb2fmx10gr2_fm
rm -f fm_*.fmx
Fmb2fmx10gr2
for PROG in `ls *.fmb | grep -v fm_`
do PROGNAME=`echo $PROG`
rm $PROGNAME
done
cp $INSTALL_DIR/forms/src/*.mmb $INSTALL_DIR/forms/bin/
mmb2mmx10gr2
rm -f *.mmb
为ARI配置Appserver:
cp $ORACLE_HOME/forms/server/default.env $ORACLE_HOME/forms/server/ari.env
vi ari.env
添加如下变量:
FORMS_PATH=/d01/app/retail_apps/ari/forms/bin:/d01/app/oracle/OraHome_1/forms
NLS_DATE_FORMAT=DD-MON-RR
FORMS_USERNAME_CASESENSITIVE=1
NLS_LANG=AMERICAN_AMERICA.UTF8
FORMS_USERNAME_CASESENSITIVE=1
FORMS_REJECT_GO_DISABLED_ITEM=FALSE
sqlplus ari131m/********@retl
Sql>Update ari_language set webhelp_server=’http://retek13.hand-china.com:7777′
Vmware host无ip地址时,对guest机器中数据库的访问会变慢;
cd $ORACLE_HOME/forms/server
cp formsweb.cfg formsweb.cfg.bak_before_ari
vi formsweb.cfg 添加:
[ari]
envfile=ari.env
width=850
height=585
separateFrame=true
form=arimstr.fmx
lookAndFeel=Oracle
colorScheme=swan
baseHTMLjinitiator=basejpi.htm
jpi_download_page=http://java.sun.com/products/archive/j2se/1.4.2_06/index.html
jpi_classid=clsid:CAFEEFAC-0014-0002-0006-ABCDEFFEDCBA
jpi_codebase=http://java.sun.com/products/plugin/autodl/jinstall-1_4_2-windows-i586.cab#Version=1,4,2,06
jpi_mimetype=application/x-java-applet;jpi-version=1.4.2_06
配置帮助文件:
cp $ORACLE_HOME/Apache/Apache/conf/httpd.conf $ORACLE_HOME/Apache/Apache/conf/httpd.conf.bak_bf_ari
vi $ORACLE_HOME/Apache/Apache/conf/httpd.conf
添加别名:
Alias /english/ “/d01/app/retail_apps/ari/web_html/WebHelp”
运行测试:
启动FormServer
$ORACLE_HOME/opmn/bin/opmnctl startall
$ORACLE_HOME/bin/emctl start iasconsole
测试
http://retek13.hand-china.com:7777/forms/frmservlet?config=ari
为ARI配置OCM:
cd $ORACLE_HOME/retail_inventory
vi oracle_retail_ARIApp.properties
添加如下两行:
rmsappsvr.retek13.hand-china.com.ari13inst1+ARI_INSTALL_DATE=2010-12-28 11:38:10
rmsappsvr.retek13.hand-china.com.ari13inst1+ARI_VERSION=13.1.0
安装Ari导入导出工具:
ariiet131.exe 安装windows客户端上的,可在需要的时候安装。
====================================================================
四、RETL安装
按照 retl的developer guider安装
su – oracle
准备安装目标目录:
mkdir /d01/app/retail_apps/retl
解压缩安装介质到stage目录后进入Stage目录:
cd /d01/stage/retail/alloc/rfx-13.1
./install.sh
安装过程很简单:
—————————————-
[oracle@retek13 rfx-13.1]$ ./install.sh
Enter directory for RETL software:
—> \c
/d01/app/retail_apps/retl
Is this the correct directory for the install? y or n
RFX_HOME: /d01/app/retail_apps/retl
—> \c
y
Creating install directory in /d01/app/retail_apps/retl …
Copying Library Files…
Copying Sample Files…
Copying Executables…
Copying Config File…
Successful completion of RETL Install
To complete the RETL setup and installation:
1) Place the following in a .kshrc/ .profile to retain setup variables:
RFX_HOME=/d01/app/retail_apps/retl
PATH=/d01/app/retail_apps/retl/bin:$PATH
export RFX_HOME PATH
2) Be sure to verify any additional environment setup as per the "Setup" section
of the Programmers Guide.
3) Verify the installation by running the following command:
$RFX_HOME/bin/verify_retl
——————————————-
执行验证:
$RFX_HOME/bin/verify_retl
报java例外,
Exception in thread "main" java.lang.ClassFormatError: com.retek.retl.base.RETL (unrecognized class file version)
at java.lang.VMClassLoader.defineClass(libgcj.so.7rh)
原因:操作系统自带的java 是1.4版本的,13.1的retl要求1.6的jdk,下载一个:
http://java.sun.com/javase/index.jsp
JAVA_HOME=/d01/jdk1.6.0_23
export JAVA_HOME
RFX_HOME=/d01/app/retail_apps/retl
export RFX_HOME
ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1
ORACLE_SID=retl
PATH=$RFX_HOME/bin:$JAVA_HOME:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
NLS_LANG=AMERICAN_AMERICA.UTF8
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH NLS_LANG
再次运行验证
$RFX_HOME/bin/verify_retl
[oracle@retek13 bin]$ $RFX_HOME/bin/verify_retl
Checking RETL Environment…passed!
Checking RETL binary…passed!
Running samples…failed!
===================================================================
RETL Installation is faulty! One or more tests failed in the samples directory.\n See /tmp/verifyretl-3558.log for failed tests
If tests have failed due to unexpected reasons, please contact support.
Please correct this problem and run the following line to verify
your installation is correct:
verify_retl
===================================================================
More /tmp/verifyretl-3558.log
[oracle@retek13 bin]$ more /tmp/verifyretl-8212.log
[ binop] [ Passed ]!
[ export] [ Passed ]!
[ fieldmod] [ Passed ]!
[ filter] [ **FAILED** ] – 1 failure(s).
[ funnel] [ **FAILED** ] – 1 failure(s).
[ generator] [ Passed ]!
[ import] [ Passed ]!
[ retl-training] [ Passed ]!
[ sort] [ **FAILED** ] – 1 failure(s).
[ verify_db] [ Passed ]!
———————————————
filter 测试失败,进入
cd /d01/app/retail_apps/retl/samples/filter
查看 out3.txt 可知 gsort 可执行文件未找到,这个文件在 /d01/app/retail_apps/retl/bin目录下是个链接,执行同目录下的gsort.Linux, 这个文件不存在; 在RETL的安装文档中讲到 retl的gsort 应链接到linux本身的sort程序,所以还要执行:
rm -f $RFX_HOME/bin/gsort
ln -s /bin/sort $RFX_HOME/bin/gsort
再次测试通过
[oracle@retek13 retl]$ $RFX_HOME/bin/verify_retl
Checking RETL Environment…passed!
Checking RETL binary…passed!
Running samples…/d01/app/retail_apps/retl/samples
passed!
=========================================================================
WARNING : RETL was not verified with a database. If database support
is required in the future, please run the following:
verify_retl -do
Congratulations! Your RETL environment and installation passed all tests
See the programmer’s guide for more information about how to further test
your database installation (if applicable).
=========================================================================
Exiting…saving output in /tmp/verifyretl-25217.log
For Oracle的测试也是成功的:
[oracle@retek13 retl]$ $RFX_HOME/bin/verify_retl -do
Checking RETL Environment…found ORACLE environment…passed!
Checking RETL binary…passed!
Running samples…/d01/app/retail_apps/retl/samples
passed!
=========================================================================
Congratulations! Your RETL environment and installation passed all tests
See the programmer’s guide for more information about how to further test
your database installation (if applicable).
=========================================================================
Exiting…saving output in /tmp/verifyretl-26003.log
总结:
运行RETL前先设置环境变量:
su – oracle
JAVA_HOME=/d01/jdk1.6.0_23
export JAVA_HOME
RFX_HOME=/d01/app/retail_apps/retl
export RFX_HOME
ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1
ORACLE_SID=retl
PATH=$RFX_HOME/bin:$JAVA_HOME:$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
NLS_LANG=AMERICAN_AMERICA.UTF8
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH NLS_LANG
===============================================================================
三、RMS安装
3.1)RMS DB安装
3.1.1) partition 策略设置:我们这里安装开发环境,不需要(注意正式环境是需要做的)
3.1.2)创建OFA目录
su – oracle
ORACLE_BASE=/d01/app/oracle
ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1
ORACLE_SID=retl
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
RMS_STAGEDIR=/d01/stage/retail/rms/rms
export RMS_STAGEDIR
cd $ORACLE_BASE/oradata
mkdir $ORACLE_BASE/oradata/retl
mkdir $ORACLE_BASE/admin/retl
mkdir $ORACLE_BASE/admin/retl/adump
mkdir $ORACLE_BASE/admin/retl/bdump
mkdir $ORACLE_BASE/admin/retl/cdump
mkdir $ORACLE_BASE/admin/retl/udump
mkdir $ORACLE_BASE/admin/retl/dpdump
mkdir $ORACLE_BASE/admin/retl/pfile
mkdir $ORACLE_BASE/admin/retl/arch
mkdir $ORACLE_BASE/utlfile
3.3.3) 创建数据库
RMS_STAGEDIR=/d01/stage/retail/rms/rms
export RMS_STAGEDIR
cp $RMS_STAGEDIR/dbschema/dbscripts_rms/create_db/init111.ora $ORACLE_HOME/dbs/initretl.ora
更改正确的路径和Dbname:
vi $ORACLE_HOME/dbs/initretl.ora
vi $RMS_STAGEDIR/dbschema/dbscripts_rms/create_db/crdb1.utf8.sql
vi $RMS_STAGEDIR/dbschema/dbscripts_rms/create_db/crdb2.sql
vi $RMS_STAGEDIR/dbschema/dbscripts_rms/create_db/crdb3.sql
vi $RMS_STAGEDIR/dbschema/dbscripts_rms/create_db/create_rms_tablespaces.sql
Sqlplus 运行上述脚本
sqlplus ‘/as sysdba’
创建schema: rms13dev
密码:********
创建schema:alloc13dev
密码:********
安装rms schema
———————————————————————————————————————————————————————————————
./runinstall
可能遇到的错误:
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/dbc_scripts中的sql执行是会出错,错误在:
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/error
1、dbc_system_option.err
这个错误是因为要删除某些约束对象不存在而引发的ora错误,因为dbc_system_option.sql中 有句话whenerver error exit ;导致退出,实际上此错误可忽略,可把这句话注释掉,再次运行./runinstall ,选择继续模式,而不要选择重新来过的模式。
改正后重新运行,还会再次卡在dbc_system_option.sql ,但看错误log实际已经执行完毕,因此把dbc_system_option.err删除后再次运行./runinstall即可。
2、dbc_deal_head.err
这个错误要根据实际的错误文件提示去解决:
缺类型定义:TABLE_COLUMN_REC
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "TABLE_COLUMN_REC"
定义文件在:/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/table_column_rec.sql
把这个文件单独运行后再继续可以过。
3、dbc_salweek_c_daily.err
缺类型定义:TABLE_CONSTRAINT_REC 和 TABLE_CONSTRAINT_TBL
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "TABLE_CONSTRAINT_REC"
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/table_constraint_rec.sql
把找到的sql 单独执行以下即可:sqlplus rms13dev/********@retl ….
4、dbc_item_master.sql
这个文件得手动这行了, 要增加一个字段 CATCH_WEIGHT_TYPE varchar2(1) ,另外把已经成功执行的部分去掉,重复执行DDL语句是过不去的。
手工执行完毕后,把.err文件删除,然后resume
5、dbc_repl_attr_upd_hist.err
表 REPL_ATTR_UPD_HIST 不存在。
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l " REPL_ATTR_UPD_HIST"
表定义在: /d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.0.1/rms/dbcs/0300_repl_attr_upd_hist.sql
6、dbc_tsf_head.err
TABLE_INDEX_TBL 类型定义不存在
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "TABLE_INDEX_TBL"
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/table_index_rec.sql
7、0207_shipment.err
把 0207_shipment.sql中的 whenever sqlerror exit 去掉,把.err 文件删除, resume
把下面2句话去掉,resume
ALTER TABLE SHIPMENT DROP COLUMN BILL_TO_LOC_TYPE
/
ALTER TABLE SHIPMENT DROP COLUMN MATCH_LOCATION
/
8、0217_mv_currency_conversion_rates.err
报MV不存在,措施:把这段话注释掉。
–DROP MATERIALIZED VIEW MV_CURRENCY_CONVERSION_RATES;
9、c7636420_form_elements_langs_supvwedt.err
外键约束错误,item=LI_DELIVERY_POLICY 在表form_elements中不存在。
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "LI_DELIVERY_POLICY"
记录在下面的sql中存在:先后手工执行下面3个文件:
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/data/form_menu_elements/supvwedt_fmb.xml.sql
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/control_script/c7636420_form_elements_supvwedt.sql
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/control_script/c7636420_form_elements_langs_supvwedt.sql
单独执行上面的SQL后 resume
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "FINAL_DEST_IND"
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.0.2/rms/data/c7259107_form_elements.sql 中有这个字段的定义,单独执行其中的一条insert语句。
再次resume
10、c7636420_nav_access.err
System_options 表中缺少 INVC_MATCH_IND
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "INVC_MATCH_IND"
Bug: 在/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/dbc_script/dbc_system_options.sql 中已经没有这个字段,但SYSTEM_OPTIONS_SQL.pls这个package中还用这个字段,
CREATE OR REPLACE PACKAGE SYSTEM_OPTIONS_SQL
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "CREATE OR REPLACE PACKAGE SYSTEM_OPTIONS_SQL"
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/db_objects/syoptns.pls 中应用了INVC_MATCH_IND 但
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.0.2/rms/db_objects/syoptns.pls 中已经不再引用 INVC_MATCH_IND
而在13.1 patch中没有syoptns.pls ,在log中看13.0.2已经成功运行,正是怪啊。。。。
手工运行
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.0.2/rms/db_objects/syoptns.pls
Resume
11、c7636420_navigate.err
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "REPLENISHMENT"
外键约束错误,所需的外键内容在: /d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.0.2/rms/data/c7259107_nav_folder_base.sql
综合 前面若干错误,可判断13.0.1 和13.0.2 中的脚本未执行。虽然log显示已执行。这是为什么呢?
打开最早的log 可以看到:虽然ant运行了13.0.2 ,但是都未成功,相当于未运行,原因是13.0.2 使用了相对路径,而执行ant的程序不再13.0.2目录下。13.0.1也是这个问题。
SP2-0310: unable to open file "13.0.2/rms/data/c7429959_dba_policies.sql
这实际上是bug , 解决方案:
删除rms13dev,alloc13dev 用户,重新解压缩rms db 安装包, 到patch目录下去运行安装程序。
su – oracle
ORACLE_BASE=/d01/app/oracle
ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1
ORACLE_SID=retl
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
RMS_STAGEDIR=/d01/stage/retail/rms/rms
export RMS_STAGEDIR
NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG
@$RMS_STAGEDIR/dbschema/dbscripts_rms/utility/create_user.sql
@$RMS_STAGEDIR/dbschema/dbscripts_rms/allocation/utility/create_user.sql
cd /d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch
/d01/stage/retail/rms/rms/dbschema/install.sh
这个方法不行,依然不通。换方法,直接更改 patch中的
rmsdbstart.sql
reimdbstart.sql
allocdbstart.sql
allocuserdbstart.sql
把相对路径更改为绝对路径。
@@替换成
@@$RMS_STAGEDIR/dbschema/dbscripts_rms/required_patches/mom-dbpatch/
再次运行安装,这次13.0.1, 13.0.2 都安进去了,当然还有部分程序编译有问题。
但如下错误还是出现:
1、dbc_deal_head.err 还是出现了。 按老方法改后resume
2、dbc_salweek_c_daily.err
TABLE_CONSTRAINT_REC 类型的定义不存在, 按老方法改后resume
3、dbc_tsfhead.err 按老方法改后resume
4、c7636420_form_elements_langs_supvwedt.err
从 /d01/stage/retail/rms/rms/dbschema/dbscripts_rms/data/form_menu_elements/supvwedt_fmb.xml.sql 中找到这句话,单独执行后resume
INSERT INTO form_elements (FM_NAME, block_name, item_name, item_type, sub_item_name, default_label_prompt, default_access_key, base_ind) VALUES (
‘FM_SUPVWEDT’,’B_SUPS’,
‘LI_DELIVERY_POLICY’,’List Item’, ‘NONE’,
‘Delivery Policy’, NULL, ‘Y’
);
5、13.1 patch的rpm/error下面出现错误:
因为还存在无效对象,不让过
select * from user_objects where status !=’VALID’; 有71个无效对象。
5.1 LIKE_ITEM_SQL 缺类型定义 OBJ_TAX_INFO_TBL OBJ_TAX_INFO_REC
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "OBJ_TAX_INFO_TBL"
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l " OBJ_TAX_INFO_REC"
先后运行下面3个sql来创建这两个类型定义:
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/objtaxinfotype.sql
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/objtaxinfotypebody.sql
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/objtaxinfotypetbl.sql
再编译所有无效对象,然后再次查询
select * from user_objects where status !=’VALID’; 有41个无效对象
5.2 RMSAIASUB_SUPPLIER_VALIDATE 缺少类型定义:RIB_SupplierColRef_REC
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "RIB_SupplierColRef_REC"
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/SupplierColRef.sql
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "RIB_SupplierRef_TBL"
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/SupplierColRef.sql
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.0.2/rms/rib/db_objects/SupplierCollectionRef.sql
这些类型定义的sql在运行的时候报"object has been deleted" ,仔细看代码中的内容名称都被加上了双引号,把部分双引号去掉可以编译成功。
5.3 OBJ_CC_COST_EVENT_TBL 定义不存在
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "OBJ_CC_COST_EVENT_TBL"
find /d01/stage/retail/rms/rms -type f -mount |xargs fgrep -l "OBJ_CC_COST_EVENT_REC"
找不到,在google, metalink均找不到。
find /d01/stage/retail -type f -mount |xargs fgrep -l "OBJ_ISCL_SUPP_HIER_CHG_TBL"
find /d01/stage/retail -type f -mount |xargs fgrep -l "OBJ_TEMPL_RELN_EVENT_TBL"
find /d01/stage/retail -type f -mount |xargs fgrep -l "RIB_InvReqItem_REC"
find /d01/stage/retail -type f -mount |xargs fgrep -l OBJ_ELC_COST_EVENT_TBL
这些类型定义不存在,且也找不到在哪里。
OBJ_PP_COST_EVENT_TBL
OBJ_DEAL_PASSTHRU_EVENT_TBL
OBJ_TEMPL_RELN_EVENT_TBL
OBJ_SC_COST_EVENT_TBL
OBJ_ISCL_SUPP_HIER_CHG_TBL
OBJ_ELC_COST_EVENT_TBL
"RIB_ReportLocRef_REC"
"RIB_ReportLocDesc_REC"
"RIB_SupplierColDesc_REC"
这些文件可以在如下目录找到:
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/obj_elc_cost_event.sql
find /d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects -type f -mount |xargs fgrep -l OBJ_ELC_COST_EVENT_TBL
find /d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects -type f -mount |xargs fgrep -l obj_elc_cost_event_tbl
字符串查找区分大小写,按小写找可以找到:
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_invReqitem_REC
找不到,在rms的rib目录下也找不到,从独立的RIB安装包中查找,也找不到
但在。。中有:
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/rib_objects/db_objects/invReqDesc.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l "RIB_InvReqItem_REC"
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_InvReqItem_REC
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/InvReqDesc.sql
都可以找到;是大小写的原因;
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_InvReqItem_REC
CREATE_ORD_TSF_SQL 编译错误:原因 引用 RIB_InvReqItem_REC 类型的时候多了一个参数, 实际原因是RIB类型不是13.1最新的,解决方法更新到13.1最新的RIB类型定义。
RMSMFM_STORE 编译错误:原因 引用 RIB_StoreDesc_REC 类型的时候多了一个参数,实际原因是RIB类型不是13.1最新的,解决方法更新到13.1最新的RIB类型定义。
find /d01/stage/retail -type f -mount |xargs fgrep -l RMSMFM_STORE
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_ReportLocRef_REC
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/ReportLocRef.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_ExtOfReportLocRef_REC
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/ExtOfReportLocRef.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_ReportLocDesc_REC
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/ReportLocDesc.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_SupplierColDesc_REC
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/SupplierColDesc.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_Addr_REC
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/SupplierDesc.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l item_rec
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/obj_item_tab_rec.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_XItmSupCtyMfrDesc_TBL
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_DeliverySlotDesc_REC
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/DeliverySlotDesc.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_DeliverySlotRef_REC
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/DeliverySlotRef.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_ItemSupCtyMfrDesc_TBL
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/ItemDesc.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_ItemSupCtyMfrRef_REC
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/ItemSupCtyMfrRef.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_XItemSupCtyMfrRef_TBL
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/XItemRef.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_XStoreDesc_REC
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/XStoreDesc.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_ItemLocVirtRepl_REC
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/ItemLocDesc.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_LocPODesc_REC
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/LocPODesc.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_TsfDesc_REC
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/TsfDesc.sql
find /d01/stage/retail -type f -mount |xargs fgrep -l RIB_StoreDesc_REC
/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/StoreDesc.sql
把找到的这些SQL再运行一次,可解决所有的无效对象问题。
上述SQL中,除/ExtOfReportLocRef.sql在/d01/stage/retail/rms/rms/dbschema/dbscripts_rms/required_patches/mom-dbpatch/13.1/rms/objects/InstallAndCompileAllRibOracleObjects.sql中不存在,其他都有,也即Oralcle的安装文件确实漏了一个文件,但其他文件都没有漏;
在我的安装日志中,InstallAndCompileAllRibOracleObjects.sql是现实已经被执行的,但实际上这里面的很多文件未被执行;
下次安装再出现无效对象的话,建议再次运行这个文件即可。
——————————————————————————
总结:无效对象出现的原因都是因为13.1中的package 需要的很多在13.1中新增或者变更的RIB 相关的TYPE定义不一致,原因是13.1中的RIB相关的TYPE定义未执行;但看log是现实已成功执行。所以需要在比较是否安装文件中的安装SQL漏掉了这几个子SQL;
再次执行安装,选择resume方式,安装成功;
su – root
Xhost+
su – oracle
ORACLE_BASE=/d01/app/oracle
ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1
ORACLE_SID=retl
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
RMS_STAGEDIR=/d01/stage/retail/rms/rms
export RMS_STAGEDIR
NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG
cd $RMS_STAGEDIR\dbschema
./install.sh
安装rms batch
———————————————————————————————————————————————————————————————
Ig 里面使用oretail用户安装,我这里为简单起见,统一使用oracle用户(前面的application server安装也全部是是使用oracle用户的)
batch属于数据库节点的安装
su – root
Xhost+
su – oracle
cd /d01/stage/retail/rms
unzip rms13batch.zip
ORACLE_BASE=/d01/app/oracle
ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1
ORACLE_SID=retl
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export ORACLE_BASE ORACLE_HOME ORACLE_SID PATH
RMS_STAGEDIR=/d01/stage/retail/rms/rms
export RMS_STAGEDIR
NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG
先把数据库启了:
Lsnrctl start
Sqlplus ‘/as sysdba’
SQL>startup
准备安装目标目录:
mkdir /d01/app/retail_apps
mkdir /d01/app/retail_apps/rms
mkdir /d01/app/retail_apps/rms/batch
安装:
cd $RMS_STAGEDIR/batch
./install.sh
缺少demo_rdbms.mk文件,从另一个服务器相同版本的拷贝一个过来。
安装过程中需要输入一些参数,这些参数从rms schema的安装日志中获取: rms-install-dbschema.201012211630.log
/*************
The RMS database schema has been installed successfully.
The ReIM database tables have been installed in the RMS13DEV@retl RMS schema.
This is the database user that should be used by the ReIM application.
The following values should be used in the Invoice Matching application installer:
ReIM/RMS 13 JDBC URL: jdbc:oracle:oci:@retl
ReIM/RMS 13 schema: RMS13DEV
RMS 13 schema owner: RMS13DEV
The Allocation database tables have been installed in the RMS13DEV@retl RMS schema.
The following values should be used in the Allocation application installer:
Alloc/RMS 13 JDBC URL: jdbc:oracle:oci:@retl
Allocation schema: ALLOC13DEV
RMS 13 schema: RMS13DEV
****************/
安装过程比较快,大约7分钟吧,R13比R12的安装还是要方便很多。
安装rms application Server
———————————————————————————————————————————————————————————————
Ig 里面使用oretail用户安装,我这里为简单起见,统一使用oracle用户(前面的application server安装也全部是是使用oracle用户的)
ORACLE_HOME=/d01/app/oracle/OraHome_1
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export ORACLE_HOME PATH
ORACLE_SID=retl
export ORACLE_SID
RMS_STAGEDIR=/d01/stage/retail/rms/rms
export RMS_STAGEDIR
NLS_LANG=AMERICAN_AMERICA.UTF8
export NLS_LANG
cp $ORACLE_HOME/guicommon/tk/admin/Tk2Motif.rgb $ORACLE_HOME/guicommon/tk/admin/Tk2Motif.rgb_ORIG
vi $ORACLE_HOME/guicommon/tk/admin/Tk2Motif.rgb
更改:
Tk2Motif*fontMapCs: iso8859-2=UTF8
mkdir /d01/app/retail_apps/rms/appserver
vi $ORACLE_HOME/network/admin/tnsnames.ora, 添加:
retl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = retek13.hand-china.com)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = retl)
)
)
安装:
cd /d01/stage/retail/rms
unzip rms13application.zip
备注:rms131apppatch.zip中文件没有rms13application.zip 中的文件新
启动FormServer:
$ORACLE_HOME/opmn/bin/opmnctl startall
$ORACLE_HOME/bin/emctl start iasconsole
http://retek13.hand-china.com:1156
登录后,创建一个oc4j instance :rms_help_instance , 创建后把这个实例启动,该instance 默认的管理员是admin, 密码请改成********1
执行安装。。待续。。。
cd $RMS_STAGEDIR/application
./install.sh
安装
按Exit 后,自动启动OCM的安装:
安装日志文件在:/d01/app/retail_apps/rms/appserver/base/log 目录下
PostInstall 的配置:
1) 备份
cp /d01/app/oracle/OraHome_1/Apache/Apache/conf/httpd.conf /d01/app/oracle/OraHome_1/Apache/Apache/conf/httpd.conf.ori_bak
cp /d01/app/oracle/OraHome_1/forms/java/oracle/forms/registry/Registry.dat /d01/app/oracle/OraHome_1/forms/java/oracle/forms/registry/Registry.dat_ori_bak
cp /d01/app/oracle/OraHome_1/forms/server/formsweb.cfg /d01/app/oracle/OraHome_1/forms/server/formsweb.cfg_ori_bak
cp /d01/app/oracle/OraHome_1/forms/admin/resource/US/fmrweb.res /d01/app/oracle/OraHome_1/forms/admin/resource/US/fmrweb.res_ori_bak
cp /d01/app/oracle/OraHome_1/forms/admin/resource/US/fmrweb_utf8.res /d01/app/oracle/OraHome_1/forms/admin/resource/US/fmrweb_utf8.res_ori_bak
cd /d01/app/retail_apps/rms/appserver/post
cp -R * /d01/app/oracle/OraHome_1
重启服务:
$ORACLE_HOME/bin/emctl stop iasconsole
$ORACLE_HOME/opmn/bin/opmnctl stopall
$ORACLE_HOME/opmn/bin/opmnctl startall
$ORACLE_HOME/bin/emctl start iasconsole
测试 rms application Server
———————————————————————————————————————————————————————————————
根据 Oracle Retail Merchandising Installation Test Cases For Version 13.0 [ID 559560.1] 提供的testcase进行测试
http://retek13.hand-china.com:7777/forms/frmservlet?config=rms13instbase
下载Oracle Linux 5.5: 必须从www.oracle.com ->Download -> Server 进入,会引导你进入edelivery (直接进edelivery 是没有linux下载入口的)
下载Database 11g 11.1.0.7 : 先从edelivery下载11.1.0.6 ,再去Metalink下载11.1.0.7的patch.
下载Application Server 10.1.2.0.2 Form and Report Service : 从edelivery的Oracle Development Tools 入口进去找
Application Server 10.1.2.3 : Patchset 5983622
下载BI Publiser Server: 从edelivery 的BI 入口进入下载。
RMS 文档: http://download.oracle.com/docs/cd/E12448_01/rms/docset.html
===========================================================================
一、DB(11.1.0.7)安装:
Stage: OracleRetailR13.1\Datebase11g_X64
1.1)根据 oracle database 11g quick install guider b32285.pdf 进行db 安装 11.1.0.6
备注:如果安装OEL 5.5 那么rpm只要再额外安装sysstat即可。
安装过程中的密码设置:********
数据库管理访问:https://retek13.hand-china.com:1158/em
1.2)根据README.htm 安装 11g Release 1 (11.1.0.7) Patch Set 1 for Linux x86-64
ORACLE_BASE=/d01/app/oracle
ORACLE_SID=orcl
ORACLE_HOME=/d01/app/oracle/product/11.1.0/db_1
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export export ORACLE_HOME ORACLE_SID PATH
1.3)启停数 据库
停止:
su – oracle
设置 环境变量
停止dbconsole: $ emctl stop dbconsole (可选)
停止 lsn : $ lsnrctl stop [listener_name]
停止实例(web 界面或者 sqlplus)
启动:
su – oracle
设置 环境变量
启动 lsn : $ lsnrctl start [listener_name]
启动dbconsole: $ emctl start dbconsole
启动实例(web 界面或者 sqlplus)
========================================================================================
二、AS 安装:
Stage: OracleRetailR13.1\OracleAS\
2.1) FormServer & ReportServer 10.1.2.3 安装
2.1.1) 根据 B25260-01 中的AS Install Guider 安装10.1.2.0.2 ( B24489-01.zip)
默认情况下,AS 10gR2 不能在OEL5.x上安装,需要打patch ,才能在此平台上安装,参考[ID 564174.1]
DISPLAY=:0.0
export DISPLAY
./runInstaller PREREQ_CONFIG_LOCATION=/d01/stage/OracleAS/formserver/10.1.2.0.2/prereq -paramFile /d01/stage/OracleAS/formserver/10.1.2.0.2/oraparam.ini
中文环境安装有字体问题,切换到英文环境安装:
Ias_admin password : ********1
Form Server 安装成功后的信息:
see the following URL to access the Oracle Enterprise Manager 10g Application Server Control Console :
http://retek13.hand-china.com:1156
The following information is available in:
/d01/app/oracle/OraHome_1/install/setupinfo.txt
Oracle Application Server 10g 10.1.2.0.2 Usernames and Default password information: Please refer to the Oracle Application Server 10g Administrator Guide for more information.
Install Type: Oracle Application Server Forms and Reports Services
Configured Components: Oracle HTTP Server, OracleAS 10g Containers for J2EE, OracleAS 10g Web Cache, OracleAS 10g Reports Services, OracleAS 10g Forms Services
Use the following URL to access the Oracle HTTP Server and the Welcome Page:
http://retek13.hand-china.com:7777
—————————————–
Use the following URL to access the Oracle Enterprise Manager Application Server Control:
http://retek13.hand-china.com:1156
Instance Name: rmsappsvr.retek13.hand-china.com
User: ias_admin
Psw:********1
2.1.2)安装 p5983622_10123_LINUX.zip 升级到10.1.2.3 (根据patch的Readme)
ORACLE_HOME=/d01/app/oracle/OraHome_1
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export ORACLE_HOME PATH
su – oracle
linux32 bash
ORACLE_HOME=/d01/app/oracle/OraHome_1
export ORACLE_HOME
$ORACLE_HOME/bin/emctl stop iasconsole
$ORACLE_HOME/opmn/bin/opmnctl stopall
安装过程中会报错
查log 有如下错误:
— message in installation logs
/usr/bin/ld: skipping incompatible $ORACLE_HOME/lib//libiplsn.a when searching for -liplsn
/usr/bin/ld: skipping incompatible $ORACLE_HOME/lib/libiplsn.a when searching for -liplsn
/usr/bin/ld: cannot find -liplsn
查Metalink没有解决方法,查google有如下解决方法:
原因:env_forms.mk 中有些调用gcc的地方漏加 -m32 参数。
解决方法:
1) Don’t quit current installation
2) Edit $ORACLE_HOME/forms/lib/env_forms.mk
比如这些地方:(在这里列举的不全,请用 /gcc查找修改每一处)
LINK=$(PURECMDS) gcc $(LDFLAGS) $(COMPSOBJS) -m32
SOSD_FORMS_LDSHARED=/usr/bin/gcc -m32 -o $@ -z text -shared
SOSD_FORMS_LDSHARED_SO=/usr/bin/gcc -m32 -o $@ -z muldefs -shared -$(LDPATHFLAG)$(LIBHOME)
cd $ORACLE_HOME/forms/lib
make -f ins_forms.mk install
3) Retry installation
上述错误解决后,安装就正常了。
2.2) Oracle Application Server Oc4j J2ee&Web Server 10gR3 安装
2.2.1)Oracle Application Server 10.1.3.1 安装(soa_linux_x86_101310_disk1.cpio)
10.1.3.1 在OEL 5.x _X86_64上安装也需要更改预安装检查参数,则可以在metalink上找patch[ID 790943.1】提出在OEL 5.x 上能安装SOA 10.1.3.1 。对应的预安装patch 为:p6339508_101310_Linux-x86-64.zip ,按此note安装。
为了不与以前安装的Application Server端口冲突,更改参数:更改 staticports.ini 中的端口参数(从2000开始)
su – oracle
linux32 bash
cd /d01/stage/OracleAS/10.1.3.1
./runInstaller PREREQ_CONFIG_LOCATION=/d01/stage/OracleAS/10.1.3.1/prereq -paramFile /d01/stage/OracleAS/10.1.3.1/oraparam.ini
linux32 bash
cd /d01/stage/OracleAS/10.1.3.0
./runInstaller PREREQ_CONFIG_LOCATION=/d01/stage/OracleAS/10.1.3.0/prereq -paramFile /d01/stage/OracleAS/10.1.3.0/oraparam.ini
备注: 如果出现错误提示:
Error in writing to directory /tmp/OraInstall2010-08-30_05-03-38PM. Please ensure that this directory is writable and has atleast 60 MB of disk space. Installation cannot continue.
: Success
无法安装。请检查预安装patch是否正确,有的时候用错了,因为param.ini不匹配,导致文件指向错误,会出现这种错误提示。
先创建3个Schema: ORAWSM,ORABPEL,ORAESB 密码都是********;
As Instance name : retekas2
Oc4jadmin 密码: ********1
Default Oc4j instance name :home
安装完成后的信息:
Access the Welcome page:
http://retek13.hand-china.com:2000
Access Oracle Enterprise manager 10g Application Server Contral:
http://retek13.hand-china.com:2000/em
停止服务:
ORACLE_HOME=/d01/app/oracle/product/10.1.3.1/OracleAS_2
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export export ORACLE_HOME PATH
$ORACLE_HOME/opmn/bin/opmnctl stopall
2.2.2)Oracle Application Server 10.1.3.4 Patch 安装(ias_linux_x86_101340.zip)
xhost +
su – oracle
ORACLE_HOME=/d01/app/oracle/product/10.1.3.1/OracleAS_2
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export export ORACLE_HOME ORACLE_SID PATH
cd /d01/stage/OracleAS/Disk1
linux32 bash
./runInstaller
2.3) BI Publisher Server 安装
xhost +
su – oracle
ORACLE_HOME=/d01/app/oracle/product/10.1.3.1/OracleAS_2
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/OPatch:$PATH:
export export ORACLE_HOME ORACLE_SID PATH
cd /d01/stage/OracleAS/RH_Linux/Oracle_Business_Intelligence_Publisher_Standalone
linux32 bash
./runInstaller
选择 Advanced Install type
安装完成后的信息:
The installation of Oracle BI Publisher 10.1.3.4.1 was successful.
These instructions are located in:
/d01/app/oracle/product/10.1.3.1/BIPHome_1/BI_Publisher_readme.txt
At the end of this installation BI Publisher will be started.
You may access it at the following URL:
http://retek13.hand-china.com:2000/xmlpserver
as
Username: Administrator
Password: Administrator
启停服务是受OracleAS_2控制的。
我需要更改ip, 从192.168.15.10 -> 192.168.1.10
IP更改完成,服务器重启后,DB,AS均未受影响。 很简单!
Enterprise Installation Order (此顺序在Retek各产品的Installtion guide中的最后一章中均有描述)
1. Oracle Retail Merchandising System (RMS), Oracle Retail Trade Management(RTM), Oracle Retail Sales Audit (ReSA) Oracle Retail Service Layer (RSL)
2. Oracle Retail Extract, Transform, Load (RETL)
3. Oracle Retail Active Retail Intelligence (ARI)
4. Oracle Retail Warehouse Management System (RWMS)
5. Oracle Retail Allocation
6. Oracle Retail Invoice Matching (ReIM)
7. Oracle Retail Price Management (RPM)
8. During installation of RPM, you are asked for the RIBforRPM
Note:
provider URL. Since RIB is installed after RPM, make a note of the
URL you enter. If you need to change the RIBforRPM provider URL
after you install RIB, you can do so by editing the jndi_provider.xml
file.
9. Oracle Retail Central Office (ORCO)
10. Oracle Retail Back Office (ORBO) or Back Office with Labels and Tags (ORLAT)
11. Oracle Retail Store Inventory Management (SIM)
12. Oracle Retail Predictive Application Server (RPAS)
13. Oracle Retail Merchandise Financial Planning (MFP)
14. Oracle Retail Size Profile Optimization (SPO)
15. Oracle Retail Assortment Planning (AP)
16. Oracle Retail Item Planning (IP)
17. Oracle Retail Item Planning configured for COE (IPCOE)
18. Oracle Retail Advanced Inventory Planning (AIP)
19. Oracle Retail Integration Bus (RIB)
20. Oracle Retail Point-of-Service (ORPOS)
21. Orace Retail Mobile Point-of-Service (ORMPOS)
22. Oracle Retail Analytics Applications
23. Oracle Retail Data Warehouse (RDW)
24. Oracle Retail Workspace (ORW)
在13.1版本中ReSA,RTM 均包含在RMS中
物化视图FAQ
问题:物化视图的中文语法参考在哪里?
答:你可以参考10G的oracle Sql Reference :
http://www.itk.ilstu.edu/docs/oracle/server.101/b10759/toc.htm
oracle database 10g r2 中引入的新的package 提供了线性代数的两个最重要的函数库。可用于多元线性回归分析,主成份分析,线性方程组求解等等。其中多元线性回归分析经常用于零售行业的销售预测。
概述
Oracle Database10g R2 中有个新的Package: UTL_NLA,这个Package没什么名气,但是把线性代数功能带进了Oracle Database. 这使得Oracle数据库成为一个不错的科学计算和分析平台. 现在,我们可以很容易的在Oracle 数据库中写出很好的矩阵代码. 下面是从Oracle Database Data Warehousing Guide 10g R2中摘录的简要描述:
线性代数是有着很广泛的实际应用的数学分支.很多领域都存在可以用线性代数来描述的任务. 比如: 统计领域(多元线性回归,主成分分析),数据挖掘(聚类和分类),生物信息学(微阵列数据分析),业务研究(供应链和其他优化问题),计量经济学(分析消费者的需求数据)以及财务(资产分配问题)每个人都可以自由使用线性代数的各种函数库。Oracle的UTL_NLA包可以定义矩阵类型的数据并且把两个功能最强,使用最广的两个库封装到PLSQL包的子程序中。
线性代数依赖于矩阵运算,以前,在PLSQL中执行矩阵运算需要基于PLSQL 的本地数据类型,从零开始写矩阵运算函数。这需要写大量的程序并且性能有限。如果开发人员选择把数据发送到外部程序包中去处理而不是在Oracle 中创建矩阵计算函数来处理 ,就存在数据的导出、导入等IO时间消耗。使用UTL_NLA package可以不用做这些,可以快速交付实现。
BLAS和LAPACK可能是应用最广泛的线性代数库。这些库被广泛的应用于大量的科学计算程序和专门工具。
对开发者来说,这些函数库提供了积木实现大量的高级技术。比如 MATLAB工具库,其大多数功能都是建立在类似于BLAS和LAPACK之类的线性代数库的基础上的。在数据库中提供这些函数库,允许开发者编写紧凑的,易于阅读的代码用于矢量操作,当然因为这些库拥有高效而强劲的线性代数操作的实现,使用UTL_NLA Package的代码自然就具有这些特性。
除了科学计算,Oracle的线性代数支持可用于业务分析。一个例子就是多元线性回归。数据库中带有一个多元线性回归的应用例子,这个例子就是使用UTL_NLA 写的。这个应用在一个叫做OLS_Regression的对象中实现。注意,例子OLS Regression对象的文件文件可以在$ORACLE_HOME/plsql/demo 中找到。点击 这里 查看例子,学习如何使用这个功能。
Example 21-19 Linear Algebra
这是一个Oracle数据库附带的例子, 演示了如何使用Oracle 的线性代数功能来支持业务分析,它使用UTL_NLA Package来调用多元线性回归应用。这个多元线性回归应用在一个叫做 OLS_Regression 的对象中被实现。 对应的例子文件可以在$ORACLE_HOME/plsql/demo中找到。
考虑下列场景:零售商需要分析营销计划的效果。
背景:
每个门店都会把它每年的市场费用预算分配到如下四个方面:1) 媒体广告(media);2)促销(promo);3)折扣券(disct);4)直邮(dmail);回归分析需要在每个门店每年的销售额 与上述4项费用支出 之间建立线性关系。假设这些市场数据都存储于如下的表中:
sales_marketing_data (
/* Store information*/
store_no NUMBER,
year NUMBER,
/* Sales revenue (in dollars)*/
sales NUMBER, /* sales amount*/
/* Marketing expenses (in dollars)*/
media NUMBER, /*media advertisements*/
promo NUMBER, /*promotions*/
disct NUMBER, /*dicount coupons*/
dmail NUMBER /*direct mailers*/)
那么你可以建立如下线性模型:
Sales Revenue = a + b Media Advisements + c Promotions + d Discount Coupons + e Direct Mailer
实现:
这个模型可以使用下面的视图来实现,这个视图引用了OLS回归对象。
View start:
CREATE OR REPLACE VIEW sales_marketing_model (year, ols) AS SELECT year, OLS_Regression( /* mean_y => */ AVG(sales), /* variance_y => */ var_pop(sales), /* MV mean vector => */ UTL_NLA_ARRAY_DBL (AVG(media),AVG(promo), AVG(disct),AVG(dmail)), /* VCM variance covariance matrix => */ UTL_NLA_ARRAY_DBL (var_pop(media),covar_pop(media,promo), covar_pop(media,disct),covar_pop(media,dmail), var_pop(promo),covar_pop(promo,disct), covar_pop(promo,dmail),var_pop(disct), covar_pop(disct,dmail),var_pop(dmail)), /* CV covariance vector => */ UTL_NLA_ARRAY_DBL (covar_pop(sales,media),covar_pop(sales,promo), covar_pop(sales,disct),covar_pop(sales,dmail))) FROM sales_marketing_data GROUP BY year; |
view end:
通过这个视图,市场部经理可以进行一些分析,比如“这个销售营销模型对2004年的数据来说合理吗?”也就是说多重关联性是否大于可接受的值。查询sql如下:
SELECT model.ols.getCorrelation(1)
AS “Applicability of Linear Model”
FROM sales_marketing_model model
WHERE year = 2004;
也可做如下分析:“在2003年,如果没有任何市场活动,那么门店的基本收入是多少?” 或者“在2004年,最有效的是那种类型的市场活动?”
解释:
1、OLS_Regression 定义在 $ORACLE_HOME/plsql/demo/olstype.sql 中
OLS是普通最小二乘分析法(ordinary least—squares)的简写 ,想深入了解OLS可点击这里,而 OLS Regression 即指使用最小二乘法进行线性回归分析。
2、var_pop, 函数参考这里 , 或者这里 covar_pop 函数参考这里
3、OLS_Regression 使用说明
$Header: olstype.sql 09-jun-2004.17:32:14 lvbcheng Exp $ olstype.sql Copyright (c) 2004, Oracle. All rights reserved. 文件名 olstype.sql - 普通最小二乘回归 描述 这个文件包含普通最小二乘(OLS)的类型定义 This files contains the type definition for Ordinary Least Squares (OLS) 回归: y = b0 + b1 z1 + ... + bn zn. 备注 OLS_Regression 的构造函数需要用户传入如下参数:除其他值外, 预测变量的均值向量(vm), 自变量的协方差矩阵(vcm), 因变量和自变量的协方差(cv). 1. 有 n个 自变量 (zi) 就应该有n个均值, 这里 MV[i] = avg(zi). 2. 协方差矩阵(VCM) 是一个 NxN 对称矩阵, 并且作为一个阵列参数传入, 主要使用阵列的右上三角部分,(i <= j i是列,j是行) 当i!=j时, V[i,j] 是协方差 covar_pop(zi, zj);当i=j的时候,V[i,j] 是方差 ,比如 ,如果有三个预测变量 (a, b, and c) 那么其协方差(VCM)就应该是 : [ var_pop(a) covar_pop(a,b) covar_pop(a,c) ] VCM = [ covar_pop(b,a) var_pop(b) covar_pop(b,c) ] [ covar_pop(c,a) covar_pop(c,b) var_pop(c) ] 但传给 OLS_Regression()的应该是右上三角部分: VCM = UTL_NLA_ARRAY_DBL(var_pop(a), covar_pop(a,b), covar_pop(a,c), var_pop(b), covar_pop(b,c), var_pop(c)) 3. 对于 N 个自变量(zi)和一个因变量(y)的情况, 协方差(CV) 应该有n中不同情况, CV[i] = covar_pop(y, zi). 4. 标准化的评分回归只需要一个相关矩阵(RM)和一个相关矢量(RV), 使用 RM 替换上面的 VCM, 不过,RM[i,j] = corr(zi, zj) when i != j, and 1 when i = j. 使用 RV 替换上面的 CV 不过, RV[i] = corr(y,zi). 依赖 这个文件依赖于 UTL_NLA package. 参考 Johnson, Richard A., and Dean W. Wichern, "Applied Multivariate Statistical Analysis (5th ed.)". New Jersey: Prentice Hall, 2002. 《多元统计分析应用》 举例 1. 下面的SQL语句将从模型:y = b0 + b1 z1 + b2 z2 中返回回归方程。 而因变量y 和自变量 z1,z2 存储在表中:ols_data(y number, z1 number, z2 number). SELECT model.ols.getEquation() "OLS Regression Equation" FROM (SELECT OLS_Regression(AVG(y), VAR_POP(y), UTL_NLA_ARRAY_DBL(AVG(z1),AVG(z2)), UTL_NLA_ARRAY_DBL(VAR_POP(z1),COVAR_POP(z1,z2),VAR_POP(z2)), UTL_NLA_ARRAY_DBL(COVAR_POP(y,z1),COVAR_POP(y,z2))) ols FROM ols_data) model; 2. 下面的SQL语句将从模型:y = y = 0 + b1 z1 + b2 z2 中返回回归方程。 相应的数据存储在表table ols_data(y number, z1 number, z2 number) SELECT model.ols.getEquation() "OLS Regression Equation" FROM (SELECT OLS_Regression(AVG(y), VAR_POP(y), UTL_NLA_ARRAY_DBL(AVG(z1),AVG(z2)), UTL_NLA_ARRAY_DBL(VAR_POP(z1),COVAR_POP(z1,z2),VAR_POP(z2)), UTL_NLA_ARRAY_DBL(COVAR_POP(y,z1),COVAR_POP(y,z2)), 0) ols FROM ols_data) model; 3. 更多其它关于 OLS_Regressions 应用的例子可以参考 olsexmpl.sql 文件. |
专业需求,局限和可用性。
在使用UTL_NLA Package之前,必须了解一些事情,Oracle文档指出使用这个Package的开发者应该有线性代数基础,特别是BLAS和LAPACK的知识。我相信,如果要使用这个Package来实现一些总所周知的算法的话,只需要了解线性代数的基础即可。关于BLAS和LAPACK, 熟悉一些基本概念是重要的。(比如,矩阵存储表示:列或行),除了Oracle文档,其他一些有用的参考包括:
The Lapack Users’ Guide, the BLAS and the LAPACK chapters in the in CRC Handbook of Linear Algebra.
参考:http://oracledmt.blogspot.com/2007/04/way-cool-linear-algebra-in-oracle.html
本文是在学习了retail rms下开发form的一点点心得。主要涉及内容是Form和Reports的开发。本文是在商云方经理的retail blog上取得原始资料,吸取了项目组很多同事的经验,非常感谢他们。本文档所描述的内容,可能只是Retail客户化开发的冰山一角,形如管中窥豹,希望后面有机会开发rms 的同事能从这篇文档里获得一些帮助,并对rms客户化开发文档进一步完善。
商云方经理的blog地址:http://blog.retailsolution.cn/
Retail 为Form开发提供了一个模板 fm_temp1.fmb ,本项目在/d01/app/retail/rms/app/rms/forms/src目录下,该模板基本上已经将retail form涉及到的底层代码写好(比如实现多语言的调用等),我们在开发一个新的form的时候,只要在该模板的基础上实现自己的业务逻辑就行了。
另外,还有一个模板fm_date.fmb,用来做和日期相关的操作,最常见的是做LOV。比如,和EBS一样,我们需要选择日期,弹出一个选则日期的LOV,就要用到这个文件。
Retail的form界面风格和EBS有点不同,给我的总体感觉是布局比较灵活,比较接近我们客户化的风格。它的一个block在界面上显示出来的字段一般比较少,现在还没有发现使用folder的情况。很可惜,也没有类似EBS的弹性域,因为其数据库表结构没有弹性域字段,我认为这是Retail需要改进的一个地方。
注:有的地方叫法为Retek,实际上也是指的retail。
1. 有EBS的使用经验,尤其是Form的使用经验
2. 熟悉PL/SQL
3. 熟悉Telnet和FTP工具,熟悉Windows常规操作
4. 理解或开发过数据库应用系统
5. 有Form(EBS Form)开发经验则更佳
1. OS用户:包括超级用户root,用于上传编译开发的form
2. 数据库开发用户,比如本项目中rms12dev,用于数据库的操作,比如使用pl/sql developer开发package等
3. Rms开发管理用户,比如本项目的rms12dev,用于在rms系统中调试
注: 关于Rms用户,将在“新增RMS”用户讲到
1. telnet工具 :如SecureCRT登录服务器,编译form和pll;连接服务器,SecureFX下载必要文件、上传开发的Form
2. Form builder: 安装developer10gr2(安装好后包括Form builder/Reports builder/Sql*pls/Jdeveloper)
3. 配置Form编辑环境:
客户端:
在D盘建立 retail_resource 目录
从服务器下载 /d01/app/retail/rms/app/rms/forms 目录
从服务器下载 /d01/app/retail/rms/app/toolsets 目录
Regedit
hkey_local_machine/software/oracle/KEY_DevSuiteHome1
编辑item : forms_path
添加
D:\Retail_Resource\forms\src;D:\Retail_Resource\toolset\src;D:\Retail_Resource\toolset\bin;
D:\Retail_Resource\forms\bin
服务器端配置
建立一个环境变量文件:rmsformsvr.env (创建在/home/oracle/),其内容如下:(环境不同,有些变量名称、路径不同)
ORACLE_HOME=/d01/app/oracleas/OraHome_1
export ORACLE_HOME
DISPLAY=syfr12:1.0
INSTALL_DIR=/d01/app/retail/rms/app
export INSTALL_DIR
PATH=$ORACLE_HOME/bin:$ORACLE_HOME/opmn/bin:$ORACLE_HOME/dcm/bin:$INSTALL_DIR/
forms10gr2_scripts:$PATH
CLASSPATH=$ORACLE_HOME/jlib/importer:$ORACLE_HOME/jlib/debugger.jar:$ORACLE_HOME/
jlib/utj.jar:$ORACLE_HOME/jlib/ewt3.jar:$ORACLE_HOME/jlib/share.jar:$ORACLE_HOME/
jlib/dfc.jar:$ORACLE_HOME/jlib/help4.jar:$ORACLE_HOME/jlib/oracle_ice.jar:$ORACLE_HOME/
jlib/jewt4.jar
FORMS_BUILDER_CLASSPATH=$CLASSPATH
FORMS_PATH=$INSTALL_DIR/toolset/bin:$INSTALL_DIR/rms/forms/bin:$ORACLE_HOME/forms
REPORTS_PATH=$INSTALL_DIR/rms/reports/bin:$ORACLE_HOME/forms
TK_UNKNOWN==$ORACLE_HOME/guicommon/tk/admin
UP=rms12dev/rms12dev@RETL
LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/jdk/jre/lib/sparc:$ORACLE_HOME/jdk/jre/lib
/sparc/native_threads
export DISPLAY PATH CLASSPATH FORMS_BUILDER_CLASSPATH FORMS_PATH REPORTS_PATH TK_UNKNOWN UP LD_LIBRARY_PATH
注:本小节资料由商云方提供 http://blog.retailsolution.cn/blog/index.php/rms-form-compile
下面用几张图片来感性认识下rms form界面风格
<图1-1> rms登录界面
<图1-2> 用rms12dev登录后的主界面(rms12dev为开发管理员)
<图1-3> 查询界面以及LOV,查询界面类似ebs中点击“手电筒”后的查询窗口,区别是这里是一个单独的Form。
<图1-4> 主要业务逻辑处理界面,布局比较灵活。
<图1-5> 打印报表,点击“打印”后会显示<图1-6>所示画面。
<图1-6> 在运行报表前,需要再登录一次
<图1-7> 报表参数输入
<图1-8> 报表运行结果
如果要修改一个Form,怎么知道它的名称呢?从界面上可以看到form的名字。比如下图中的recutadj,然后在/d01/app/retail/rms/app/rms/forms/src目录下(不同项目此目录可能目录不同)找到recutadj.fmb,下载之。
<图1-9> 通过界面查看Form名称
按Retail的习惯,开发一个新的form,一般需要开发下面4个文件,但不是所有的都是必须的。
查找form,在打开“真正”的业务处理form fm_XXX.fmb之前,需要打开这个查找form,该form的作用是选择本次操作的类型查询出数据,一般操作类型有三种,“查看”,“编辑”,“新建”。如果是“新建”,则直接打开form_XXX来新建业务;如果是“查看”,则通过该form查到到业务记录,调用fm_XXX查看业务细节,fm_XXX的项都是不可编辑的;如果是“编辑”,则调用fm_XXX查看业务细节,并可对业务细节数据进行编辑。 当在RMS主界面上双击rms菜单项时,一般是打开该form,再由该Form调用fm_XXX。
使用fm_XXX_find,是因为Retail form中没有EBS的 F11,Ctl+F11等快捷键,也没有EBS中“查找”窗体。我们也可以不使用这个form,只要在打开form fm_XXX.fmb的时候能够确定本次操作是查看,编辑或者新建就好了。比如,同一个form我们需要不同权限的人来打开,有的权限是查看,有的是编辑,有的是新建。这时候,我们只要在菜单上给每个权限挂不同的菜单项,并对每个菜单项设置打开form的默认模式即可。
<图2-1>
<图2-2> 在<图2-1>所示界面点击“搜索”后,显示Form的另一个Canvases。
这是实现业务逻辑的主要form。该form由fm_XXX_find.fmb调用open_form打开,open_form会使用一些参数,比如打开新form的状态是view,edit或者是new;或者是业务自己规定的一些变量。
<图2-3>
fm_XXX.fmb所对应的主菜单。一般情况下,新开发的form不需要新建菜单,直接使用系统默认的菜单。除非业务功能特别多,需要菜单来实现。
<图2-4>
fm_XXX.fmb处理业务逻辑所调用的package。如果业务逻辑比较复杂,建议建立一个这样的package,来实现业务逻辑,这样可以简化form的复杂度。
先看一个简单例子,来演示一下RMS form的开发过程。
建立gmlsupreconfind.fmb。实现
<图3-1>
<图3-2>
1. 打开fm_temp1,将Module(FM_TEMPL)改为FM_GMLSUPRECONFIND,另存为gmlsupreconfind.fmb。
2. 新建一个data block,名称为B_MAIN,非数据库block。
3. 在B_MAIN下建立如下图界面(红线圈内)所示的非数据库Item,和ebs下步骤一样,就不多说了。这里只是演示建立block,其Canvas后面建立。(红线内的按钮先不管,后面将LOV的时候会讲到)
<图3-3>
4. 新建一个data block,名称为B_ACTION,非数据库block。
5. 在B_ACTION下建立如下界面(红线圈内)所示的非数据库Item,都是push button类型的。
<图3-4>
6. 新建一个data block,名称为B_SUPRECON,数据库block,基于表GML_INVC_STM_HEAD。其上的Item都不能insert、update、delete。因为这里只是将数据显示出来。将实现的效果如下:
<图3-5>
<图3-6>
7. 新建一个data block,名称为B_COL_HEAD,在B_COL_HEAD下建立如下界面(红线圈内)所示的非数据库Item,主要是按钮,一方面用来做上一步中建立的Item的标题,另一个用途主要是排序(点击某列上的按钮,则按该列排序,实际上是加上order by重新查询一次)。
<图3-7>
8. 建立Canvas: C_MAIN,type 为content。
9. 建立Canvas: C_SUPRECON,type为stacked。
10. 将B_MAIN上的Item放在C_MAIN上(见图3),将B_SUPPECON上的Item放在C_SUPPECON上(见图6),B_ACTION上的Item放C_MAIN上(见图4)。如
11. 建立W_MAIN,将C_MAIN和C_SUPPECON的window属性都设成W_MAIN,注意调整C_SUPPECON的位置和大小。需调整位置的大小和原因见下一步。
12. 建立:B_ACTION.PB_SEARCH(那个Search按钮)的WHEN-BUTTON-PRESSED事件:
BEGIN
if not FORM_SUCCESS then
raise FORM_TRIGGER_FAILURE;
end if;
show_View(‘C_SUPRECON’);–C_SUPRECON
P_MULTIVIEW.GO_MULTIVIEW_BLOCK(‘C_SUPRECON’);–已有的form是这样写的,但我这样写的时候会报一大堆错。记住这里实现的就是显示C_SUPRECON,代码可以自己重写
RWIDGET.TURN_OFF(‘B_main.LI_action’);
RWIDGET.TURN_ON(‘B_action.PB_back’);
RWIDGET.TURN_ON(‘B_action.PB_ok’);
RWIDGET.TURN_ON(‘B_action.PB_REFRESH’);–retail标准的函数RWID.TRUN_OFF,RWID.TRUN_OFF,实现Item的enabled属性
EXCEPTION
when FORM_TRIGGER_FAILURE then
Raise;
when OTHERS then
emessage(SQLERRM);
Raise FORM_TRIGGER_FAILURE;
END;
13. 建立:B_ACTION.PB_OK(OK按钮)的WHEN-BUTTON-PRESSED事件:
该事件实现:在C_SUPPECON界面上,点击“OK”按钮,打开fm_SUPPECON。
DECLARE
L_action VARCHAR2(10) := :B_main.LI_action;
BEGIN
Issue_Savepoint(‘CALL_FORM’);
if L_action = ‘NEW’ then
P_CALL_FORM(‘NEW’);
elsif L_action = ‘VIEW’ then
P_CALL_FORM(‘VIEW’);
elsif L_action = ‘EDIT’ then
P_CALL_FORM(‘EDIT’);
end if;
EXCEPTION
when FORM_TRIGGER_FAILURE then
Issue_Rollback(‘CALL_FORM’);
raise;
when OTHERS then
emessage(SQLERRM);
raise FORM_TRIGGER_FAILURE;
END;
14. P_CALL_FORM
PROCEDURE P_CALL_FORM(p_action varchar2) IS
L_action VARCHAR2(10) := :B_main.LI_action;
PARAM_LIST PARAMLIST;
PL_id VARCHAR2(9) := ‘gml_supreconfind’;
L_exists VARCHAR2(1) := ‘N’;
L_settlement_id GML_INVC_STM_HEAD.SETTLEMENT_ID%TYPE;
BEGIN
— destroy the parm list if still present
P_DESTROY_PARAMETER_LIST(PL_id);
PARAM_LIST := Create_Parameter_List(PL_id);
— add parameters
add_parameter(PARAM_LIST,
‘PM_MODE’,
TEXT_PARAMETER,
L_action);
add_parameter(PARAM_LIST,
‘PM_settlement_id’,
TEXT_PARAMETER,
L_settlement_id);
— call the program
open_form(‘gmlsuprecom’,
ACTIVATE,
SESSION,
PARAM_LIST);
EXCEPTION
when FORM_TRIGGER_FAILURE then
Raise;
END P_CALL_FORM;
fm_SUPPECON建立完毕。
15. 现在开始写fm_XXX.fmb,其开发过程和fm_XXX_find一样,也是从fm_temp1来。主要要建立三个习惯上的Block:
B_ACTION:和fm_XXX.fmb一样,用于放下面的一排按钮。
B_XXX:基于表的一个block。和ebs下一样。当然,可能还有主从结构的。
<图3-8>
16. B_APPLYS:类似EBS下的“Control”block,控制块。
其他的可以自由发挥,只要便于后面的人维护就好。这里,不再详细叙述。
17. me_XXX.mmb菜单我们在后面专门来叙述。
18. 如果form fm_XXX.fmb要用到package,需要在数据库中建立package。
到此,开发一个form的基本流程基本演示完毕,用户在使用的时候,会一次看到以下的画面。
<图3-1>
<图3-2>
<图3-8>
下面看一看retail开发的一些函数和技巧,这些多是retail标准的。
Form:Retail没有统一规则,一般以客户名简写加通俗易懂的字母/单词(比如:gmlgmlsuprecom.fmb,gml为客户名称简写)下面我们自己取名将以XXX替代。
Module:一般命名为FM_XXX(比如:FM_GMLCONSMRGN);
Block:一般命名为 B_XXX(比如:B_ACTION);
Cavans::一般命名为C_XXX(比如:C_CONSMRGN);
Window:一般命名为W_XXX(比如:W_CONSMRGN);
Item:一般是Text Item命名为TI_XXX,List Item命名为LI_XXX,Check Box命名为CB_XXX,按钮命名为PB_XXX…按此规律命名即可;只要大家一看都能明白就好。
Retail的多语言,和EBS不同。EBS是在不同的语言环境放置不同语言的form程序,retail则只有一个form程序,它将需要显示给用户看的项的label,存放在数据库的特定表里,如果一个可视项有多种语言,则一个项在表里就有多条记录,当form启动的时候,在Form级WHEN-NEW-FORM-INSTANCE 触发器中,通过P_FORM_STARTUP->P_INITIALIZE 将Form中的每个Item和Item对应Label项取出来(该逻辑在fm_temp1中已经写好了),我们要做的是将这些项和它们对应的语言手工取出来,放入数据库的特定表中。
Form的语言是放在表form_elements_langs和form_elements中的。
其获取语言的sql如下:
select fe.block_name,
fe.item_name,
fe.sub_item_name,
fe.item_type,
nvl(fel.lang_label_prompt, fe.default_label_prompt) label_prompt,
nvl(fel.lang_access_key,fe.default_access_key) access_key ,fel.lang
from form_elements_langs fel,
form_elements fe
where fe.fm_name = ‘FM_ORDHEAD’/*I_form*/–by Form
and upper(fe.fm_name) = upper(fel.fm_name(+))
and upper(fe.block_name) = upper(fel.block_name(+))
and upper(fe.item_name) = upper(fel.item_name(+))
and upper(fe.sub_item_name) = upper(fel.sub_item_name(+))
and 8/*L_user_lang*/ = fel.lang(+)–by user Language
and fe.default_label_prompt is not NULL;
所以,需要向表form_elements_langs和form_elements中插入每个需要显示的项的信息。比如,在供应商维护form(SUPVWEDT)中有一个供应商代码(SUPPLIER)字段,查询这两个表
select * from form_elements where fm_name=’FM_SUPVWEDT’ and item_name=’SUPPLIER’
FM_NAME BLOCK_NAME ITEM_NAME ITEM_TYPE SUB_ITEM_NAME DEFAULT_LABEL_PROMPT DEFAULT_ACCESS_KEY BASE_IND
FM_SUPVWEDT B_SUPS SUPPLIER Text Item NONE Supplier Y
字段描述:
FM_NAME: FM_||Form文件的名字
BLOCK_NAME: 该项(SUPPLIER)所在的block名字,如没有,就写”NONE”
ITEM_NAME: 该项(SUPPLIER)名
ITEM_TYPE: 项的类型,这里是 Text Item,还有Push Button,Window,LOV等,这里一定要写正确项的类型
SUB_ITEM_NAME: 子项,目前我写的还没用到
DEFAULT_LABEL_PROMPT: 如果表form_elements_langs中没有设置语言标签,则用这个
DEFAULT_ACCESS_KEY : 快捷键
BASE_IND: 目前还没搞清是什么意思,表里设置的都是’Y’
上面这个表里,是设置form拥有的元素,要实现多语言,还需要在表form_elements_langs中插入数据。这个表结构和form_elements差不多,只不过少了字段ITEM_TYPE,多了Lang字段,Lang字段就是语言的种类。目前取值有8(中文)和1(英文)。如果要设置两种语言,则要插入2笔数据。
这样,一个form可视项的多语言就设置成功了。
Retail这样设置多语言,感觉太麻烦,每一个项都这样设置一遍,一个form的工作量很大的。
和form差不多,它的表示menu_elements和menu_elements_langs。
注:form的多语言是指form上的提示信息,如Item标题,message,Lov标题等,不能像ebs的表fnd_lookup一样,表里的数据是多语言的。
Form的初始化,写在Form的WHEN-NEW-FORM-INSTANCE触发器中。调用的主要过程有:
P_FORM_STARTUP->P_INITIALIZE、P_BOILERPLATE,这几个procedure都是fm_temp1中写好的,我们不用改变。我们需要添加的是自己的逻辑。
A. 初始化List Item
初始化List Item,要调用P_POPULATE_LIST(p_item_name varchar2,p_para varchar2),这个过程(该过程原型在stand45中),比如:P_POPULATE_LIST(‘B_apply.LI_cons_rev_freq’, ‘GCRF’)中,’B_apply.LI_cons_rev_freq’指List Item的名(一定要加上block的名),’GCRF’是表code_detail里的code_type字段。基本原理是该过程先定义一个cursor:
select code,code_desc from code_detail where code_type=’GCRF’
然后把code和code_desc赋给List Item,所以,List Item的动态值都来源于code_detail,做一个新的List Item之前,需要向这个表里插入数据。当然,也可以在程序里面写死
显示错误提示,使用函数emessage(p_msg varchar2),如:
emessage(‘This_is_a_err_msg’);
raise form_trigger_failure;
错误提示也是分多语言的。所有的提示信息都放在rtk_errors表中,表里有一个三个重要字段
rtk_key: 比如这里的’This_is a err_msg’
rtk_lang: 语言
rtk_text: 提示信息;
比如在这个表里存在下面两条记录,则根据不同语言环境提示rtk_text的内容:
rtk_key rtk_lang rtk_text
This_is_a_err_msg 1 This is a err msg
This_is_a_err_msg 8 这个是错误信息
如果表里没有对应的提示信息,则直接显示emessage(‘This_is_a_err_msg’)中的参数,即’This_is_a_err_msg’
注:该过程原型:
PROCEDURE EMESSAGE (I_key varchar2,
I_txt_1 varchar2 := null,
I_txt_2 varchar2 := null,
I_txt_3 varchar2 := null) IS
l_ret_val BOOLEAN;
BEGIN
L_ret_val := RMESSAGE.SHOW (‘ALT_ERROR’, I_key, I_txt_1, I_txt_2, I_txt_3);
END;
Retail的Lov的展现一般不会像ebs中,ebs中,一般是鼠标落在某个text item的项上,弹出某个lov,retail是在这个项的后面有一个按钮,当点击这个按钮的时候,会弹出一个lov,选择lov中的东西,再把选择的东西赋值给该item。
创建一个Lov的过程:
Step1. 建立一个Lov,指定其返回给那些项。
Step2. 在需要Lov的Text Item的后面加一个按钮项(按钮项的图标:日期按钮的图标名称 calendsm,一般Lov 按钮的图标名称 listval,备注按钮的图标名称 smaltalk)
Step3. 在按钮下写如下代码:
Go_Item(‘B_ordhead.supplier’);–先把光标移到Text Item上
Do_Key(‘List_Values’);–显示Lov
特别,创建弹出日期的Lov过程:
Step1. 打开我们自己写的form的同时,打开fm_date.fmb(这个文件是标准程式)。
Step2. 将fm_date下Object Group下的OG_DATE,拖动到自己的Object Group下,将弹出提示,这时选择“复制”。
Step3. 将calend45.pll添加进来。
Step4. 添加显示日期的text Item的when-new-item-instance事件:
另外,有一种情况也需要注意:
当需要根据不同的情况,动态显示不同的LOV。比如一个Text Item项里,但参数Para1为’学生’时,调用’学生’Lov(LOV_STUDENT),当Para1为’教师’时候,显示’教师’LOV(LOV_TEACHER)。这种情况,需要在Text Item的KEY-LISTVAL触发器中添加如下代码:
if :Para1= ‘学生’ then
if F_SHOW_LOV(LOV_STUDENT’) then
Do_Key(‘Next_Item’);
end if;
elsif :Para1= ‘教师’ then
if F_SHOW_LOV(LOV_TEACHER’) then
Do_Key(‘Next_Item’);
end if;end if;
F_SHOW_LOV函数定义在标准package stand45中。
BEGIN
Validate(Item_Scope);
if not FORM_SUCCESS then
raise FORM_TRIGGER_FAILURE;
end if;
—
if (P_CALENDAR.LP_date_ok is not NULL) then
if (P_CALENDAR.LP_date_ok = ‘Y’) then
:B_MAIN.TI_SETTLEMENT_DATE := P_CALENDAR.LP_current_date;
P_CALENDAR.LP_date_ok := NULL;
Do_Key(‘Next_Item’);
else
P_CALENDAR.LP_date_ok := NULL;
end if;
end if;
EXCEPTION
when FORM_TRIGGER_FAILURE then
raise;
when OTHERS then
emessage(SQLERRM);
raise FORM_TRIGGER_FAILURE;
END;
Step5. 添加显示日期的text Item的key-listval事件:
DECLARE
L_return_to VARCHAR(256) := ‘B_main.TI_settlement_date’;
L_min_date DATE := NULL;
L_max_date DATE := INTERNAL_VARIABLES.GP_vdate;
L_default_date DATE := INTERNAL_VARIABLES.GP_vdate;
BEGIN
Validate(Item_Scope);
if not FORM_SUCCESS then
raise FORM_TRIGGER_FAILURE;
end if;
—
P_CALENDAR.SHOW_CALENDAR(L_return_to => L_return_to,
L_default_date => L_default_date,
L_min_date => L_min_date,
L_max_date => L_max_date);
EXCEPTION
when FORM_TRIGGER_FAILURE then
raise;
when OTHERS then
emessage(SQLERRM);
raise FORM_TRIGGER_FAILURE;
END;
Step6. 在按钮WHEN-BUTTON-PRESSED事件下写如下代码:
Go_Item (‘B_main.TI_settlement_date’); — B_main.TI_settlement_date是需要得到LOV值得Text Item
Do_Key (‘List_Values’);
Retail的菜单是通过菜单文件(.mmb)来实现的。其真正的事件是代码是在form中,菜单只调用form中的代码。下面以一个例子来说明:
这个例子演示的是增加 供应商维护–〉选项 菜单中,增加“联营保底”,其form文件是supvwedt.fmb,菜单文件是supplier.mmb.。
Step 1. 新建(修改)Menu (我们以supplier.mmb来说明,这个文件已经存在,我们来修改它既可) 在菜单OPTIONS_MENU下新增一个项:
name: GML_CONS_MARGIN
lable: &Consignment Attributes–其实这里的不准,因为我们后面还会改变它的lable
Menu Item Type: Plain
Step 2. 在该Menu下写事件
Execute_Trigger(‘T_cons_margin’);–T_cons_margin是在form中定义的
Step 3. 在Form中写事件 ,注意将form的menu Module属性设置为supplier
在 supplier.mmb 中增加form级trigger
name: T_CONS_MARGIN
execution Hierarchy:Override
其他默认
事件代码:
declare
…………
begin
………. –你自己的事件就写到这里就行了。
Open_Form(‘gmlconsmrgn’,
ACTIVATE,
SESSION,
L_pl_id);
………..
exception ….
…
end;
Step 4. 编译form和Menu
(编译方法参见下一节)
编译好后,将生成的.fmx和.mmx放到bin目录下去
注意:如果没有编译菜单文件生成.mmx并放入bin目录下,则菜单虽然会挂上去,但点击所有的菜单都没有任何事件响应。
Step 5. 支持多语言
首先,执行
select * from menu_elements where menu_filename=’supplier’ for update;
可以看到,菜单选项就是放这个表里的。
字段含义:
menu_filename 菜单文件名
menu_name 菜单名
menu_item_name 菜单选项名,这里我们一般使用英文,随便取一个名字,假设我们取 GML_CONS_MARGIN
default_lable 默认提示标签,如果语言设置里没有找到对应语言的标签,就会用这个
base_ind 目前我也不知道是什么含义,把它设为’Y’
所以,在上面的表里增加一行menu_name 取OPTIONS_MENU(因为我们要挂在“选项”下),menu_item_name 取 GML_CONS_MARGIN,default_lable 取&GML_CONS_MARGIN
其次,在执行
select * from form_menu_link where menu_filename=’supplier’ for update
可以看到,这个表里存放的是menu和form的关系。因为这form和menu的关系已经存在,我们不去修改它。
再次,执行
select * from menu_elements_langs where menu_filename=’supplier’ for update
这个表就是存放多菜单语言的关系表了。它和menu_elements的字段含义差不多,只不过多了一个语言
我们增加一行,语言设置成中文(字段值为8)
最后运行下边的sql检查多语言是否设置成功
select me.menu_name,
me.menu_item_name,
nvl(mel.lang_label, me.default_label) label
from menu_elements_langs mel,
menu_elements me,
form_menu_link fml
where upper(fml.fm_name) = upper(‘fm_supvwedt’)—form名
and upper(fml.menu_filename) = upper(me.menu_filename)
and upper(me.menu_filename) = upper(mel.menu_filename(+))
and upper(me.menu_name) = upper(mel.menu_name(+))
and upper(me.menu_item_name) = upper(mel.menu_item_name(+))
and 8/*L_user_lang*/ = mel.lang(+)–语言
and mel.menu_item_name = ‘GML_CONS_MARGIN’–菜单选项
and mel.menu_name = ‘OPTIONS_MENU’;–菜单名
如果能查到一条数据,就说明菜单多语言设置已经成功了。
根据前面建立的环境变量,Form的编译语句如下:
假如要编译trv.fmb
oracle 用户登录
source rmsformsvr.env
cd $INSTALL_DIR/rms/forms/src
cp rtv.fmb rtv.fmb.bak
frmcmp.sh userid=$UP module=rtv module_type=form
cp $INSTALL_DIR/rms/forms/bin/rtv.fmx $INSTALL_DIR/rms/forms/bin/rtv.fmx.bak
cp -f $INSTALL_DIR/rms/forms/src/rtv.fmx $INSTALL_DIR/rms/forms/bin/
注:后面两句的意思是将原来的.fmx备份,再将编译后生成的文件放到bin目录下,这样才能运行。
编译menu,比如menu名称supplier.mmb,将上面的frmcmp.sh userid=$UP module=rtv module_type=form
换成frmcmp.sh userid=$UP module=supplier module_type=menu,即改变module=menu名,module_type=menu
注:本小节资料有商云方提供 http://blog.retailsolution.cn/blog/index.php/rms-form-compile
SELECT * FROM NAV_FOLDER WHERE parent_folder IS NULL
SELECT * FROM NAV_FOLDER WHERE parent_folder =’ORDER_RELATED’ –比如 订购
SELECT * FROM NAV_ELEMENT where element=’cux_jeffdemo’ –Form名是 FM_cux_jeffdemo
SELECT * FROM NAV_ELEMENT_MODE WHERE folder=’ORDER_RELATED’ –Form 挂哪个Menu(folder)下
(头上显示的菜单,不是菜单项)
SELECT * FROM FORM_MENU_LINK WHERE fm_name =’FM_’||upper(‘cux_jeffdemo’) for update
即哪个角色可以看某个Form
SELECT * from NAV_ELEMENT_MODE_ROLE where element = ‘cux_jeffdemo’
SELECT * FROM USER_ROLE_PRIVS WHERE USERNAME = ‘RMS12DEV’
所以,这里存在两种关系:
1. User->Role->Form(一个用户可以看见哪些Form)
User
|
Role1 – Role2
|
Form1-Form2-…FormN
2. Folder->Form (一个Form挂在哪个地方)
Folder
|
Folder-Folder…
|
.
.
.
Folder-Folder…
|
Form1-Form2…
下面以一个实例说明:
将form FM_cux_jeffdemo2 挂在rms系统的“订购”–>“固定交易” 菜单下
Step 1.建立菜单
向 table NAV_FOLDER 中加入一行(“订购”和“固定交易”两个菜单都有,所以不用建立)
Step 2.
向 table NAV_ELEMENT 中加入一行
ELEMENT ELEMENT_TYPE COMPONENT
cux_jeffdemo2 F RMS
–ELEMENT Form 名
–ELEMENT_TYPE 类型 F表示Form
–COMPONENT 挂在RMS下
Step 3.
向 table FORM_MENU_LINK 中加入一行
FM_NAME MENU_FILENAME
FM_CUX_JEFFDEMO2 cux_jeffdemo2
–FM_NAME ‘FM_’ + Form名
–MENU_FILENAME Form名
Step 4.
向 table NAV_ELEMENT_MODE 中加入一行
ELEMENT NAV_MODE FOLDER ELEMENT_MODE_NAME
cux_jeffdemo2 –DEFAULT– FIX_DEAL 客户化Form Demo
–ELEMENT Form名
–NAV_MODE 打开Form的状态 查看(VIEW)-编辑(EDIT)-默认(–DEFAULT–)
–FOLDER Form放哪一个菜单(folder)下
–ELEMENT_MODE_NAME 菜单上显示的 prompt
Step 5.
向 table NAV_ELEMENT_MODE _ROLE中加入一行
ELEMENT NAV_MODE FOLDER ROLE
cux_jeffdemo2 –DEFAULT– FIX_DEAL DEVELOPER
–ELEMENT Form名
–NAV_MODE 打开Form状态,需与上一步一致,否则建立不了(与上一步的table设置了外键)
–FOLDER 同上一步
–Role 该Form分给哪个Role
可以查看表 USER_ROLE_PRIVS 知道用户和Role的对应关系
至此,就可以在rms的菜单项中,看到我们增加的这个菜单了(“客户化Form Demo”)。
Retail报表采用Reports builder开发。和6i下开发EBS报表基本没有区别。使用过6i的话,很快就能开发报表。需要提到的一点就是,根据不同输入参数,报表显示不同格式。
例如下面的报表,输入不同的参数,输出不容的布局。
<图4-1> 参数一
<图4-2> 布局一
<图4-3> 参数二
<图4-4>布局二
该类型的报表开发逻辑是:根据需要,用Reports builder建立两个不同的布局,根据参数显示不同的布局。
上面的这个例子在开发的时候,建立了两个循环框。分别在两个循环框里写如下代码如下:
function R_2FormatTrigger return boolean is
begin
if :P_layout=’1′ then
return (false);
else
return (true);
end if;
end;
function R_1FormatTrigger return boolean is
begin
if :P_layout=’1′ then
return (TRUE);
else
return (false);
end if;
end;
仅需这样,就可以实现上面的效果。以前6i里面直接这样写是不行的,还的在布局里建立一个过程。
Rms下,报表管理做得比较粗劣,下面用一个实例来了解Rms挂报表的方法。Rms报表的运行结果是一个浏览器打开的pdf格式的文件,很遗憾,不能像ebs中的并发请求那样,将结果保存在服务器上,只能保存到本地。
利用写好的报表CUX_GouBaoRep_Demo.rdf生成CUX_GouBaoRep_Demo.rep
(6i开发rdf报表公司资料库有很多资料介绍,10 report builder建立rdf文件和6i差不多,这里不详细介绍了)
1. 将本地编译通过的CUX_GouBaoRep_Demo.rdf文件,上传到 /d01/app/retail/rms/app/rms/reports/src
2. 运行下面的命令
cd /home/oracle
su oracle
source rmsformsvr.env
cd /d01/app/retail/rms/app/rms/reports/src
rwconverter.sh source=CUX_GouBaoRep_Demo.rdf userid=$UP dest=CUX_GouBaoRep_Demo.rep stype=RDFFILE dtype=REPFILE batch=yes
上面的命令会在 /d01/app/retail/rms/app/rms/reports/src 目录下生成 CUX_GouBaoRep_Demo.rep,再将 CUX_GouBaoRep_Demo.rep 剪贴到
/d01/app/retail/rms/app/rms/reports/bin下
注意:生成的.rep文件名如果含有字母,则字母必须是全小写,否则在运行的时候会报找不到报表
在后台表RTK_REPORTS添加如下记录
MODULE REPORT_NAME REPORT_DESC PARAMETER_IND PRINTFRM_IND PRINT_MODE SELECT_IND
CUX_GouBaoRep_Demo CUX_GouBaoRep_Demo CUX_GouBaoRep_Description_Demo Y Y A
table RTK_REPORTS 字段说明:
1. MODULE 应该类似于EBS中的模组,但这里随便输入都可以
2. REPORT_NAME 报表名,这个须是报表文件名,比如CUX_GouBaoRep_Demo
3. REPORT_DESC 报表描述,随便取一个用户容易看懂的
4. PARAMETER_IND 只能选择’Y’/’N’,目前还不知道作用,从意义上来看应该和参数有关,但我测试输入’Y’或’N’好像没有什么区别
5. PRINTFRM_IND 只能选择’Y’/’N’,在form上可以打印的时候是否可以选择到该报表,选择’Y’,可在rms form中选择到,否则选不到
6. PRINT_MODE 只能选择’A’/’S’,同PARAMETER_IND,目前也不确定
7. SELECT_IND 不确定,目前系统里都为空
可以看到客户化的报表已经可以运行了。
效果图见:<图1-5>-<图1-8>
RMS系统用户的用户为DB用户,创建非常繁琐,而且需要后台处理,这里总结步骤如下:
1. 在数据库后台创建DB用户。
2. 对创建的用户授予角色权限、系统权限。
/*==================================================
Copyright (C) HAND Enterprise Solutions Co.,Ltd.
AllRights Reserved
==================================================*/
/*==================================================
Program Name:
CREATE RMS USER
Description:
This program create Oracle rms db user and grant all privileges .
History:
1.00 2008-11-10 Kenneth.shao Creation
2.00 2008-11-10 Kenneth.shao Modified
修改角色授权,增加选择角色功能,可以支持授权多个角色,用“,”号分割
如:developer,select_catalog_role
Version:
2.00
==================================================*/
DECLARE
l_user_name VARCHAR2(30) := '&USER_NAME' ;
l_roles VARCHAR2(400) := '&ROLE' ;
l_crt_user varchar2(300) := 'create user '|| l_user_name ||'
identified by "' || l_user_name || '"
default tablespace RETEK_DATA
temporary tablespace TEMP
profile DEFAULT
quota unlimited on lob_data
quota unlimited on retek_data
quota unlimited on retek_index';
l_grant VARCHAR2(4000) ;
BEGIN
--Create user
EXECUTE IMMEDIATE l_crt_user ;
--Grant directory
l_grant := 'grant read on directory SYS.OUTPUT_WORKING to '||l_user_name;
EXECUTE IMMEDIATE l_grant ;
l_grant := 'grant read on directory SYS.UTL_FILE_DIR to '||l_user_name||'with grant option';
EXECUTE IMMEDIATE l_grant ;
--Grant role privileges
l_grant := 'grant ' || l_roles || ' to '||l_user_name ;
EXECUTE IMMEDIATE l_grant ;
--Grant system privileges
l_grant := 'grant alter session
, analyze any
, create any context
, create any procedure
, create any synonym
, create any table
, create any type
, create database link
, create library
, create materialized view
, create procedure
, create public database link
, create public synonym
, create sequence
, create session
, create synonym
, create table
, create trigger
, create view
, debug connect session
, delete any table
, drop any procedure
, drop any synonym
, drop any table
, execute any procedure
, execute any type
, insert any table
, query rewrite
, select any sequence
, select any table
, update any table to '||l_user_name ;
EXECUTE IMMEDIATE l_grant ;
END ;
3. 为新建DB用户创建RMS12DEV(现行环境下的用户)下对象的同义词
/*==================================================
Copyright (C) HAND Enterprise Solutions Co.,Ltd.
AllRights Reserved
==================================================*/
/*==================================================
Program Name:
CREATE RMS SYNONYM
Description:
This program create all synonym for rms12dev to rms new user .
History:
1.00 2008-11-10 Kenneth.shao Creation
Version:
1.00
==================================================*/
DECLARE
l_user VARCHAR2(30) := '&USER_NAME';
BEGIN
FOR syn_r IN (SELECT DISTINCT 'create or replace synonym '|| l_user || '.' ||object_name || ' for rms12dev.' || object_name syn
FROM dba_objects
WHERE owner = 'RMS12DEV'
AND object_name NOT LIKE 'BIN$%'
AND object_type IN ('SEQUENCE'
,'PROCEDURE'
,'PACKAGE'
,'LOB'
,'LIBRARY'
,'MATERIALIZED VIEW'
,'TABLE'
,'VIEW'
,'FUNCTION'
,'TYPE')
) LOOP
BEGIN
EXECUTE IMMEDIATE syn_r.syn ;
EXCEPTION
WHEN OTHERS THEN
dbms_output.put_line(syn_r.syn||'-----'||SQLERRM) ;
END ;
END LOOP;
END ;
4. 在RMS系统中设置用户属性,位置:启动->控制->设置->用户属性->新建
选择语言
注:如果没有创建用户,Step4中会提示用户无效。如果没有创建同义词,则用新建的用户进系统的时候会提示对表操作没有权限。
5. 设置用户组,位置:启动->控制->系统->地点/产品安全性->用户/组链接->编辑。(设置之前必须保证组已经建立并赋予一定的权限,这里不详细讲述)。添加一行新的。
到这里为止,用户已经成功创建,只要组已经设置并赋权,用户便可以使用。
可以看出,其实RMS用户是在DB层建立的用户。
注:本小节资料有邵志国提供 http://blog.retailsolution.cn/blog/index.php/retail-rms-user-create
在oracleias 10g中,已经没有report server,被整合到OC4J里,所以,要启动10AS的“Report Server”,只有启动OC4J就可以了。
通过下面命令:
opmnctl status
得到如下输出:
Processes in Instance: formreportsvr.syfr12
——————-+——————–+———+———
ias-component | process-type | pid | status
——————-+——————–+———+———
DSA | DSA | N/A | Down
LogLoader | logloaderd | 11895 | Alive
HTTP_Server | HTTP_Server | 5298 | Alive
dcm-daemon | dcm-daemon | N/A | Down
WebCache | WebCache | 5305 | Alive
WebCache | WebCacheAdmin | 5294 | Alive
OC4J | home | 13643 | Alive
OC4J | OC4J_BI_Forms | 13644 | Alive
可以看到OC4J已经起来了,但在运行报表的时候如下错误:
“http 404”的错误,或者找不到网页的错误
Case
Report Server的配置问题。
Solution
1. 修改rms.env(/d01/app/oracleas/OraHome_1/forms/server/目录下),在后面追加一下内容
具体请参考(Detail请参考 /d01/app/retail/rms/12.0.1下rms-1201-ig.pdf 【Configure Oracle Application Server 10 for RMS Reports】)
/*****************************************************
ORACLE_RMS_REPORTS_HOST=http://syfr12:7778/
ORACLE_RMS_REPORTS_SERVER=rep_syfr12_oracleas1+envid=rms12arep
ORACLE_RMS_RWSERVER=reports/rwservlet
*****************************************************/
注:ORACLE_RMS_REPORTS_HOST=http://<server>:<Listen port>
ORACLE_RMS_REPORTS_SERVER is the value of the reports configuration file without the .conf plus a standard envid (“envid” must be used) and the name of the header inside the configuration file that defines the variable REPORTS_PATH.
2. 修改rep_syfr12_oracleas1.conf(/d01/app/oracleas/OraHome_1/reports/conf目录下)
在标签</server>前添加以下内容(Detail请参考metalink 559039.1)
/*******************************************************
<environment id=”rms12arep”>
<envVariable name=”REPORTS_PATH”
value=”/appl/acc/ah01/rt12/rms/reports/bin:/appl/acc/ise/oras/aoasgm02/reports/reports/
templates:/appl/acc/ise/oras/aoasgm02/reports/reports/samples/demo:/appl/acc/ise/oras/
aoasgm02/reports/integ:/appl/acc/ise/oras/aoasgm02/reports/printers”/><envVariable name=”NLS_LANG” value=”AMERICAN_AMERICA.UTF8″/>
</environment>
*******************************************************/
从Retail标准Form来看,新增一个Form,需在SCREEN_SQL中增加一个函数,在Form的初始化过程P_INITIALIZE中会调用SCREEN_SQ.GET_SCREENTEXT,进而调用的新增的函数。一直没弄明白该函数的作用,我自己新建的一个Form,没有做这一个动作,仍然可以运行。
———————————————————————————————————
作者 黄鸿
组别 广州技术一组
2006年正式参加工作,热衷ERP事业,曾在liteonit(广州)实施SFC系统和EBS的二次开发和流程优化工作。2008年6月进入Hand,先后在温州天正协同制造项目,上海购宝零售项目做技术支持工作。对EBS制造、分销方面有开发经验,熟悉的开发工具有form/report/pl sql/discover/xml report 这篇文章是在上海购宝项目期间,做客户化开发过程中所写下的。
要学习的还有很多,同志仍需努力
RMS-RETL-RDW 数据抽取测试实例
测试:币别数据抽取测试
目的:从RMS模块币别基表中把币别数据读取出来,转换后写入到RDW的币别基表中。
好处:RDW-数据仓库实则也为一数据库,但跟通常的事务性数据库相比,多了对数据的分析、制订计划及高层次的聚合。普通的数据库通常是为特定应用程序设计的,而数据仓库集成了不同源头的数据。普通的数据库关心的是现在,而数据仓库关心的是随着时间变化的活动。普通的数据库是易变的,而数据仓库则是稳定的,它的信息只会以标准的间隔进行更新,也许是按月、按周,或按小时,并且在理想情况下更新只会增加新时间段的数据,而不会更改先前存储在数据仓库中的值。
针对我们项目,把其它各模块中的数据读写到RDW中,进行高度汇总后,再使用BI报表工具制作管理分析报表(OLAP和数据挖掘),这样即保证了对各模块写入的大容量数据进行快速整合获取,也确保了因没有在其它模块中进行开发,而影响到对应模块的整体性能。
我们常用的google、baidu是运用数据仓库最典型的实例。
一、从RMS模块币别基表中把币别数据读取出来(参考 rms-1205-og1.pdf 文档考核章节:RETL Extraction Programs)
说明:1.RMS Extract Data – Based on RDW Dimension Data 数据抽取是没有参数的,直接运行.ksh脚本;
2.RMS Extract Data – Based on RDW Fact Data 数据抽取是带参数的,参数即为运行 .ksh 脚本后面加入 output_file_path/filename
1. oracle用户:su oracle
启动RETL:source /home/rfx/retl.env
启动RMS:source /home/oracle/rmsbatchenv.env
MMHOME环境变量修改为:
MMHOME=/d01/app/retail/rms/db/retlforRDW
export MMHOME
2. cd $MMHOME/rfx/src
./crncycdex.ksh
备注:(a)查看crncycdex.ksh中,PROPERTY name=”query” 是通过以下Sql获取出币别数据:
SELECT CURRENCY_CODE CRNCY_CDE_IDNT,
CURRENCY_DESC CRNCY_CDE_DESC
FROM rms12dev.CURRENCIES
(b) 为了查看运行RETL功能执行脚本的更多日志,可以启用两个参数:
export RFX_DEBUG=1
export RFX_SHOW_SQL=1
3. 在$MMHOME/log 和 $MMHOME/error中分别产生执行crncycdex.ksh脚本日志:
19960101.log:
========================================
crncycdex 17:52:21: Program started …
crncycdex 17:52:22: Program completed successfully
========================================
crncycdex.19960101:
========================================
—————————–
crncycdex 17:52:21: Program started …
—————————–
Starting the threads
All threads complete
Flow ran successfully
—————————–
crncycdex 17:52:22: Program completed successfully
—————————–
========================================
4. 在$MMHOME/data中产生数据文件:crncycddm.txt,根据验证即为上面第2步中的Sql查询的结果,所以此时完成从RMS币别基表中把币别数据读取出来的功能;
二、把从RMS中获取的币别数据转换及写入RDW中(参考 rdw-12001-og.pdf 文档考核章节:Program Flow Diagrams)
说明:在进行往RDW中转换及写入数据前,要确保RDW安装的完整性,包括初始数据导入的完整性。
1. oracle用户:su oracle
启动RETL:source /home/rfx/retl.env
启动RDW:source /home/oracle/rdw_profile_ora
INSTALL_DIR=/d01/app/retail/rdw/dbserverunix
export INSTALL_DIR
2. 把RMS data目录下产生的数据文件 crncycddm.txt 拷贝到RDW data目录下:
cp /d01/app/retail/rms/db/retlforRDW/data/crncycddm.txt /d01/app/retail/rdw/rdw12.0/dev/data/crncycddm.txt
3. 根据文档说明及流程图(图1、2),需要先执行‘A’的五个脚本文件:
执行顺序:factopendm.ksh -> medfactopendm.ksh -> factclosedm.ksh -> seasnopendm.ksh -> mt_prime.ksh
cd $MMHOME/rfx/src
3.1 factopendm.ksh (参考文档52页Factopendm.ksh说明) 根据文档,需要先执行以下三个脚本:prditmdm.ksh -> prddepdm.ksh -> orglocdm.ksh
./prditmdm.ksh
./prddepdm.ksh
./orglocdm.ksh
./factopendm.ksh
3.2 ./medfactopendm.ksh
3.3 ./factclosedm.ksh
3.4 ./seasnopendm.ksh
3.5 ./mt_prime.ksh
4. ./crncycddm.ksh
备注:以上各.ksh脚本执行后,均可在目录$MMHOME/log 或 $MMHOME/error中查看日志文件,如果有错误可根据日志进行修改后,重新执行对应脚本。
5. 也可通过以下Sql验证导入到RDW中的币别数据:SELECT * FROM CRNCY_CDE_DM
导入不同的数据,需要RDW相应的表中进行验证;
若执行以上.ksh脚本发生问题,可参考RDW 12安装日志(包括补充文档)、Retail-RDW-讨论帖。
RDW 12 安装日志补充说明
接着安装 RDW Database 的最后一步操作:
2.3.15 创建RDW时间和日期(即往 RDW 各日期基表中写入初始数据) 时出现以下问题:
一、安装 RDW Database 参考文档 rdw-120-ig-db.pdf 章节:Create Time in RDW 中有说明:
====================================
1. If RMS is not being used as the source of the time calendar, move on to step 2,
otherwise after running time extraction in RMS (see RMS Operations Guide for
details), FTP time_454.txt, start_of_half_month.txt, and wkday.txt from RMS install
directory to the RDW directory <base_directory>/rdw12.0/install.
2. Login to the RDW database server as the UNIX user rdw12dev. Verify the RETL
executable is in the path of your Unix session by typing which rfx at the UNIX
prompt.
3. Change directories to <base_directory>/rdw12.0/install.
4. Verify the C compiler is in the path of your Unix session and the C compiler is in
your Unix library path. At the Unix prompt, enter:
which cc
5. Compile the module cr_time_454, cr_time_13 and cr_time_g with a standard ANSI
C compiler. At the Unix prompt, enter:
cc –g –I. –o cr_time_454 c_utils.c cr_time_454.c
cc –g –I. –o cr_time_13 c_utils.c cr_time_13.c
cc –g –I. –o cr_time_g c_utils.c cr_time_g.c
6. Execute the cr_time.ksh module. At the Unix prompt enter:
cr_time.ksh
7. This script will prompt for the calendar type. Choose 1 for 454 time, 2 for 13 period
time and 3 for 454 with Gregorian time.
8. At the prompt enter the 4-digit year for the beginning and ending of the time
calendar:
Please enter first year to be loaded:
Please enter last year to be loaded:
Note: To determine the beginning and ending fiscal year,
refer to the text file modified above. Verify all months or
periods are included in the text file for the first year; no
partial years are allowed.
One text file will be generated in the install directory for each dimension table.
9. At the UNIX prompt, for 454 time calendar or 13 period time calendar enter:
time_load.ksh
time_trnsfrm_load.ksh
10. At the UNIX prompt, for 454 time with Gregorian time calendar enter
time_load.ksh
g_time_load.ksh
time_trnsfrm_load.ksh
g_time_trnsfrm_load.ksh
====================================
根据 第1点中 see RMS Operations Guide for details,参考 rms-1203-og3.pdf 章节:Running the Time 454 Extract Module 来进行安装:
====================================
1. Log in to the RMS database server as RMS RETL-specific database user. Run the
profile and verify that the MMUSER and PASSWORD variables are set to the RETLsepcific
database user, and the appropriate password. Verify the RETL executable is
in the path of your UNIX session by typing:
%which rfx
2. Change directories to $MMHOME/install.
3. Modify the variable l_path in the extract_time.sql script to reference the UTL_FILE
directory specified in the RMS database parameter file.
4. At the UNIX prompt enter:
%extract_time.ksh
This script generates three files called time_454*.txt, wkday*.txt, and
start_of_half_month*.txt located in the utl_file_dir directory specified in your RMS
database parameter file.
5. Change directories on the UNIX server to $MMHOME/log. Review the log file that
was created or modified.
6. Change directories on the UNIX server to $MMHOME/error. Review the error files
that were created.
7. Move the three output files to $MMHOME/install directory.
====================================
参照RMS提供的以上7个步骤进行安装:
1)执行启动RMS环境变量:source /home/oracle/rmsbatchenv.env
2)重新指定:export MMHOME=/d01/app/retail/rms/db/retlforRDW
3)创建目录:$MMHOME/install
4)cp $MMHOME/rfx/src/extract_time.ksh $MMHOME/install/extract_time.ksh
cp $MMHOME/rfx/src/extract_time.sql $MMHOME/install/extract_time.sql
vi extract_time.sql //修改l_path=$MMHOME/install/
5)执行:cd $MMHOME/install
./extract_time.ksh
在目录$MMHOME/log 和 $MMHOME/error 下产生执行以上脚本的错误日志(extract_time.19960101.txt):
====================================
—————————–
extract_time 11:51:49: Program extract_time started
—————————–
SQL*Plus: Release 10.2.0.3.0 – Production on Tue Nov 11 11:51:49 2008
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> SQL> old 2: l_filename VARCHAR2(50) := ‘&1’;
new 2: l_filename VARCHAR2(50) := ‘time_454.txt’;
old 3: l_filename2 VARCHAR2(50) := ‘&2’;
new 3: l_filename2 VARCHAR2(50) := ‘wkday.txt’;
old 4: l_filename3 VARCHAR2(50) := ‘&3’;
new 4: l_filename3 VARCHAR2(50) := ‘start_of_half_month.txt’;
old 26: FROM &4.calendar c,
new 26: FROM RMS12DEV.calendar c,
old 27: &4.system_options s
new 27: RMS12DEV.system_options s
old 40: FROM &4.calendar c,
new 40: FROM RMS12DEV.calendar c,
old 41: &4.system_options s
new 41: RMS12DEV.system_options s
old 50: FROM &4.calendar;
new 50: FROM RMS12DEV.calendar;
old 54: FROM &4.calendar;
new 54: FROM RMS12DEV.calendar;
old 58: FROM &4.system_options;
new 58: FROM RMS12DEV.system_options;
Unable to open file <$MMHOME/install/time_454.txt>: -29280:ORA-29280: invalid directory path
DECLARE
*
ERROR at line 1:
ORA-29280: invalid directory path
ORA-06512: at line 66
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
—————————–
extract_time 11:51:49: ERROR: Program failed – check /d01/app/retail/rms/db/retlforRDW/error/extract_time.19960101
—————————–
====================================
问题一:因根据以上RMS安装指导第4点说明,运行extract_time.ksh会产生time_454*.txt, wkday*.txt, and start_of_half_month*.txt,但目前没有生成此三个文件,并报在相应目录下找不到time_454.txt文件的错误。
解决方案:
登录PL/SQL tool,在Command Windows下查看utl_file_dir的值
SQL> show parameter utl_file_dir
NAME TYPE VALUE
———————————— ———– ——————————
utl_file_dir string /d01/app/oracle/product/10.2.0/db_1/admin/retl/utl_file_tmp, /tmp, /ftphome/gml/working
再修改:l_path=/d01/app/oracle/product/10.2.0/db_1/admin/retl/utl_file_tmp’; /* value of utl_file_dir */
删除之前运行 extract_time.ksh 在目录 $MMHOME/error 中产生的 extract_time.*.txt 文件(有两个文件),再次运行:
./extract_time.ksh
执行正确,日志文件显示如下:
====================================
—————————–
extract_time 13:29:34: Program extract_time started
—————————–
SQL*Plus: Release 10.2.0.3.0 – Production on Wed Nov 12 13:29:34 2008
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> SQL> old 2: l_filename VARCHAR2(50) := ‘&1’;
new 2: l_filename VARCHAR2(50) := ‘time_454.txt’;
old 3: l_filename2 VARCHAR2(50) := ‘&2’;
new 3: l_filename2 VARCHAR2(50) := ‘wkday.txt’;
old 4: l_filename3 VARCHAR2(50) := ‘&3’;
new 4: l_filename3 VARCHAR2(50) := ‘start_of_half_month.txt’;
old 26: FROM &4.calendar c,
new 26: FROM RMS12DEV.calendar c,
old 27: &4.system_options s
new 27: RMS12DEV.system_options s
old 40: FROM &4.calendar c,
new 40: FROM RMS12DEV.calendar c,
old 41: &4.system_options s
new 41: RMS12DEV.system_options s
old 50: FROM &4.calendar;
new 50: FROM RMS12DEV.calendar;
old 54: FROM &4.calendar;
new 54: FROM RMS12DEV.calendar;
old 58: FROM &4.system_options;
new 58: FROM RMS12DEV.system_options;
SQL> Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
—————————–
extract_time 13:29:34: Program completed succesfully
—————————–
====================================
同时产生相应文件:
(i)在目录$MMHOME/log 和 $MMHOME/error 下产生执行脚本日志文件(extract_time.19960101.txt);
(ii)在目录$ORACLE_HOME/admin/retl/utl_file_tmp 下产生 time_454.txt、wkday.txt、start_of_half_month.txt 三个数据文件;
登录RMS数据库,查看日期数据:select * FROM RMS12DEV.calendar;
接着往下操作:
cp $ORACLE_HOME/admin/retl/utl_file_tmp/time_454.txt $MMHOME/install/time_454.txt
cp $ORACLE_HOME/admin/retl/utl_file_tmp/wkday.txt $MMHOME/install/wkday.txt
cp $ORACLE_HOME/admin/retl/utl_file_tmp/start_of_half_month.txt $MMHOME/install/start_of_half_month.txt
二、接着参考 RDW Database 安装指导文档 rdw-120-ig-db.pdf 章节:Create Time in RDW 进行操作:
1) source /home/oracle/rdw_profile_ora
2) cp /d01/app/retail/rms/db/retlforRDW/install/time_454.txt $MMHOME/install/time_454.txt
cp /d01/app/retail/rms/db/retlforRDW/install/wkday.txt $MMHOME/install/wkday.txt
cp /d01/app/retail/rms/db/retlforRDW/install/start_of_half_month.txt $MMHOME/install/start_of_half_month.txt
3) which cc
返回结果:/usr/bin/cc
/usr/bin/cc -g -I. -o cr_time_454 c_utils.c cr_time_454.c
/usr/bin/cc -g -I. -o cr_time_13 c_utils.c cr_time_13.c
/usr/bin/cc -g -I. -o cr_time_g c_utils.c cr_time_g.c
4) 执行:
cd $MMHOME/install
./cr_time.ksh
显示及输入如下信息:
Do you wish to use 454 time calendar, 13 period time calendar or 454 time calendar with Gregorian time calendar?
Enter 1 when you wish to use 454 time calendar,
Enter 2 when you wish to use 13 period time calendar,
Enter 3 when you wish to use 454 with Gregorian time calendar. [1, 2 or 3]
1
Please enter first year to be loaded:
1994-01-03
Please enter last year to be loaded:
2023-12-04
Starting the threads
All threads complete
Flow ran successfully
Started
Terminated Ok
备注:
(i)上面提示中输入的启始年月日,是根据$MMHOME/install 目录下面的time_454.txt 文档中存在的最小最大日期输入的;如果输入的日期不在 time_454.txt 文件中列出来的日期范围内,则会产生错误;
(ii)如果RDW日期表中的初始日期是根据 time_454.txt 文档中的日期导入,那如果需要更大的日期时,是否要手动编辑往time_454.txt 文件中增加日期;如果这样做,那工作量可能很大,并根据自带 time_454.txt 文件看,产生日期的有方式不是通常年月的初末形式,而是从每个月第一个星期一开始。所以以后Retail各模板的日期或区间的初始化是业务顾问在系统中建立,还是从后台编辑此文本再进行导入?
(iii)上面提示中选择输入 Calendar type 时,我选择的是 1 for 454 time;而真正在系统中需要什么样的 Calendar type 还得请业务顾问确认一下。
(iv)执行了cr_time.ksh脚本后,在$MMHOME/install中产生许多time_*_dm.txt 数据文件,记录各种类型的数据,以供导入到RDW基表。
5)因为执行了1 for 454 time,所以执行第9步,即运行:time_load.ksh 和 time_trnsfrm_load.ksh 脚本:
./time_load.ksh
在目录下$MMHOME/log 和 $MMHOME/error 下产生执行以上脚本的错误日志(time_load.20010310.txt):
====================================
—————————–
time_load 13:58:09: Loading initial data files into TIME_DAY_DM TIME_YR_DM TIME_HALF_DM TIME_MTH_DM TIME_WK_DM TIME_QTR_DM in time_load
—————————–
Starting the threads
WARN – W149: [changecapture:1] “value” is not specified. Comparing all fields.
Consider specifying the “value” property for better performance.
FATAL – retl 12.0.1 build 1142 (1.4.2_04-b05 :: Sun Microsystems Inc. :: i386 :: Linux :: 2.6.9-42.0.0.0.1.ELsmp)
FATAL – E135: Exception in operator [sort:2]
E108: java.io.IOException: gsort: not found
—————————–
time_load 13:58:11: ERROR: Loading time flat file rdw12dm.TIME_DAY_DM failed
—————————–
====================================
问题二:正常情况是把上一步产生的 time_*_dm.txt 数据文件中的数据写入到对应的RDW日期基表中,但出现以上错误,不知何因,还在查找原因中?
解决方案:
6)./time_trnsfrm_load.ksh
在目录下$MMHOME/log 和 $MMHOME/error 下产生执行以上脚本的错误日志(time_trnsfrm_load.20010310.txt):
====================================
./time_trnsfrm_load.ksh[30]: LAST_YR_DAY_IDNT
LAST_HALF_DAY_IDNT
LAST_QTR_DAY_IDNT
LAST_MTH_DAY_IDNT
LAST_WK_DAY_IDNT: bad number
====================================
问题三:正常情况也是写入RDW日期表的值,但出现以上错误,不知何因,还在查找原因中?
解决方案:
2.3.16 Populate Static Dimension Data
1 ./timelfldm.ksh
在目录下$MMHOME/log 和 $MMHOME/error 下产生执行以上脚本的日志(timelfldm.20010310.txt):
====================================
—————————–
timelfldm 15:15:12: Loading time LIKE FOR LIKE tables
—————————–
SQL*Plus: Release 10.2.0.3.0 – Production on Tue Nov 11 15:15:12 2008
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> SQL>
0 rows deleted.
SQL>
Commit complete.
SQL> Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
Starting the threads
All threads complete
Flow ran successfully
SQL*Plus: Release 10.2.0.3.0 – Production on Tue Nov 11 15:15:14 2008
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> SQL>
0 rows deleted.
SQL>
Commit complete.
SQL> Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
Starting the threads
All threads complete
Flow ran successfully
—————————–
timelfldm 15:15:15: Loading time LIKE FOR LIKE tables completed successfully
—————————–
====================================
2 ./vchragedm.ksh
在目录下$MMHOME/log 和 $MMHOME/error 下产生执行以上脚本的日志(vchragedm.20010310.txt):
====================================
—————————–
vchragedm 15:17:18: Loading voucher age band table
—————————–
SQL*Plus: Release 10.2.0.3.0 – Production on Tue Nov 11 15:17:18 2008
Copyright (c) 1982, 2006, Oracle. All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
SQL> SQL>
0 rows deleted.
SQL>
Commit complete.
SQL> Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 – 64bit Production
With the Partitioning, OLAP and Data Mining options
Starting the threads
All threads complete
Flow ran successfully
—————————–
vchragedm 15:17:20: Loading voucher age band table completed successfully
—————————–
====================================
此章节的两个脚本导入都成功,可用rdw12dm登录RDW数据库进行验证基表产生相应数据:
SELECT * FROM time_last_yr_by_day_lfl_dm;
SELECT * FROM time_last_yr_by_wk_lfl_dm;
SELECT * FROM vchr_age_band_dm;
RMS系统用户的创建非常繁琐,而且需要后台处理,这里总结步骤如下:
1、在数据库后台创建DB用户。
2、对创建的用户授予角色权限、系统权限。
以上两步可使用以下SQL脚本完成:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | /*================================================== Copyright (C) HAND Enterprise Solutions Co.,Ltd. AllRights Reserved ==================================================*/ /*================================================== Program Name: CREATE RMS USER Description: This program create Oracle rms db user and grant all privileges . History: 1.00 2008-11-10 Kenneth.shao Creation 2.00 2008-11-10 Kenneth.shao Modified 修改角色授权,增加选择角色功能,可以支持授权多个角色,用“,”号分割 如:developer,select_catalog_role Version: 2.00 ==================================================*/ DECLARE l_user_name VARCHAR2(30) := '&USER_NAME' ; l_roles VARCHAR2(400) := '&ROLE' ; l_crt_user varchar2(300) := 'create user '|| l_user_name ||' identified by "' || l_user_name || '" default tablespace RETEK_DATA temporary tablespace TEMP profile DEFAULT quota unlimited on lob_data quota unlimited on retek_data quota unlimited on retek_index'; l_grant VARCHAR2(4000) ; BEGIN --Create user EXECUTE IMMEDIATE l_crt_user ; --Grant directory l_grant := 'grant read on directory SYS.OUTPUT_WORKING to '||l_user_name; EXECUTE IMMEDIATE l_grant ; l_grant := 'grant read on directory SYS.UTL_FILE_DIR to '||l_user_name||' with grant option'; EXECUTE IMMEDIATE l_grant ; --Grant role privileges l_grant := 'grant ' || l_roles || ' to '||l_user_name ; EXECUTE IMMEDIATE l_grant ; --Grant system privileges l_grant := 'grant alter session , analyze any , create any context , create any procedure , create any synonym , create any table , create any type , create database link , create library , create materialized view , create procedure , create public database link , create public synonym , create sequence , create session , create synonym , create table , create trigger , create view , debug connect session , delete any table , drop any procedure , drop any synonym , drop any table , execute any procedure , execute any type , insert any table , query rewrite , select any sequence , select any table , update any table to '||l_user_name ; EXECUTE IMMEDIATE l_grant ; END ; |
3、为新建DB用户创建RMS12DEV(现行环境下的用户)下对象的同义词。可使用如下脚本执行:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | /*================================================== Copyright (C) HAND Enterprise Solutions Co.,Ltd. AllRights Reserved ==================================================*/ /*================================================== Program Name: CREATE RMS SYNONYM Description: This program create all synonym for rms12dev to rms new user . History: 1.00 2008-11-10 Kenneth.shao Creation Version: 1.00 ==================================================*/ DECLARE l_user VARCHAR2(30) := '&USER_NAME'; BEGIN FOR syn_r IN (SELECT DISTINCT 'create or replace synonym '|| l_user || '.' || object_name || ' for rms12dev.' || object_name syn FROM dba_objects WHERE owner = 'RMS12DEV' AND object_name NOT LIKE 'BIN$%' AND object_type IN ('SEQUENCE' ,'PROCEDURE' ,'PACKAGE' ,'LOB' ,'LIBRARY' ,'MATERIALIZED VIEW' ,'TABLE' ,'VIEW' ,'FUNCTION' ,'TYPE') ) LOOP BEGIN EXECUTE IMMEDIATE syn_r.syn ; EXCEPTION WHEN OTHERS THEN dbms_output.put_line(syn_r.syn||'-----'||SQLERRM) ; END ; END LOOP; END ; |
4、在RMS系统中设置用户属性,位置:启动->控制->设置->用户属性->新建。
5、设置用户组,位置:启动->控制->系统->地点/产品安全性->用户/组链接->编辑。(设置之前必须保证组已经建立并赋予一定的权限,这里不详细讲述)。
到这里为止,用户已经成功创建,只要组已经设置并赋权,用户便可以使用。
现在项目上需要编写PRO*C,在UNIX系统上通常都会使用makefile来统一管理、编译C/C++等程序,下面从网上找了一片文章来介绍makefile的编写,需要的同事研究以下。
什么是makefile?或许很多Winodws的程序员都不知道这个东西,因为那些Windows的IDE都为你做了这个工作,但我觉得要作一个好的和professional的程序员,makefile还是要懂。这就好像现在有这么多的HTML的编辑器,但如果你想成为一个专业人士,你还是要了解HTML的标识的含义。特别在Unix下的软件编译,你就不能不自己写makefile了,会不会写makefile,从一个侧面说明了一个人是否具备完成大型工程的能力。 因为,makefile关系到了整个工程的编译规则。一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。 makefile带来的好处就是——“自动化编译”,一旦写好,只需要一个make命令,整个工程完全自动编译,极大的提高了软件开发的效率。make是一个命令工具,是一个解释makefile中指令的命令工具,一般来说,大多数的IDE都有这个命令,比如:Delphi的make,Visual C++的nmake,Linux下GNU的make。可见,makefile都成为了一种在工程方面的编译方法。
http://wiki.ubuntu.org.cn/%E8%B7%9F%E6%88%91%E4%B8%80%E8%B5%B7%E5%86%99Makefile
概述:
Retail 为Form开发提供了一个模板 fm_temp1.fmb ,在/d01/app/retail/rms/app/rms/forms/src目录下,该文件基本上已经将retail form涉及到的底层代码写好(比如实现多语言的调用等),我们在开发一个新的form的时候,只要在该模板的基础上实现自己的业务逻辑就行了。
另外,还有一个模板fm_date.fmb,用来做和日期相关的操作,最常见的是做LOV。比如,和ebs一样,我们需要选择日期,弹出一个选则日期的LOV,就要用到这个文件。
Retail的form界面风格和EBS有点不同,给我的总体感觉是布局比较灵活,比较接近我们客户化的风格。它的一个block在界面上显示出来的字段一般比较少,现在还没有发现使用folder的情况。
按Retail的习惯,开发一个新的form,一般需要开发下面三个文件。
查找form,在打开“真正”的业务处理form fm_XXX.fmb之前,需要打开这个查找form,该form的作用是选择本次操作的类型,一般有三种类型,查看,编辑,新建。如果是“新建”,则直接打开form_XXX来新建业务;如果是“查看”,则通过该form查到到业务记录,调用fm_XXX查看业务细节,fm_XXX的项都是不可编辑的;如果是“编辑”,则调用fm_XXX查看业务细节,并对业务细节进行编辑。
使用fm_XXX_find,是因为Retail form中没有EBS的 F11,Ctl+F11等快捷键,也没有EBS中“查找”窗体。我们也可以不使用这个form,只要在打开form fm_XXX.fmb的时候能够确定本次操作是查看,编辑或者新建就好了。比如,同一个form我们需要不同权限的人来打开,有的权限是查看,有的是编辑,有的是新建。这时候,我们只要在菜单上给每个权限挂不同的菜单项,对没个菜单项设置打开form的默认操作即可。
这是实现业务逻辑的主要form。改form由fm_XXX_find.fmb调用open_form打开,open_form会使用一些参数,比如打开新form的状态是view,edit或者是new。
每一个form都对应一个菜单,当然,如果改form上不需要额外的菜单,在设置form对应的菜单的时候,就将该form的菜单设置为公用菜单:rtkform(参考 客户化Form挂到RMS中步骤,Menu中的 Form名和实际的Form名对应关系)
Block 一般命名为 B_XXX,
Cavans 一般命名为 C_XXX,
Window一般命名为 W_XXX这样的形式。
Retail的多语言,和ebs不同。ebs是在不同的语言环境放置不同语言的form程序,retek则只有一个form程序,它将需要显示给用户看的项的label,存放在数据库的特定表里,如果一个项有多种语言,则一个项在表里就有多条记录,当form启动的时候,在Form级WHEN-NEW-FORM-INSTANCE 触发器中,通过P_FORM_STARTUP->P_INITIALIZE 将Form中的每个Item和Item对应Label项取出来(在fm_temp1中已经写好了),我们要做的是将这些项和它们对应的语言手工取出来,放入数据库的特定表中。
Form的多语言:
Form的语言是放在表form_elements_langs和form_elements中的。
其获取语言的sql如下:
select fe.block_name,
fe.item_name,
fe.sub_item_name,
fe.item_type,
nvl(fel.lang_label_prompt, fe.default_label_prompt) label_prompt,
nvl(fel.lang_access_key,fe.default_access_key) access_key ,fel.lang
from form_elements_langs fel,
form_elements fe
where fe.fm_name = ‘FM_ORDHEAD’/*I_form*/–by Form
and upper(fe.fm_name) = upper(fel.fm_name(+))
and upper(fe.block_name) = upper(fel.block_name(+))
and upper(fe.item_name) = upper(fel.item_name(+))
and upper(fe.sub_item_name) = upper(fel.sub_item_name(+))
and 8/*L_user_lang*/ = fel.lang(+)–by user Language
and fe.default_label_prompt is not NULL;
所以,我需要向表form_elements_langs和form_elements中插入每个需要显示项的信息。比如,在供应商维护form(SUPVWEDT)中有一个供应商代码(SUPPLIER)字段,查询这两个表
select * from form_elements where fm_name=’FM_SUPVWEDT’ and item_name=’SUPPLIER’
FM_NAME BLOCK_NAME ITEM_NAME ITEM_TYPE SUB_ITEM_NAME DEFAULT_LABEL_PROMPT DEFAULT_ACCESS_KEY BASE_IND
FM_SUPVWEDT B_SUPS SUPPLIER Text Item NONE Supplier Y
字段描述:
FM_NAME: FM_||Form文件的名字
BLOCK_NAME: 该项(SUPPLIER)所在的block名字,如没有,就写"NONE"
ITEM_NAME: 该项(SUPPLIER)名
ITEM_TYPE: 项的类型,这里是 Text Item,还有Push Button,Window,LOV等很多,这里一定要写正确项的类型。
SUB_ITEM_NAME: 子项,目前我写的还没用到
DEFAULT_LABEL_PROMPT: 如果表form_elements_langs中没有设置语言标签,则用这个。
DEFAULT_ACCESS_KEY : 快捷键
BASE_IND: 目前还没搞清是什么意思,表里设置的都是’Y’
上面这个表里,是设置form拥有元素,实现多语言,还需要在表form_elements_langs中插入数据。
这个表结构和form_elements差不多,只不过少了字段ITEM_TYPE,多了Lang字段,Lang字段就是语言的种类。目前取值有8(中文)和1(英文)。
这样,一个form可视项的多语言就设置成功了。
Retail这样设置多语言,感觉太麻烦,每一个项都这样设置一遍,一个form的工作量很大的。
Menu的多语言:
和form差不多,它的表示menu_elements和menu_elements_langs。
Form的初始化,写在Form的WHEN-NEW-FORM-INSTANCE触发器中。调用的主要过程有:
P_FORM_STARTUP->P_INITIALIZE、P_BOILERPLATE,这几个procedure都是fm_temp1中写好的,我们不用改变。我们需要添加的是自己的逻辑。
A. 初始化List Item
初始化List Item,要调用P_POPULATE_LIST(p_item_name varchar2,p_para varchar2),这个过程(该过程原型在stand45中),比如:P_POPULATE_LIST(‘B_apply.LI_cons_rev_freq’, ‘GCRF’)中,’B_apply.LI_cons_rev_freq’指List Item的名(一定要加上block的名),’GCRF’是表code_detail里的code_type字段。基本原理是该过程先定义一个cursor:
select code,code_desc from code_detail where code_type=’GCRF’,然后把code和code_desc赋给List Item,所以,List Item的动态值都来源于code_detail,做一个新的List Item之前,需要向这边表里插入数据。
显示错误提示,使用函数emessage(p_msg varchar2)如:
emessage(‘This_is_a_err_msg’);
raise form_trigger_failure;
错误提示也是分多语言的。所有的提示信息都放在rtk_errors表中,表里有一个三个重要字段
rtk_key: 比如这里的’This_is a err_msg’
rtk_lang: 语言
rtk_text: 提示信息;
比如在这个表里存在下面两条记录,则根据不同语言环境提示rtk_text的内容:
rtk_key rtk_lang rtk_text
This_is_a_err_msg 1 This is a err msg
This_is_a_err_msg 8 这个是错误信息
如果表里没有对于的提示信息,则直接显示emessage(‘This_is_a_err_msg’)中的参数,即’This_is_a_err_msg’
注:该过程原型:
PROCEDURE EMESSAGE (I_key varchar2,
I_txt_1 varchar2 := null,
I_txt_2 varchar2 := null,
I_txt_3 varchar2 := null) IS
l_ret_val BOOLEAN;
BEGIN
L_ret_val := RMESSAGE.SHOW (‘ALT_ERROR’, I_key, I_txt_1, I_txt_2, I_txt_3);
END;
Retek的Lov的展现一般不会像ebs中,ebs中,一般是鼠标落在某个text item的项上,弹出某个lov,retek是在这个项的后面有一个按钮,当点击这个按钮的时候,会弹出一个lov,选择lov中的东西,吧选择的东西赋值给该item。
创建一个Lov的过程:
Step1. 建立一个Lov,指定其返回给那些项。
Step2. 在该需要Lov的Text Item的后面加一个按钮项(按钮项的图标:日期按钮的图标名称 calendsm,一般Lov 按钮的图标名称 listval,备注按钮的图标名称 smaltalk)
Step3. 在按钮下写如下代码:
Go_Item(‘B_ordhead.supplier’);–先把光标移到Text Item上
Do_Key(‘List_Values’);–显示Lov
刚才忘写了,创建弹出日期的Lov过程:
step1. 打开我们自己写的form的同时,打开fm_date.fmb(这个文件是标准程式)。
step2. 将fm_date下Object Group下的OG_DATE,拖动到自己的Object Group下,回弹出提示,这时选择“复制”。
step3. 将calend45.pll添加进来。
step4. 添加显示日期的text Item的when-new-item-instance事件:
另外,有一种情况也需要注意:
当需要根据不同的情况,动态显示不同的LOV。比如一个Text Item项里,但参数Para1为’学生’时,调用’学生’Lov(LOV_STUDENT),当Para1为’教师’时候,显示’教师’LOV(LOV_TEACHER)。这种情况,需要在Text Item的KEY-LISTVAL触发器中添加如下代码:
if :Para1= ‘学生’ then
if F_SHOW_LOV(LOV_STUDENT’) then
Do_Key(‘Next_Item’);
end if;
elsif :Para1= ‘教师’ then
if F_SHOW_LOV(LOV_TEACHER’) then
Do_Key(‘Next_Item’);
end if;…………
end if;
F_SHOW_LOV函数定义在stand45中。
BEGIN
Validate(Item_Scope);
if not FORM_SUCCESS then
raise FORM_TRIGGER_FAILURE;
end if;
—
if (P_CALENDAR.LP_date_ok is not NULL) then
if (P_CALENDAR.LP_date_ok = ‘Y’) then
:B_MAIN.TI_SETTLEMENT_DATE := P_CALENDAR.LP_current_date;
P_CALENDAR.LP_date_ok := NULL;
Do_Key(‘Next_Item’);
else
P_CALENDAR.LP_date_ok := NULL;
end if;
end if;
EXCEPTION
when FORM_TRIGGER_FAILURE then
raise;
when OTHERS then
emessage(SQLERRM);
raise FORM_TRIGGER_FAILURE;
END;
step5. 添加显示日期的text Item的key-listval事件:
DECLARE
L_return_to VARCHAR(256) := ‘B_main.TI_settlement_date’;
L_min_date DATE := NULL;
L_max_date DATE := INTERNAL_VARIABLES.GP_vdate;
L_default_date DATE := INTERNAL_VARIABLES.GP_vdate;
BEGIN
Validate(Item_Scope);
if not FORM_SUCCESS then
raise FORM_TRIGGER_FAILURE;
end if;
—
P_CALENDAR.SHOW_CALENDAR(L_return_to => L_return_to,
L_default_date => L_default_date,
L_min_date => L_min_date,
L_max_date => L_max_date);
EXCEPTION
when FORM_TRIGGER_FAILURE then
raise;
when OTHERS then
emessage(SQLERRM);
raise FORM_TRIGGER_FAILURE;
END;
step4. 在触发按钮下写如下代码:
Go_Item (‘B_main.TI_settlement_date’);
Do_Key (‘List_Values’);
retail的菜单是通过菜单文件(.mmb)来实现的。其真正的事件是代码是在form中,菜单只调用form中的代码。下面以一个例子来说明:
这个例子演示的是增加 供应商维护–〉选项 菜单中,增加“联营保底”,其form文件是supvwedt.fmb,菜单文件是supplier.mmb.
step 1. 新建(修改)Menu
(我们以supplier.mmb来说明,这个文件已经存在,我们来修改它既可)
在菜单OPTIONS_MENU下新增一个项:
name : GML_CONS_MARGIN
lable : &Consignment Attributes–其实这里的不准,因为我们后面还会改变它的lable
Menu Item Type : Plain
step 2. 在该Menu下写事件
Execute_Trigger(‘T_cons_margin’);–T_cons_margin是在form中定义的
step 3. 在Form中写事件
在 supplier.mmb 中增加form级trigger
name : T_CONS_MARGIN
execution Hierarchy : Override
其他默认
事件代码:
declare
…………
begin
……….
Open_Form(‘gmlconsmrgn’, –你自己的事件就写到这里就行了。
ACTIVATE,
SESSION,
L_pl_id);
………..
exception ….
..
end;
step 4. 编译form和Menu
编译form的步骤以前写的有,编译Menu的脚本和form一样,只是将
frmcmp.sh userid=$UP module=supvwedt module_type=form /**** 编译form */
换成
frmcmp.sh userid=$UP module=supplier module_type=menu /**** 编译Menu */
编译好后,将生成的.fmx和.mmx放到bin目录下去
注意:如果没有编译菜单文件生成.mmx并放入bin目录下,则菜单虽然会挂上去,但点击所有的菜单都没有任何事件响应。
step 5. 支持多语言
首先,执行
select * from menu_elements where menu_filename=’supplier’ for update;
可以看,菜单选项就是放这个表里的。
字段含义:
menu_filename 菜单文件名
menu_name 菜单名
menu_item_name 菜单选项名–这里我们一般使用英文,随便取一个名字,假设我们取 GML_CONS_MARGIN
default_lable 默认提示标签–如果语言设置里没有找到对应语言的标签,就会用这个
base_ind 目前我也不知道是什么含义,把它设为’Y’
所以,在上面的表里增加一行menu_name 取OPTIONS_MENU(因为我们要挂在“选项”下),menu_item_name 取 GML_CONS_MARGIN,default_lable 取&GML_CONS_MARGIN
其次,在执行
select * from form_menu_link where menu_filename=’supplier’ for update
可以看到,这个表里存放的是menu和form的关系。因为这form和menu的关系已经存在,我们不去修改它。
再次,执行
select * from menu_elements_langs where menu_filename=’supplier’ for update
这个表就是存放多语言的关系了。它和menu_elements的字段含义差不多,只不过多了一个语言
我们增加一行,语言设置成中文(字段值为8)
最后运行下边的sql检查多语言是否设置成功
select me.menu_name,
me.menu_item_name,
nvl(mel.lang_label, me.default_label) label
from menu_elements_langs mel,
menu_elements me,
form_menu_link fml
where upper(fml.fm_name) = upper(‘fm_supvwedt’)—form名
and upper(fml.menu_filename) = upper(me.menu_filename)
and upper(me.menu_filename) = upper(mel.menu_filename(+))
and upper(me.menu_name) = upper(mel.menu_name(+))
and upper(me.menu_item_name) = upper(mel.menu_item_name(+))
and 8/*L_user_lang*/ = mel.lang(+)–语言
and mel.menu_item_name = ‘GML_CONS_MARGIN’–菜单选项
and mel.menu_name = ‘OPTIONS_MENU’;–菜单名
如果能查到一条数据,就说明多语言设置已经成功了。
注:未完成,有时间再继续…..
一个MSTR WEB开发测试示例
一:希望通过此文档能达到以下目的:
1.1 让大家初步了解MSTR的WEB功能。
1.2 用户能用MSRT的WEB功能自定义开发报表,浏览报表。让用户的操作进一步简化。
1.3 怎样用客户端,服务器的方式来实现以上功能!
二:准备工作过程:
为了实现客户端和服务器模式来进行WEB开发测试,我在我的电脑上安装了WINDOWS SP2版的虚拟机。把我的虚拟机作为服务器。在虚拟机上安装了MSTR的所有组件,在这一过程中需要注意以下问题:
2.1 连通主机和虚拟机。
2.1.1 在虚拟机安装完成以后可以安装虚拟机优化工具。在菜单栏àVMàinstall vmware tools. 这样可以让我们使用虚拟机更为方便。
2.1.2 把虚拟机的 NETWORK ADAPTER 设置为 NAT方式。
2.1.3 把虚拟机和主机端口进行映射,这样做的目的是,以后别人访问我主机的时候,是通过这IP映射访问你虚拟机上的SMTR WEB服务的。要达到此目的,首先要确认主机和虚拟机能相互PING通。最简单的方法就是让虚拟机IP段和主机上创建的网关IP段相同,查找虚拟机IP:
下边是虚拟网卡的设置:
值得注意的是2个连接都在126同一个IP段。
现在我们可以互PING主机和虚拟机的IP了 ,这时候如果PING不通,可以把主机和虚拟机的防火墙都关掉。
在确保主机和虚拟机能互PING通过以后,现在来做主机虚拟机IP映射。
点EIDT进入:
点PORT FORWARDING 进行端口映射:
当我们完成了虚拟机和主机的端口映射以后,我们访问主机IP的时候,就能访问虚拟机上的网页了。
2.1.4在虚拟机上安装IIS,版本要5或5版本以上的才能满足。这一过程相对简单,不再描述。
到此,我们已经完成了MSTR的安装,虚拟机的安装和设置,IIS的安装。我们的准备工作已基本就绪,接下来我们来做一个例子来看WEB功能是如何实现的。
在做数据转换时,往往比较重要的环节就是做数据的Mapping。如果能够把两个系统的数据用EXCEL到出来进行对比,那么将大大提高工作效率。
思路:通过oracle自带的exp和imp工具进行导出和导入,将遗留系统的数据导出生成dump文件,将dump文件导入自己的数据库,通过PL/SQL导出表生成CSV文件,前提,因为未知遗留系统的数据库信息未知,且手头只有已经导出来的dump文件。
——————————————————————————————————
ORACLE EXP 和 IMP文件的知识
1、Export/Import的用处
Oracle Export/Import工具用于在数据库之间传递数据。
Export从数据库中导出数据到dump文件中
Import从dump文件中到入数据导数据库中
下面是一般使用他们的情况
(1)、两个数据库之间传送数据
同一个版本的oracle Server之间
不同版本的oracle Server之间
同种OS之间
不同种OS之间
(2)、用于数据库的备份和恢复
(3)、从一个SCHEMA传送到另一个SCHEMA
(4)、从一个TABLESPACE传送到另一个TABLESPACE
2、DUMP文件
EXPORT到出的是二进制格式的文件,不可以手工编辑,否则会损坏数据。
该文件在ORACLE支持的任何平台上都是一样的格式,可以在各平台上通用。
DUMP文件在IMPORT时采用向上兼容方式,就是说ORALCE7的DUMP文件可以导入
到ORACLE8中,但是版本相差很大的版本之间可能有问题。
3、EXPORT/IMPORT过程
EXPORT导出的DUMP文件包含两种基本类型的数据
– DDL
– Data
DUMP文件包含所有重新创建Data Dictionary的DDL语句,基本上是可以读的格式
。
但是应该注意的是,千万不要用文本编辑器编辑之,oracle说不支持这样做的。
下面列出的是DUMP文件中包括的ORACLE对象,分为TABLE/USER/FULL方式,有些对
象
只是在FULL方式下才有(比如public synonyms, users, roles, rollback segm
ents等)
Table mode User Mode Full Database Mode
———————- ———————- ———————-
—
Table definitions Table definitions Table definitions
Table data Table data Table data
Owner’s table grants Owner’s grants Grants
Owner’s table indexes Owner’s indexes Indexes
Table constraints Table constraints Table constraints
Table triggers Table triggers All triggers
Clusters Clusters
Database links Database links
Job queues Job queues
Refresh groups Refresh groups
Sequences Sequences
Snapshots Snapshots
Snapshot logs Snapshot logs
Stored procedures Stored procedures
Private synonyms All synonyms
Views Views
Profiles
Replication catalog
Resource cost
Roles
Rollback segments
System audit options
System privileges
Tablespace definitions
Tablespace quotas
User definitions
4、IMPORT时的对象倒入顺序
在倒入数据时,ORACLE有一个特定的顺序,可能随数据库版本不同而有所变化,
但是
现在是这样的。
1. Tablespaces 14. Snapshot Logs
2. Profiles 15. Job Queues
3. Users 16. Refresh Groups
4. Roles 17. Cluster Definitions
5. System Privilege Grants 18. Tables (also grants,commen
ts,
6. Role Grants indexes, constraints, audi
ting)
7. Default Roles 19. Referential Integrity
8. Tablespace Quotas 20. POSTTABLES actions
9. Resource Costs 21. Synonyms
10. Rollback Segments 22. Views
11. Database Links 23. Stored Procedures
12. Sequences 24. Triggers, Defaults and Aud
iting
13. Snapshots
按这个顺序主要是解决对象之间依赖关系可能产生的问题。TRIGGER最后导入,所
以在INSERT
数据到数据库时不会激发TRIGGER。在导入后可能会有一些状态是INVALID的PROC
EDURE,主要
是IMPORT时会影响一些数据库对象,而IMPORT并不重新编译PROCEDURE,从而造成
这种情况,
可以重新编译之,就能解决这个问题。
5、兼容性问题
IMPORT工具可以处理EXPORT 5.1.22之后的版本导出的DUMP文件,所以你用ORACL
E7的IMPORT
处理ORACLE6的DUMP文件,依次类推,但是ORACLE如果版本相差很大有可能不能处
理。具体的
问题可以参照相应的文档,比如有关参数设置等(COMPATIBLE参数)
6、EXPORT需要的VIEW
EXPORT需要的VIEW是由CATEXP.SQL创建,这些内部VIEW用于EXPORT组织DUMP文件
中数据格式。
大部分VIEW用于收集创建DDL语句的,其他的主要供ORACLE开发人员用。
这些VIEW在不同ORACLE版本之间有可能不同,每个版本可能都有新的特性加入。
所以在新的
版本里面执行旧的dump文件会有错误,一般可以执行CATEXP.SQL解决这些问题,
解决向后兼容
问题的一般步骤如下:
导出数据库的版本比目标数据库老的情况:
– 在需要导入的目标数据库中执行旧的CATEXP.SQL
– 使用旧的EXPORT导出DUMP文件
– 使用旧的IMPORT导入到数据库中
– 在数据库中执行新的CATEXP.SQL,以恢复该版本的EXPORT VIEW
导出数据库的版本比目标数据库新的情况:
– 在需要导入的目标数据库中执行新的CATEXP.SQL
– 使用新的EXPORT导出DUMP文件
– 使用新的IMPORT导入到数据库中
– 在数据库中执行旧的CATEXP.SQL,以恢复该版本的EXPORT VIEW
7、碎片整理
EXPORT/IMPORT一个很重要的应用方面就是整理碎片。因为如果时初次IMPPORT,
就会重新CREATE TABLE 再导入数据,所以整张表都是连续存放的。另外缺省情况
下EXPORT会在生成DUMP文件是“压缩(COMPRESS)”TABLE,但是这种压缩在很多情
况下被误解。事实上,COMPRESS是改变STORAGE参数INITIAL的值。比如:
CREATE TABLE …. STORAGE( INITIAL 10K NEXT 10K..)
现在数据已经扩展到100个EXTENT,如果采用COMPRESS=Y来EXPORT数据,
则产生的语句时 STORAGE( INITIAL 1000K NEXT 10K)
我们可以看到NEXT值并没有改变,而INITIAL是所有EXTENT的总和。所以会出现
如下情况,表A有4个100M的EXTENT,执行DELETE FROM A,然后再用COMPRESS=Y 导
出数据,产生的CREATE TABLE语句将有400M的INITIAL EXTENT。即使这是TABLE中
已经没有数据!!这是的DUMP文件即使很小,但是在IMPORT时就会产生一个巨大
的
TABLE.
另外,也可能会超过DATAFILE的大小。比如,有4个50M的数据文件,其中表A有
15个10M的EXTENT,如果采用COMPRESS=Y的方式导出数据,将会有INITIAL=150M,
那么在重新导入时,不能分配一个150M的EXTENT,因为单个EXTENT不能跨多个文
件。
8、在USER和TABLESPACE之间传送数据
一般情况下EXPORT的数据要恢复到它原来的地方去。如果SCOTT用户的表以TABLE
或USER方式EXPORT数据,在IMPORT时,如果SCOTT用户不存在,则会报错!
以FULL方式导出的数据带有CREATE USER的信息,所以会自己创建USER来存放数据
。
当然可以在IMPORT时使用FROMUSER和TOUSER参数来确定要导入的USER,但是要保
证
TOUSER一定已经存在啦。
9、EXPORT/IMPORT对SQUENCE的影响
在两种情况下,EXPORT/IMPORT会对SEQUENCE。
(1)如果在EXPORT时,用户正在取SEQUENCE的值,可能造成SEQUENCE的不一致。
(2)另外如果SEQUENCE使用CACHE,在EXPORT时,那些在CACHE中的值就会被忽略
的,
只是从数据字典里面取当前值EXPORT。
如果在进行FULL方式的EXPORT/IMPORT时,恰好在用sequence更新表中某列数据,
而且不是上面两种情况,则导出的是更新前的数据。
如果采用常规路径方式,每一行数据都是用INSERT语句,一致性检查和INSERT T
RIGGER
如果采用DIRECT方式,某些约束和trigger可能不触发,如果在trigger中使用
sequence.nextval,将会对sequence有影响。
————————————————————————————————————————–
开始导入
1。创建用户DBUSRPUB
SQL> CREATE USER DBUSRPUB IDENTIFIED BY HANDHAND;
2。创建表空间
SQL> CREATE TABLESPACE DATA_SPC
2 DATAFILE ‘E:\DATA_SPC.DBF’ 1024M
3 AUTOEXTEND ON
4 NEXT 500M
5 MAXSIZE 2048M
6 EXTEND MANAGEMENT LOCAL;
SQL> CREATE TABLESPACE IDX_SPC
2 DATAFILE ‘E:\DATA_SPC.DBF’ 1024M
3 AUTOEXTEND ON
4 NEXT 500M
5 MAXSIZE 2048M
6 EXTEND MANAGEMENT LOCAL;
3。给DBUSRPUB赋予SYSDBA权限以及相关权限
SQL> CONNECT SYS/HANDHAND@ORCL AS SYSDBA
SQL> GRANT SYSDBA, TO DBUSRPUB;
4。分析字符集
遗留系统字符集使用的是WE8ISO8859P1,自己的数据库用的是ZHS16GBK。如果盲目进行数据导入,将会有一部分数据无法导入。原因就在两个字符集,可以通过以下的两个实例看到他们分别占用的字节数。
SQL> select dump(‘你好’,16) from dual;
DUMP(‘你好’,16)
————————-
Typ=96 Len=4: c4,e3,ba,c3
SQL> select dump(convert(‘你好’,’ZHS16GBK’,’WE8ISO8859P1′),16) from dual;
DUMP(CONVERT(‘你好’,’UTF8′,’WE8ISO88
————————————
Typ=1 Len=7:a3,bf,a3,bf,6f,a3,bf
在ZHS16GBK中,你好字符占用了4个字节,而在WE8ISO8859P1中却占用了7个字节。这样看来,如果盲目进行导入。因为从上面的准备知识中也可以知道DUMP文件导入是会先建立表结构,这样以来,由于字符集不同,就会造成字段长度不够的错误信息。导入终止。
5。修改本地数据库字符集
首先查看当前数据库的字符集
SQL>SELECT VALUE, PARAMETER
2 FROM NLS_DATABASE_PARAMETERS
3 WHERE PARAMETER IN (‘NLS_LANGUAGE’, ‘NLS_TERRITORY’, ‘NLS_CHARACTERSET’);
VALUE PARAMETER
——————- ——————-
1 AMERICAN NLS_LANGUAGE
2 AMERICA NLS_TERRITORY
3 ZHS16GBK NLS_CHARACTERSET
需要把字段NLS_CHARACTERSET更新为WE8ISO8859P1.
—————————————-方法一———————————————-
1).以SYS用户登录:CONNECT SYS/HANDHAND@ORCL AS SYSDBA;
2).SQL>ALTER SESSION SET SQL_TRACE=TRUE;
SQL>ALTER SYSTEM ENABLE RESTRICTED SESSION;
SQL>ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;
SQL>ALTER SYSTEM SET AQ_TM_PROCESSES=0;
SQL>ALTER DATABASE CHARACTER SET INTERNAL_USE WE8ISO8859P1
3).重启数据库
—————————————-方法二———————————————–
1).以SYS用户登录:CONNECT SYS/HANDHAND@ORCL AS SYSDBA;
2).SQL>UPDATE PROPS$ SET VALUE$=’WE8ISO8859P1′ WHERE NAME=’NLS_CHARACTERSET’;
3).重启数据库
6。开始导入DUMP
1).进入命令行模式
输入D:\oracledev10g\bin\imp.exe file=I:\GOODSBASE.DMP FULL=Y
用户名:DBUSRPUB/HANDHAND@ORCL AS SYSDBA也可以使用
D:\oracledev10g\bin\imp.exe DBUSRPUB/HANDHAND@ORCL file=I:\GOODSBASE.DMP FULL=Y
7。客户端字符集更改
虽然导入数据不报错,但是如果客户端,如PL/SQL字符集没有设置好,同样不能看到正常的字符串。
运行-REGEDIT-HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_DevSuiteHome1-NLS_LANG
修改文件为WE8ISO8859P1
8。将导入到本地数据库的GOODSBASE导出为CSV格式文件。
RMS中不同Item类型商品编号验证规则
Code与界面显示的数据对应关系存储在 控制 -> 系统 -> 代码维护 -> UPCT
当货品类型为可变重PLU时
格式 存储在表var_upc_ean中 (select * from var_upc_ean)
根据 格式 得到 L_begin_item_digit, L_begin_var_digit, L_check_digit (select format_id, begin_item_digit, begin_var_digit, check_digit from var_upc_ean where format_id = 选择的格式)
L_begin_item_digit – 1 等于 前缀 的位数
验证前缀的第1位值为2
如果 L_check_digit 值为 0 则
L_item_length = L_begin_var_digit – L_begin_item_digit;
否则
L_item_length = L_check_digit – L_begin_item_digit;
验证输入编号的长度 = L_item_length
进行 PLU 验证
其它种类货品
Code function rule
——- ——————————————— ———————————————————————-
UPC-A CHECK_UPCA_FMT(O_error_message, I_item_no) 12位,每个都是 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_UCC 验证
UPC-AS CHECK_UPCAS_FMT(O_error_message, I_item_no) 15 ~ 18位,且第13位为’-‘;其余为 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_UCC 验证
UPC-E CHECK_UPCE_FMT(O_error_message, I_item_no) 8位,均为 0 ~ 9 的数字,进行UPC_E_EXPAND变换,再对其结果进行 CHKDIG_VERIFY_UCC 验证
UPC-ES CHECK_UPCES_FMT(O_error_message, I_item_no) 11 ~ 14位,且第9位为’-‘;其余为 0 ~ 9 的数字,对前8位进行UPC_E_EXPAND变换,再对其结果进行 CHKDIG_VERIFY_UCC 验证
UCC14 CHECK_UCC14_FMT(O_error_message, I_item_no) 14位,每个都是 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_UCC 验证
ITEM CHECK_ITEM_FMT(O_error_message, I_item_no) 9位,每个都是 0 ~ 9 的数字,再进行 CHKDIG_VERIFY 验证
EAN8 CHECK_EAN8_FMT(O_error_message, I_item_no) 8位,每个都是 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_UCC 验证
EAN13 CHECK_EAN13_FMT(O_error_message, I_item_no) 13位,每个都是 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_UCC 验证
EAN13S CHECK_EAN13S_FMT(O_error_message, I_item_no) 16 ~ 19 位,且第14位为’-‘;15 ~ 19 位为 0 ~ 9 的数字,前13位满足EAN13
ISBN10 CHECK_ISBN10_FMT(O_error_message, I_item_no) 10位,且前9位为 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_ISBN 验证
ISBN13 CHECK_ISBN13_FMT(O_error_message, I_item_no) 13位,且前12位为 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_ISBN 验证
NDC CHECK_NDC_FMT(O_error_message, I_item_no) 12位,每个都是 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_UCC 验证
PLU CHECK_PLU_FMT(O_error_message, I_item_no) 4 ~ 5位, 每个都是 0 ~ 9 的数字
SSCC CHECK_SSCC_FMT(O_error_message, I_item_no) 18位,每个都是 0 ~ 9 的数字,再进行 CHKDIG_VERIFY_UCC 验证
UPC_E_EXPAND变换
注释:[x] = 第x位
若[7]为0 ~ 2的数字,则temp=0[2][3][7]0000[4][5][6][8];
若[7]为3,则temp=0[2][3][4]00000[5][6][8];
若[7]为4,则temp=0[2][3][4][5]00000[6][8];
否则temp=0[2][3][4][5][6]0000[7][8];
CHKDIG_VERIFY_UCC 验证
被验证数长度为8、12、13、14、18
L_temp_number = 被验证数 / 10 的整数部分
L_char_value = L_temp_number在左边填充0至17位
L_odd_digits = 取所有 L_char_value 奇数位的值相加,结果乘以3
L_even_digits = 取所有 L_char_value 偶数位的值相加
L_last_digit = (L_odd_digits + L_even_digits) MOD 10
将 L_last_digit 的值按照下表进行转换
1, 9,
2, 8,
3, 7,
4, 6,
5, 5,
6, 4,
7, 3,
8, 2,
9, 1,
否则, 0
如果转换结果 = 被验证值的个位,则通过验证,否则不通过
CHKDIG_VERIFY_ISBN 验证
注释:[x] = 第x位
如果长度为10
取前9位放入char_value
L_sum = [1] * 10 + [2] * 9 + [3] * 8 + [4] * 7 + [5] * 6 + [6] * 5 + [7] * 4 + [8] * 3 + [9] * 2
L_sum MOD 11
结果按照如下对应关系进行翻译:
0, ‘0’,
1, ‘X’,
2, ‘9’,
3, ‘8’,
4, ‘7’,
5, ‘6’,
6, ‘5’,
7, ‘4’,
8, ‘3’,
9, ‘2’,
10, ‘1’,
否则 ‘E’
将结果与ISBN的最后一位进行对比,若相同则通过验证
如果长度为13
取前12位放入char_value
L_sum = [1] + [2] * 3 + [3] + [4] * 3 + [5] + [6] * 3 + [7] + [8] * 3 + [9] + [10] * 3 + [11] + [12] * 3
L_sum MOD 10
结果按照如下对应关系进行翻译:
1, 9,
2, 8,
3, 7,
4, 6,
5, 5,
6, 4,
7, 3,
8, 2,
9, 1,
否则 0
将结果与ISBN的最后一位进行对比,若相同则通过验证
CHKDIG_VERIFY 验证
1. 检查 system_options 中 check_digit_ind 的值为 Y (select check_digit_ind from system_options)
2. 被验证数倒数第2位 * system_options.cd_weight_1 +
被验证数倒数第3位 * system_options.cd_weight_2 +
被验证数倒数第4位 * system_options.cd_weight_3 +
被验证数倒数第5位 * system_options.cd_weight_4 +
被验证数倒数第6位 * system_options.cd_weight_5 +
被验证数倒数第7位 * system_options.cd_weight_6 +
被验证数倒数第8位 * system_options.cd_weight_7 +
被验证数倒数第9位 * system_options.cd_weight_8;
3. 结果 MOD system_options.cd_modulus;
4. 用system_options.cd_modulus减去结果再取其个位
5. 如果结果等于被验证数个位,则通过验证,否则不通过验证
财务集成解决方案是通过中间件以发布-订阅模型来实现数据的传递。财务相关数据从Oracle E-Business Suite财务模块中发布出来,然后Oracle Retail通过它自己的中间件架构-Oracle Retail Integration Solution(RIS)来订阅这些消息。在外向事务流中,RIS生成财务中间表,然后利用它们通过标准财务接口功能向Oracle GL和AP模块导入数据。
财务集成解决方案是通过中间件以发布-订阅模型来实现数据的传递。财务相关数据从Oracle E-Business Suite财务模块中发布出来,然后Oracle Retail通过它自己的中间件架构-Oracle Retail Integration Solution(RIS)来订阅这些消息。在外向事务流中,RIS生成财务中间表,然后利用它们通过标准财务接口功能向Oracle GL和AP模块导入数据。
对于不同的企业模块,目前的应用还无法使Oracle Retil从一个单一的SOB(set of books )中区分出财务数据,集成的第一步,是定义一个新的SOB标识CHART_OF_ACCOUNTS_ID,这使得Oracle Retail能够识别集成SOB以从Oracle中抽取和发布财务相关的数据。Oracle Retail GL Setup表(FIF_GL_SETUP)根据它来实现集成。
与所建议的一样,集成的解决方案是通过中间件来实现的。EBS系统用BPEL提供web服务,Oracle Retail系统使用RIB来提供web服务。
Oracle BPEL Process Manager是运行在Oracle应用服务器上的基于JAVA的解决方案。Oracle BPEL PM使用数据库适配器(DB Adapter)与EBS中的数据源连接。
RIB同样也是基于JAVA的解决方案,它运行在SeeBeyond eGate上。RIB是一个异步的消息通道,它可以订阅BPEL创建和发布的消息,然后把消息的payload数据元素插入到RMS数据库中。Oracle Retail的应用程序通过Java Message Service(JMS)适配器与RIB连接。
集成的模型执行图
模型的三个主要组成部分:
外向数据流:BPEL和RIB中间件用于在两个系统之间建立连接和传输数据。从EBS财务模块导出的数据通过网络交换平台(NET change basis)传给RIB。然后在Oracle Retail中进行处理并更新相关的数据库表。
内向数据流:经过总结处理后的财务信息又从Oracle Retail传到财务中间表中。然后这些数据经过BPEL处理、提取数据并通过财务公开接口导入到GL和AP中。
在BPEL中支持下面EBS财务模块的外向相关数据流
外向事务处理流
1. Oracle E-Business财务模块GL总帐code combinations(会计科目)、供应商、汇率、运费组和支付组的数据被传到网络交换平台上。所有的记录添加或修改都将在预先设置好的平台上进行。
2. BPEL提取这些记录并执行数据转换,生成与RIB兼容的XML记录格式。
3. XML消息被发布到RIB,然后RIB订阅适配器尝试根据消息的topic和action(更新,修改,删除)来更新相关的业务数据对象。如果成功了,则从JMS中删除这条消息。否则,消息将会被写到RIB Error Hospital中,以便手动查看或自动重发布到适配器。
下面Oracle E-Business财务模块的内向事务数据流在整个BPEL中得到全面支持。![]()
内向事务处理流
1. 当前Oracle Retail业务处理提取相关数据到标准的财务集成中间表中。这些表是:
2. BPEL流直接读取财务中间表,抽取详细信息和执行数据转换处理并传送到标准GL或AP开放接口。
3. 一旦传送到标准开放接口,正常导入和错误管理过程将在Oracle EBS财务中进行。
性能是系统集成所要考虑的主要问题。Retail吞吐量大,符合解决方案需要支持高吞吐量的要求。在从Oracle E-Business Suite财务模块向外导出相关数据时,吞吐量不是值得担心的问题。
然而,在进行内向事务处理时,性能将面临严峻的考验。Oracle Retail 应用程序通过正常的业务流程填写标准财务中间表,这些流程是已经经过优化处理的。
在BPEL上进行的压力测试产生了下列性能基准:
导入销售审计事务的BPEL流程性能测试得到以下的结果:BPEL PM每小时可以导入350万条记录。测试是基于Linux4CUP,5GB内存的服务器上的10.1.2 Patch 2 version of BPEL PM。
这些数据通过BPEL Process Manager提取并以XML消息的形式发布到RIB上的JMS Topic中,然后RIB使用API从JMS Topic中提取数据并将数据插入到RMS系统中。BPEL PM有与系统错误场景相应的错误处理程序,同时RIB的API已经有内建的错误处理程序,它会将错误信息写入到RIB的Error Hosptial中。
BPEL PM有与系统错误场景相对应的错误处理逻辑,与此同时,RIB APIs也有自己内置的错误处理逻辑,这些错误将被写到RIB Hospital中。
Oracle Retail把与Oracle Retail销售审计系统(ReSA)和库存帐系统中与GL事务处理有关的数据传送到STG_FIF_GL_DATE中间表。Oracle把这些GL数据从Oracle Retail的中间表中取出,执行适当的转换然后导入Oracle E-Business Suite中的GL_INTERFACE表里。这个过程是由BPEL PM使用DB适配器(DB Adapters)来管理的。
对于Oracle Retail如何参与这个处理过程的信息,可以参考最新的Oracle Retail Invoice Matching (ReIM) Operations Guide和Operations Guide Addendum。
BPEL PM有与系统错误场景相对应的错误处理逻辑。如果有错误发生,系统将向指定的具有系统管理员角色的人发送一个通知。通知中包含了遇到错误的BPEL流程的相关信息,系统管理员在BPEL管理平台上检查错误并重新处理数据。
完整的发票匹配过程是在ReIM中通过将支付建议(payable recommendations)导入Oracle AP中来完成的。ReIM匹配商品收据和商品发票,执行自动和手工的匹配和差异解决过程。匹配过的发票被发往中间表接口,总量,付款日期,供应商,Oracle站点ID,GL COA(帐户结果)信息和支付组。其它应付文件,包括借方记录,贷方记录和贷项清单也通过ReIM中间表(IM_AP_STAGE_HEAD和IM_AP_STAGE_DETAIL)连接到Oracle应付模块。关于Oracle Retail如何参与这个过程的信息,可以参考最新的Oracle Retail Invoice Matching (ReIM) Operations Guide 和Operations Guide Addendum
某些ReIM的事务没有被发送到Oracle应付帐户里,而是通过IM_FINANCIAL_STAGE表发送到Oracle EBS的总帐中。Oracle Retail财务中间表IM_FINANCIALS_STAGE保存着从ReIM传送过来的GL事务,它是BPEL导入到Oracle的主要中转点。为了支持数据转换和导入Oracle应付帐户标准接口,应付事务被写到一组新的Oracle Retail头信息/明细信息中间表(IM_AP_STAGE_HEAD和IM_AP_STAGE_DETAIL),以便Oracle BPEL进行处理。
业务流程
从Oracle Retail 发票匹配流程传过来的GL事务被存放在财务中间表IM_FINCIALS_STAGE中。事务被处理后存放到GL+INTERFACE表中,这个表是用于实现通过日记帐将日记帐分录导入到Oracle EBS系统总帐的。
被取消的未匹配的商品收据和预付匹配发票被写到中间表,这些事务会影响总帐,但不需要为他们创建支付或连接其它支付。
Oracle Retail应用程序中的财务中间表不会被自动清除,可以认为Oracle财务模块对这些表有“管家”的责任。数据库适配器(datebase adapter)采用 ‘物理删除’优化选择的策略,智能地为那些记录选择数据库表并在处理完后删除。
订阅适配器的职责是对于给定的业务实体,保证其消息以正确的顺序被执行。比如,对一个给定的采购订单,“创建采购订单”消息应该在更新或删除消息之前执行。另外,所有的更新必须以正确的顺序进行,以保证两个系统数据的同步。但不同的业务实体之间的消息没有这样的约束。如果没有错误发生,消息会以先进先出(FIFO)的顺序执行。如果一个业务实体的消息在处理过程中出错了,其它业务实体的消息处理不会受到影响,而且出错的业务实体的所有其它消息将会被保存在Error Hospital中。
如果一个消息在处理过程中出错,则将执行以下两步:
1. 订阅适配器在内部记录出错事件并回滚所有与该消息有关的数据库操作。
2. JMS服务器重新向适配器发送消息,由于它还没有被成功执行过,适配器认出这个消息是有问题的(病的),并将它迁入到Error Hospital数据库中。
订阅适配器会经常检查RIB的hosptial数据库,看在hospital中是否有跟当前消息作用相同实体的消息。如果有,适配器就立即把当前消息也放到hosptial中。这是为了保证对于一个给定的业务实体,它的所有消息都以正确的顺序执行。由于没有人工干预,在没有后序的消息作用于该业务实体之前,RIB将一直为业务实体执行“病的”消息。
一个消息被迁入Error Hosptial后,一个hosprital重发适配器/e*Way/Daemon将重发消息到JMS以重新尝试执行。前提是错误是短时间的-记录被锁定或有外部信赖未得到满足。消息重试的次数是可以设定的。
基于PL/SQL接口的订阅流程
下面的数据库表是用于存储Error Hosptial中的消息的:
另外,序列RIB_MESSAGE_SEQ用于保持与Error Hospital中的每条信息相关联的唯一的“Hospital ID”。
BPEL提供了高度的错误处理能力。通过安装通知服务,你可以配置系统管理员邮件地址,BPEL流程出错时会向这个邮件地址发送通知。每个BPEL流程都有唯一的流程实例,它被传给系统管理员以便进行纠错工作。从BPEL管理平台的“流”标签,管理员可以选择为流程实例执行手动恢复。“实例”标签显示了整个流程的列表。
AppWorx管理的主要职责:
1) 确保AppWorx 基本、代理、RMI服务器和WEB服务器启动和运行
2) 提供帐号给开发人员、分析人员、操作人员、网络管理员和数据库管理员
3) 设置基本选项
4) 定义主机和数据库登录
5) 定义输出设备
6) 管理AppWorx保留记录和报告输出
7) 在开发,测试和生产环境之间迁移AppWorx对象
注:要查看Connections窗口必须具有DBA角色
路径 View à View Connections
1) 查看用户登录报表
2) 广播一个消息,当前用户和以后登录的用户都可以接收到。
广播消息将持续有效,直到清除它,或停止并重新启动RMI的服务器。当你想清除的广播讯息, 简单地删除文本框内容,并点击 Broadcast按钮。
3) 查看连接AppWorx实例的RMI和代理列表,通过Agent字段可以识别类型:
² 如果为空,则为master
² RMI服务器显示为“RmiServer”
² 其他的都是代理的名字
路径 View à View Connections à RMI Servers
1) RMI服务器信息
Master显示在表的顶端,会话ID是193662,它对应的RMI服务器具有同样的会话ID。Master的本地代理是PROD1。最后一个字段“Master”只对RMI服务器有效,如果显示为“OK”,显示RMI服务器支持Master。有下列两种情况,需要使用多个RMI服务器支持一个Master:
² 容灾 ,如果主RMI服务器不可用,AppWorx将自动切换到第二台RMI服务器
² 客户负载,如果有大量的客户连接到AppWorx,可能希望有第二台RMI服务器处理用户事务。
双击表中的条目,可以切换RMI服务器是否支持Master。
2) 代理信息
所列代理信息仅供参考。每行提供了一个代理的IP地址,端口号,会话ID,以及最后活动的日期戳。如果存在网络通信的问题,这些信息可能是有用的。那个 Master字段不适用于代理。
RMI的服务器是一个向AppWorx Java Java客户端输出信息的进程。一个单一的RMI的服务器可以服务于一个Master,多个RMI的服务器也可以服务于一个Master,或RMI的服务器可以在两个或两个以上的Master共享。你可以通过 Masters.properties给RMI服务器增加Masters。此文件位于已安装RMI的服务器的data 目录。而通过RmiServer的 Config窗口,您可以给RMI的服务器分配master而无需停止RMI的服务器。
路径:View à RmiServer Config à new
| 字段 | 描述 |
| Name | Master 名称 |
| IP Address | IP地址 |
| AWCOMM Port | AWCOMM端口,缺省为2136 |
此数据将写在Masters.properties文件中。
路径:View à Translator Editor
可以使用翻译编辑器窗口把字段名称,工具提示和助记符翻译成另一种语言。如果想使用翻译语言,必须设置Options.properties 文件中UserLanguageFiles=true
1) General 允许编辑字段,这个页面包含两个搜索字段,可以搜索待翻译的键,也可以搜索它的值。
2) ToolTip允许编辑AppWorx按钮、图标、显示框的值。
3) Mnemonics可以改变助记的键值,它使用 Ctrl键的键盘导航。使用助记法时,不同的语言经常变化,不要使用通用的字符。不要在同一屏幕上使用重复的助记法 ,否则他们将不是所有的正常工作。
路径:View à Translator Editor à Locale 字段
翻译值存储在属性文件中。可以通过Locale字段选择属性文件
缺省的语言文件是Labels.properties,它的位置是:
$AW_HOME/web/classes/com/appworx/client/screen/util/
不能直接编辑Labels.properties文件,如果想增加一个语言文件,请复制Labels.properties并改一个唯一的名字。然后通过Locale字段选择。
要找到正确的扩展名的语言,请按一下Show All按钮。例如,德国的文件名称为Labels_de.properties 。一个国家的具体 版本的语言,创建一个有适当名称的空文件。例如,对于使用法语的加拿大,你将创建一个文件名为Lables_fr_CA.properties。然后只添加条目不同的Label_fr.properties文件。
路径:View à View Assigned Objects
此窗口将显示对象的名字,它的描述,对象的类型,对角所分配的角色及其他信息。
这些信息主要目的是作为一个故障排除工具。注意:窗口底部的复制按钮。可以用它来复制信息到剪贴板并粘贴。
路径:View à Refresh Assigned Objects
如果觉得分配对象的数据过时,可以通过此功能刷新分配对象。
如想了解AppWorx,重要的是知道AppWorx文件的结构和AppWorx 用于存放诊断文件的位置。以下是AppWorx常用目录位置。注它们位于AW_HOME目录中。
| 目录 | 内容 |
| bin | AppWorx shell脚本,用于调用AppWorx进程。 |
| c | 编译,可执行的代码,用于每个AppWorx进程 |
| cddir | 安装文件 |
| data | 数据文件,保存AppWorx使用的信息 |
| debug | 标记文件,如果打开DEBUG |
| exec | 预定义和客户化的AppWorx shell脚本 |
| export | AppWorx Export工具产生的文件 |
| import | AppWorx Export工具产生的文件,准备导入AppWorx |
| install | 安装文件 |
| log | 日记文件,AppWorx操作过程中产生的.log .err和.debug文件 |
| map | 文件匹配目标系统中的对象和导入的对象地图文件有一个。扩展名为.dat |
| out | 运行AppWorx作业产生的输出文件。包括 标准的日志文件和作业产生的输出文件。 |
| pipe | 管理文件,用于AppWorx后台进程 |
| run | 作业运行时AppWorx产生的pr和pm文件 |
| rte | Java运行环境文件 |
| site | 用于AppWorx后台管理和客户环境变量 |
| sql | 各种SQL脚本,用于排错,安装,报表,测试和培训等 |
| status | 显示后台程序状态的文件 |
| tmp | 临时文件 |
| web | Web访问和配置文件 |
也有一些重要文件在UNIX系统的AppWorx主目录。他们
说明见下表。
| 目录 | 内容 |
| .netrc | 通用UNIX配置文件,使用于FTP远程登录。这个配置文件可用于运行FTP模块。然而,使用.netrc文件能存在安全问题。您可以为每个FTP主机使用AppWorx登录取代. netrc文件。 AppWorx登录包含加密的用户名和密码 信息。 |
| .profile | UNIX 脚本,设置用户环境、目录路径和其他设置 |
| AWFILES.Z | AppWorx安装软件的压缩文件 |
| release notes | 显示当前Appworx版本新的内容和更新 |
一个代理是AppWorx的一个实例 。代理安装在每台作业执行的机器上。代理可以是Master的的本地代理,或远程代理。Master调度和控制作业的执行在所有分配给它的代理。代理组在处于两个或两个以上的机器的代理之间的分配负载。
使用AppWorx Masters和代理,您可以从任何 AppWorx客户端控制多台机器的作业 。AppWorx的Master驻留在一个服务器和通过本地的代理启动本地的作业。远程代理驻留在其他服务器,但从Master接受命令。对于Master/代理关系工作方式, AppWorx代理软件必须
安装在所有需要控制的机器。而AppWorx数据库必须驻留在一台机器中。
当Master认为作业应执行的,就把它提交给一个AppWorx队列中。代理轮询队列。当代理人发现一个作业应该运行后,它从队列中取出信息,并运行作业。当作业完成后,它发送状态息返回给Master。
一个master控制和监控作业在代理中的执行。这使得可以集中控制多台计算机。您可以有任意组合的Master和代理。例如,一个代理向Master报告,它可以包含其他Master。
在确定分配给master的master数量和代理数量,必须考虑机器和网络的可靠性。如果aster机器发生故障, Master的代理中的作业就不会启动。如果Master与一台代理失去网络通信,代理中的作业就不会启动。 然而,如果Master重新运行,或网络通讯得到恢复, AppWorx将在中断点恢复操作。
AppWorx Masters,代理和客户端采用SSL加密传输。
代理组在一台或多台机器的代理之间分配负荷。建立代理组和分配本地和远程代理。您可以当你定义一个模块时,可以指定代理或代理组。 当您给模块指定代理或代理组,是 告诉AppWorx程序的位置和运行的位置。 AppWorx将在代理组中第一个可用的代理中运行该程序。
一般安装之后,AppWorx创建一个Master和它的本地代理。可以通过在AppWorx中增加代理对象用来增加远程代理,然后运行安装脚本。一个AppWorx远程代理通常用于在不包含Master的机器上运行作业。
在同一个实例中定义多个代理,只需要创建另外的代理对象,使用同样的IP地址和用户名。你只需要在第一次运行代理安装。
路径:Agents à New
| 字段 | 描述 |
| Name | 名称最多可以有30个字符。如果在一台机器上安装两个或两个以上的远程代理,不要给他们相同的名称(即使他们服务于不同的Master实例) 。下面是保留字,不能用于Master或代理的名字;All,AWCOMM , AGENTSERVICE , AWAPI ,RMI, RMISERVER ,AGENT, 和MASTER。 |
| Description | 描述,限制30字符 |
| IP address | IP地址,格式为:nnn.nnn.nnn.nnn,可以使用别名,但必须在Master和代理中都使用别名。 |
| Sleep time | 定义多少秒(10..1000)AppWorx将在处理循环之间等待。它也控制多少时间条件被计算。 |
| CPU Limit | 定义CPU使用率百分比,在AppWorx将产生不新的作业。当代理达到其CPU的限制,将进入一个CPU WAIT的代理状态。代理中的等待运行的作业也进行CPU WAIT的作业状态。新建的代理默认为80 % ,而升级版本AppWorx代理默认为99 %。你可以看到实际 CPU使用率百分比代理人(ExploreràAgent SummaryàCpu字段)。每个代理及Maste 的CPU使用率大约每分钟更新一次。 |
| Type | 显示定义的代理的类型(如ORACLE,SAP等) |
| Thread schedule | 设置并行作业最大数量,它们可以在同一时间运行在所有队列的代理上。编辑Master/本地代理的线程时间表在这一字段 将改变本地代理的设置。 注:可以通过Explorer窗口修改Masters和代理的线程时间表。 |
| Environment Variables | 指定一个或多个环境变量作为一个单一的AppWorx对象 |
| OS type | 显示操作系统是否使用UNIX,Windows,VMS或OS/400 |
| Output directory | 指定代理上运行的模块输出文件目录。当你选择一个操作系统类型时会自动填充一个缺省值。这个 字段最多32个字符。如果在这里输入一个新的目录,必须确认它的存在,并AppWorx对它有读/写权限 。可以使用AppWorx变量。 这个值可以变模块和用户指定的目录覆盖。注意:如果一个输出目录是指定的模块和 用户,用户的输出目录将取代模块设置。 |
| User name | 被选定的用户决定Awexe range分配给代理。 确保您的代理被分配到用户有充分Awexe range,,这是1000-9999 。用户分配到一个远程代理需要一个Awexe range的代理用于开始。 |
| Active | 如果不选中,代理的状态将是INACTIVE.,待定事务中所有的作业和刚提交的作业将进入History,并处于INACTIVE状态。 |
| Agent debug | 如果选中,AppWorx在代理的debug目录创建一个AgentService.debug文件 |
| Use Job Count Load Balancing vs. CPU% | 如选中,当代理在代理组中时,代理将考虑在待定事务中作业的数量与它最大的线程和实际CPU使用率负载平衡相比。建议保留此字段不选中。通过CPU使用率基础上的负载平衡,AppWorx 考虑到处理代理机器的所有应用的处理,包括AppWorx之外运行的东西。 |
1) 定义远程代理对象
2) 创建登录用户
3) 安装AppWorx远程代理软件
4) 开始网络侦听服务(for Windows)
5) 检验安装
其中,2-5步就参考AppWorx安装指南
可以重命名系统的输出文件和报告的文件名,通过site子目录的awenv.ini文件。使用SYSTEM_OUTPUT_NAME设置命名标准输出文件(程序类型为o的文件来自AppWorx) 。使用REPORT_OUTPUT_NAME设定重命名由一个模块程序运行产生的报告文件(程序类型为b的文件来自AppWorx) 。这些条目可以包括替换变量,代入变量,环境变量。在[default]下设置,如下所示。
For UNIX:
[default]
SYSTEM_OUTPUT_NAME=$AW_HOME/training/out/{jobid}_{module}.txt REPORT_OUTPUT_NAME=b{jobid}_{module}.txt
For Windows:
[default] SYSTEM_OUTPUT_NAME=$AW_HOME/training/out/{jobid}_{module}.txt REPORT_OUTPUT_NAME=b{jobid}_{module}.txt
在输入新的设置之后,停止和重启AgentService进程后将生效。
Master和本地代理AppWorx GUI中作为一个单一的对象。可以使用Master Options页面指定Master的几个选项。
Time zone字段显示Master的时区。要改变Master的时区,你必须改变这个值,并从Master的awenv.ini文件中删除TZ设置, 并运行升级。
警告!如果你改变了Master的时区并选择’ No selection ‘ ,任何带时区设置的链 将失去他们的时区设置。
可能有一些作业,要运行在不同的时区的特定的时间。要做到这一点,可以为模块
或链选择指定的Time zone字段。你必须选择Master的时区,这样AppWorx会知道调整其启动时间多少个小时。
设置Master时区的步骤
1) 选择Master的本地代理
2) 通过Time zone字段选择时区
3) 删除awenv.ini文件中的TZ行。如TZ=EST
4) 运行soinstall,并选择3更新。输入正确的时区
5) 检查awenv.ini文件,出现新的设置。如TZ=PRC
登录中指定的Login type字段是用于模块默认选择 登录标签。有两种:
模块:作业利用模块的登录运行(除非模块定义要求使用用户的登录) 。
用户:作业利用用户的登录运行(除非用户登录定义为” No selection’,使用模块登录)。这个选项常用于用户有不同的数据库视图。
如果Enable LDAP被选中,AppWorx将使用LDAP认证。
| 字段 | 描述 |
| Java JNDI Factory class | Java JNDI 初始语境类 |
| URL | LDAP 服务器的URL |
| Initial directory | LDAP 服务器的初始目录 |
| Search by field | 指定哪一个LDAP字段用于用户登录搜索(如:UID和CN) |
| Authentication mechanism | 认证机制,值queryServer引起LDAP查询 |
| SSL Enabled | 允许SSL |
| Keystroke path | 设置LDAP按键路径 |
| Keystroke password | 指定LDAP铵键密码 |
如想测试LDAP设置,请点击LDAP连接(Test LDAP Connection)按钮。
AppWorx LDAP解决方案仍在不断完善,想了解最新的LDAP实现信息,请参考AppWorx支持网站。
路径: Master Options à Chains
| 字段 | 描述 |
| Insert components into chain’s queue | 设置链的组件运行在链选定的队列,而不是模块定义选定的队列。 |
| Use virtual day for chain component days of week | 指定链组件日期为虚拟工作日历 |
| Defer schedules on startup | 当Master停止时,推迟所有的调度的作业 |
| Don’t Eval passed chain args when INITIALIZED | 计算无格式的subvars (即subvars没有登录)分配提示给链中各组件时,而不是运行时处于INITIALIZED状态。保持这个选项未选中确保subvars在初始化时间得到计算,而不是准备时间。
Enclosing Subvar Prompt Values in { }:如果调度的链提示包含在{}中 ,链将传递subvar名称作为一个字符串给它的组件,而不是它的值,无论是否设置此选项。 Evaluating Subvars with Logins in Chain Prompts: 如果一个链 提示值是一个已登录分配给它的subvar,它将不再计算,直到作业执行或执行的条件被计算。 |
路径: Master Options à Debug
| 字段 | 描述 |
| Enable full condition debugging | 设置全条件调试(方法),在AppWorx客户端打开条件调试与在awenv.ini文件中设置CON|ALL一样,调试代码将写在Master的RmiServer.log文件中。 |
| Enable TRUE condition debugging | 只有当条件计算为真时,设置条件调试。 |
| Master Debug | 在当前RmiServer.log文件中打开调试 |
| SQL Trace Debug | 打开Oracle的SQL跟踪选项-结果保有存在Oracle用户日志的目录。一般不应该这样做,除非得到AppWorx产品支持。 |
| Log Locks Encountered | 在表appworx_errors插入一条记录,当A ppWorx试图更新记录,而同样的行在待定事务中被锁。 |
路径: Master Options à Explorer
| 字段 | 描述 |
| Use module max revisions | 当你定义一个模块,您可以指定Max # of revisions, AppWorx将保存的最多版本。选择此选项来设定。 |
| Enable event log | 创建一个事件日志用于惠普VantagePoint业务应用。 |
| Disable initial predecessor inheritance | 禁用前置链接继承。继承作业将有资格准备开始运行,除非其他作业还有前置链接。 |
| Allow deleted status to satisfy SLR | 成功自上次运行(SLR)的前置链接类型要求前置自从最后一次作业运行成功。选中此选项,一个删除的前任也满足了要求。 |
| Allow aborted job to block single threaded queue | 如果队列有一个线程时间表,它的Max Threads 为1,通过该队列,只能同时运行一个作业。当 队列包括最大线程为1的线程时间表,它被称为单线程队列。 如果选中此选项,一个带Stay in Queue on Abort选项的失败作业,留在队列上将占据队列的唯一线程。没有其他的作业允许通过队列运行,直到发生下列其中一种情况: •失败的作业被删除。 •失败的作业被重置和运行完成。 此选项仅适用于单线程队列。它不允许待定事务中 失败的作业占据一个线程队列中的线程 时间表有一个以上的最大线程。 |
| Enable auditing of backlog changes | 增加待定事务中的审计变化到aw_audit_table数据库表。审计数据通过运行AW_PURGE_AUDIT_HISTORY模块清除。 |
| Automatically assign new role objects to themselves | 当他们创建的时候,自动分配的新角色对象。 |
| Schedules submitted as a group | 当一个作业出现subvar问题时,阻止所有的预定作业。
当这个选项没有选中时,缺省的动作就是弹出例外,但运行所有其他预定的 作业。 |
路径: Master Options à Password
| 字段 | 描述 |
| Do not require awrun passwords | 允许使用不带-z <password> 参数的awrun工具 |
| Disable user after 3 consecutive failed login attempts | 当登录AppWorx客户端时,连继三次输入错误的密码时,失效用户 |
| Force password change on new users | 强制用户在第一次登录后修改密码 |
| Force password to contain both alpha and numeric characters | 强制用户密码包含字母和数字 |
| Require password length of 6 characters | 强制用户密码至少包含6个字符 |
| Disable clearing of login passwords on re-login | 当通过Re-login重进AppWorx时,在Login窗口记住用户密码 |
AppWorx包括一个强大的审计功能。 AppWorx审计监督几个AppWorx对象及其部分的变化。使用AppWorx报告对象查看审计信息。一些AppWorx报告对象是AppWorx发行 ,它们被命名为 AW_AUDIT_ <对象或对象部分> 。例如, AW_AUDIT_CHAIN报告显示链的审计信息。这些报告反映了原始数据,变化,变化日期 和哪个AppWorx用户做了变化。
如果分配有管理员角色, 会看到一个Audit页面在Agents 编辑窗口。在这里,可以打开AppWorx审计。 AppWorx审计可以让你看到谁编辑了对象。当审计是开启,应该定期调度运行AW_PURGE_AUDIT_HISTORY模块。
Audit页面还显示,第一个对象什么时候更改的,以及已被更改的对象总数。为得到更详细的信息,点击Details按钮。
如想审计待定事务变化,选择Master选项Enable auditing of backlog changes
AW_PURGE_AUDIT_HISTORY 模块用于清理审计表数据。 它包含一个提示,需要保留审计数据多长时间。它同时清理对象和待定事务审计信息,缺省值是60天。如你使用AppWorx 审计功能,你必须设置这个值并为这个模块创建一个调度。
如想发送通知邮件,必须在master/代理中指定邮件发送人信息。 要指定Master的电子邮件设置,选择master/本地代理的Email页面,然后指定主机,开放 端口,发件人。确定电子邮件设置后,可以给发件人发送测试电子邮件,点击Test按钮。
当给代理组提交模块, AppWorx在代理组中第一个可用机器组行它。如果Multi-Execution选项被选中,模块和链 将在分配的代理组的每一个代理中运行。没有Multi-Execution选项的代理组被称为正常代理组。
可以给模块分配代理组,只能给链分配Multi-Execution代理组。
1) 从Agent Groups窗口,点击New
2) 选择Standard代理类型,点击OK
3) 输入代理组名称和描述
4) 如果你想在所有的代理中运行作业,点击Multi-Execution
当通过Multi-Execution代理 组运行模块,链,链的组件时, AppWorx自动创建作业的副本,然后在组中的每个代理中运行。每个作业都出现在待定事务中,这样可以跟踪执行。
5) 给代理组分配一个或多个代理
APPWORX_AGENTS代理组由SODELETE模块使用,应当包含所有的APPWORX代理。
SODELETE删除达到保留日期的或达到最大版本数的输出文件。必须确保SODELETE在所有的AppWorx代理执行。SODELETE是SYSTEM链的一部分。
负载平衡提供动态的手段,用来平衡一些机器之间的处理负载。AppWorx提供了灵活性的方法来管理负荷分配,以满足几乎所有的站点。
决定代理顺序由下列条件决定:
1) 代理的优先级
2) 代理负载因子乘以CPU利用率的值。如果选中选项Use Job Count Load Balancing vs. CPU%,代理因子 乘以当前代理正在运行的作业的数量超过代理的最大线程数。
3) 代理最后活动的时间信息
在给代理组增加代理之后,下一步就要给组中的每一个代理分配优先级和负载因子。路径:Agent Groups à Edit.
Priority: 优先级,代理的优先级,与代理组中的另他代理相比较。Priority字段数值越低,运行作业的优先级越高。
Load factor:负载因子,代理的处理能力,与代理组中的另他代理相比较。Factor字段数值越低,运行作业的处理能力越高。例如,如果机器A有Factor为20,而机器B有机器A的一半处理能力,则机器B的Factor为40。
SYSTEM链是AppWorx每日管理的关键。它包含两个模块:DELDEFAULT和HISTORY_PURGE。
第一次新安装后,SYSTEM链的开始时间设为00:00。如处理较轻,你可能希望更改这个设置到一个不同的时间。
通常,依赖SYSTEM链处理历史记录和输出记录。然而,你可以单独提交每一个模块去代替链。
当定义了一个模块,可以设置输出保留的天数。SODELETES模块(别名DELDEFAULT)删除达到保留天数的输出文件。
SODELETE模块也删除AppWorx进程创建的日记文件。缺省地,7天以后,它们被删除。你可以更改这个设置到另一个的天数。更改方法:
awenv.ini 文件 à [default]段 à LOG_RETENTION_DAYS
HISTORY_PURGE模块删除所有的过期的历史记录,过期天数在模块的参数中指定。缺省是60天。如果你想使用不同的值,可以单独提交HISTORY_PURGE模块。
为了满足SLR的前置链接,数据库中必须有一个参考的前置作业。运行HISTORY_PURGE模块将删除这些参考。大多数情况下,这绝不会是一个严重的,因为历史在前置被检查之前保存多天 。如果这种情况发生,使用条件取代SLR前置。
所有AppWorx代理现在都是多线程的Java代理。不再有C代理。awcomm, AgentService 和awapi进程运行在所有代理中。通常情况下, RmiServer进程运行在的主机上。为了确保Master与各种进程安全通信,所有信息都会加密。
要查看AppWorx进程状态,使用awstat命令。
awapi进程为非持久性进程awexe,awprint和awrun 处理事务。它作为awexe和awprint执行事务处理功能的集中器 。它对AgentService保持一个开放的接口以提高响应。
使用startso和stopso命令启动和停止AppWorx进程。在启停进程之前,必须设置环境变量。环境变量文件是:$AW_HOME/site/sosite
不带参数的startso命令启动如下进程:
1) awcomm
2) AgentService(它启动awapi)
3) RmiServer
不带参数的stopso命令是停止AgentService进程
如果想开始AppWorx 进程,但不允许Master执行作业,直到有机会查看待定事务的内容。可以使用如下命令:
startso
stopso master
stopso master命令不会停止任何实际的进程,因为这些要素RmiServer进程上已经完成。它将使master进入停止状态。
使用命令apachectl start和apachectl stop来启停Apache 进程。
如果进程在规定的时间内没有启动,启动进程将异常中止。可以在awenv.ini文件中改写进程启动等待时间。如果设为0,将使用缺省的时间。缺省的时间为:
Agentservice_wait=60
Awapi_wait=60
Rmiserver_wait=60
Awcomm_wait=10
使用命令stopso –now <进程名> 来立即停止进程。
watchworx进程用于检查并重启AppWorx错误的进程。
AppWorx支持大多数的生产环境没有任何问题。然而,在某些情况下,如网络或数据库的问题频繁发生,或机器和应用是在不断变化, WatchWorx确保AppWorx进程启动和运行。 WatchWorx检查awcomm , AgentService , awapi ,并RmiServer进程。如果这些进程意外退出, WatchWorx将重新启动这一进程。如果一个进程被系统手动停止或业务人员使用stopso命令,Watchworx将不启动这个进程。
注意:重启一个远程代理的AgentService进程可能需要7至10分钟。这取决于watchworx进程的循环周期、网络连接和机器速度。
AppWorx进程每一次休眠周期向watchstatus.log文件写入信息。此文件位于log目录。
在UNIX系统,每次代理安装,WatchWorx作为一个独立进程运行。在Windows,系统中,WatchWorx作为一个服务运行在Master和远程代理机器上。
有几个环境变量的影响WatchWorx 进程,它们被设置在awenv.ini文件的[WatchWorx]段。格式为:variable=<value>。
| 变量 | 描述 | 缺省值 |
| initial_sleep | WatchWorx等待所有进程的开始的最初的时间 | UNIX:120秒
Windows:20秒 |
| watch_sleep | WatchWorx进程检查之间的休眠时间 | 30秒 |
| mult_factor | 当一个进程不在存在,WatchWorx比较最新状态更新时间期间和sleep_time * mult_factor 。默认情况下, WatchWorx 的mult_factor等于7 。如果进程睡眠时间等于60 秒, WatchWorx将不会在闲置代理采取行动除非有时间差 超过420秒。由于用户干预的正常关闭,WatchWorx不会重新启动进程。 | 7 |
| max_cycles | max_cycles变量设置WatchWorx将尝试每隔x秒重新启动一进程的次数,每隔x秒钟由min_time_reboot 变量设置。在指定数目的重新启动之后,它会尝试重新启动进程每隔y秒数,y秒由max_time_reboot变量设置。 |
3 |
| max_time_reboot | 重启的最大的等待时间 | 1800秒 |
| min_time_reboot | 重启的最小的等待时间 | 300秒 |
| watch_wait | Stopso命令与startso命令的休眠时间 | 3秒 |
| watchstatus_file | WatchWorx进程状态日记文件,必须是全路径 | 缺省在log目录的watchstatus.log |
进程有2种状态:offline和online。
Offline状态显示进程被手动停止,WatchWorx将不会试图重启此类进程。
Online状态显示进程被自动启动,如果在指定的时间间隔内,更新时间戳失败,WatchWorx将试图停止和重启此类进程。
WatchWorx允许通过WatchWorx.notify脚本增加活动。每当WatchWorx试图重启AppWorx进程时,WatchWorx.notify脚本将运行。脚本必须放在AppWorx的exec目录。在UNIX中,这个脚本必须有执行权限。
WatchWorx可以传递给脚本三个参数:
•进程名称
•进程类型
•关于WatchWorx的行动一条消息
例:echo “`date`AppWorx process $1 of type $2. WatchWorx message: $3. “|mail [email@address]
如果所有的进程有规律地写入WatchWorx状态表,WatchWorx休眠60秒,然后继续检查。WatchWorx采取行动的基础是:进程的类型及当前时间和状态表时间的差异。有两个组进程,WatchWorx处理RmiServer进程不同于其他的进程。
对于RmiServer进程
| RmiServer状态 | 进程的PID | 时间差异 | WatchWorx动作 |
| Online | Exists | <sleep_time*factor | 休眠 |
| >sleep_time*factor | 关闭并重启进程 | ||
| Does not exist | — | 并闭并重启进程 | |
| Offline | — | — | 休眠 |
对于其他进程
| 进程状态 | 时间差异 | WatchWorx动作 |
| Online | <sleep_time*factor | 休眠 |
| >sleep_time*factor | 等待一定的秒数mult_start*sleep(缺省为420秒),然后关闭并重启进程 | |
| Offline | — | 休眠 |
awcomm进程为一台机器的Masters和代理提供了一个直接服务端口,它保存分配给Master的端口,并提供给客户进程。客户端进程是一个沟通与AppWorx事务处理例程的进程。在一个典型的配置中,每台机器只有一个awcomm进程。
在正常情况下,awcomm不需要被停止,除非你计划删除其AppWorx实例。
awcomm进程在第一次执行startso时第一个启动。它从data目录的net_conn.dat读取恢复信息。它处理来自awapi,AgentService和RmiServer进程的请求。在任何时候任何通信发生时该进程需要存在和操作。
缺省地,awcomm进程的侦听端口为2136,AWCOMM_PORT必须在RMI服务器/Master及所有的远程代理中保持一致。如果防火墙,必须开放这个端口的输入和输出通信。检查端口是否被使用,可以用如下语句:netstat -an|grep <port number>。
AppWorx内部通信进程是由AgentService进程管理。AgentService进程启动,在端口范围49152-65535查找第一个可用的端口,并登记其awcomm进程的Master信息,以便未来的客户端可直接连接。
可以在awenv.ini文件中设置如下变量用于配置AgentService
| 变量 | 描述 |
| AgentClientPort | 远程代理的端口,用于接收Master的数据 |
| AgentServerPort | 在Master上的侦听端口,用于AgentService和awapi进程的通信。如果不指定,范围从49152到65535,进程启动时,AppWorx每次指定随机的端口。如果没有防火墙,一般不指定。 |
| AWCOMM_PORT | Awcomm进程侦听端口 |
| Master_IP_Address | Master的IP地址 |
| M_A_SSL | 指定在Master和代理之间是否使用SSL协议 |
AppWorx RMIServer用于给AppWorx Java客户端提供信息的进程。它从AgeentService进程得到Oracel数据库的连接信息和从master.set解密登录信息。如果RMI Server不活动,则AppWporx Java客户端不能启动
使用 startso rmi启动 Rmi Server例程。它调用Java虚拟机。RMI Server启动并连接到Options.properties文件指定的RMIRegistryPortNumber端口.
连接到awcomm后,RmiServer进程尝试连接到AppWorx数据库。它将不停尝试,直到连接。如果成功的数据库信息是不正确,Rmi Server无法启动。所以RmiServer启动的前提是:
1) awcomm和Master的AgentService必须启动,以得到数据库SID连接信息
2) RMI Server目标数据库的Net8(SQL*Net)必须运行。
有两个配置文件与RMI Server有关:Options.properties和Masters.properties
Options.properties文件的参数与awenv.ini类似,它不使用段分开。如果一个值被设置了两次,则在文件中的最后一次有效。
| 变量 | 描述 |
| RMIHostID | RMI Server所在机器的IP地址 |
| RMIRegistryPortNumber | RMI Server使用的端口 |
| RMIDataPortNumber | RMI Server传输数据端口 |
| ServerCodebase | UserWorx.jar所在的URL路径 |
| ServerLog | 日志地(正常信息和debug信息) |
| Debug | Debug设置,缺省为false |
| SSL | 设置是否使用SSL加密,缺省为on |
| ExitPage | 离开客户端的网页 |
| SQLOPER_HOME | AppWorx安装地点(AW_HOME) |
Masters.properties为AppWorx Masster提供了端口和IP地址信息
| 变量 | 描述 |
| AwCommPort | Awcomm端口 |
| <master name> | 用于增加Master |
下列情况可能引起RMI Server出现故障:
1) Net8(SQL*Net)没有运行或数据库连接没有运行
2) Java没有安装或操作系统的补丁不正确。
3) 客户端和RMI Server之间丰存在防火墙问题
4) awenv.ini文件中不正确的变量设置,包括:MasterServerPort, MasterClientPort, DB_SID, DB_IP, DB_PORT。
awexe进程就是所谓的’瘦’客户端。它通过awapi (后端客户端)连接到AgentService进程。该awexe进程只能运行列在awserver_sql.dat和awserver_sqlusr.dat文件中的内容。文件位于AppWorx data目录。变量( AW_HOME ,AGENT,PATH= $ AW_HOME /bin: $PATH)必须设置正确,一个AppWorx用户必须存在相匹配的操作系统的用户, 和用户必须有正确的Awexe Range。 Awexe用于安装,导入和导出,命令行程序,作业启动和完成,以及startso和stopso等。
awexe进程提交请求给awapi进程,awapi进程按序提交给AgentService。要看操作系统用户是否可以执行语句,AgentService进程验证操作系统( OS )的用户和awexe命令范围是否是分配给用户的命令范围。如果权限是正确的,语句被执行,结果传递给awapi,后者回传给awexe 。
当你定义了一个AppWorx用户,你可以通过Awexe Range字段限制用户执行命令的范围。
• 1000-1999: Used for AppWorx background processes.
• 2000-2999: Utilities for the general user.
• 3000-4999: Reserved for consulting.
• 5000-9999: Used for custom definitions.
下列情况可能引起awexe出现故障:
1) awapi和AgentService进程没有运行
2) 变量设置不正确
3) 命令太长
4) 操作系统用户设置不正确
5) Appworx用户没有权限执行功能。(Awexe Range限制)
6) 操作系统用户在c,bin和exec目录没有读(执行)权限,在pipe目录没有读写权限
当一个模块被请求或计划运行时,作业开始了。Master启动程序执行,并通知适当的代理。数以千计的个体模块(及相关程序)能够在同一的时间执行。
下图显示的参与处理作业的常规阶段。在递交阶段(向下箭头)设置初始状态,创建运行环境,并传递信息。返回阶段(向上箭头)处理作业输出记录,后期加工,和条件。
Master传递合格的作业到适当的代理。代理通过建立和执行脚本处理这项作业。脚本建立了作业的环境,执行任何运行脚本,并调用程序类型的脚本。
程序类型的脚本调用应用并完成和AppWorx,程序及运行的应用程序之间的联络 。与此同时,Master执行DURIN的条件。
程序执行后,输出(可选)登记。当输出登记时,建立输出文件和运行的作业的连接,并储存在 AppWorx数据库。登记后,在报告作业完成状态前运行扩展。Master执行AFTER条件和移动作业到历史。
每个主题包含一个阶段条,它概述了模块的执行每个阶段关键组成部分。箭头指示了执行方向。这是重要的,因为该阶段是双向的,这意味阶段是程序执行之前,期间和之后。想想一个模块的执行看成一系列调用子脚本的脚本,传递参数和输出结果。
1) 请求窗口
2) 调度的模块和链
3) API调用
一个作业提交之前, AppWorx Master分析作业的适合运行的特征。特征包括:单独运行,优先级,线程链,冲突,开始时间,队列线程,代理组/负载平衡,代理线程,及代理的可用性。
如果作业适合运行,Master评估所BEFORE条件,并确定这项作业是否可能会运行。下面活动可能会推迟或阻止模块的运行。包括WAIT UNTIL MET, DELAY TASK, RESCHEDULE TASK, SKIP TASK,和 HOLD TASK。
如果条件不排除模块运行,Master找到代理和通知代理。Master更改作业的状态为STARTING。
Master创建两个文件:pm和pr。pm文件创建一个新的环境,调用BODY脚本。pr文件包含每个模块提供的参数。这些可能在程序类型接口脚本或程序中使用。
pr文件包含来自模块提示的参数。pr文件的文件名( pr. <seq_no> )通过pm文件在系统环境变量par输出。完整路径名称的文件保存在变量so_par。par文件总是在AW_HOME的run子目录下,可(可选)用于程序或程序类型脚本。
pm和pr文件,在作业执行后,被BODY脚本删除,但与作业有关的所有信息是显示在作业相应的SYSOUT文件中。
有四种方法可以一个程序设置环境变量和输出它们(使它们有效) 。
1) AppWorx GUI
2) site目录的sosite文件
3) PREFIX运行扩展
4) 程序类型接口脚本
AppWorx在运行时大约定义40个环境变量,并写入到pm文件。如果你在sosite文件中定义了一个环境,如OUTPUT,在运行,它将自动被pm文件覆盖。你可以使用PREFIX脚本或程序类型脚本修改pm中定义的环境变量。
Master处理所有的AFTER或者DELETED条件,然后转移作业到历史或者重启它。
这样,整个模块的执行就结束了。
在Master有代理执行pm脚本前,它直接设置两个环境变量: db_login2和b_password2 。这些都是直接设置,使他们决不存在在操作系统的文件中。代理启动pm文件设置环境和输出环境设置到一个新的环境(设置子-shell的环境)。然后pm文件调用BODY脚本。
pm文件为模块设置环境变量和它的相关子对象(数据库登录,程序类型,输出规格说明)。
通过sosite文件增加或删除环境变量,可以更改AppWorx的环境设置。也可以增加PREFIX脚本去增加,修改或删除环境变量。也包括Oracle指定的变量比如ORACLE_SID,ORACLE_HOME和TWO_TASK。
AppWorx给每一个提交的模块分配一个唯一的作业标识号(job_id)和次序号(seq_no)。job_id用于生成作业输出文件的名字。输出文件被SYSTEM链有规律地删除。pr和pm文件在程序运行完成后被删除(除非启用DEBUG)。如下表所示:
| 文件名 | 作用/描述 | 目录 |
| pm<seq_no>.sh | 传递系统环境变量 | exec |
| pr<seq_no>.sh | 传递提示 | exec |
| o<jobid> (UNIX)
o<jobid>.log (Windows) |
默认的系统输出文件:待定作业的输出接收 | out |
| b.<jobid> (UNIX)
o<jobid>.lis (Windows) |
默认的程序输出文件:记录程序产生的结果 | out |
BODY脚本设置作为的状态为RUNNING,记录作业的进程ID(pid),通知作业的代理,使其能监控作业的完成。登记系统输出,执行所有的PREFIX脚本,最后调用程序类型脚本。BODY立即创建系统输出文件,这样就能查看。BODY创建一个打印注册文件,包含AppWorx登录系统输出的所需的信息。
BODY脚本在模块执行的不同时间也运行用户定义的脚本。这些被当作运行扩展。所有合法的shell或批处理脚本都能被当作运行扩展脚本,它必须保存在AW_HOME的exec子目录,并被适当命名。
第一个运行扩展脚本是SYSOUT脚本。在作业运行前,AppWorx执行适当的PREFIX脚本(如存在)。剩余的脚本(COMPLETION, SUCCESS,和 TROUBLE)在程序运行之后运行。
警告!SYSOUT, PREFIX, COMPLETION, TROUBLE 和 SUCCESS脚本都是被在线调用。很差的或不适当的代码可以对AppWorx控制和监测模块的执行产生不利影响。例如,脚本中的‘exit’可以会导致模块的状态改为DIED。
程序类型完成之后,BODY测模块管理/输出规格定义的“Minimum-Run-Time ”。如果过去的时间低于最低运行时间,然后作业中止和AppWorx设置错误状态等于1 。
BODY运行任何运行扩展脚本(COMPLETION, TROUBLE和SUCCESS)如果它们存在的话。可以创建一个TROUBLE脚本,在结果返回代理之前,设置重置错误状态。
BODY更新作业完成时间,返回代码,并完成状态。经过检查 所有文件已被成功地转移,BODY删除pr和下pm文件。 最后,BODY删除任何其他创建的临时文件。
Master进行下一阶段的工作处理。
程序类型和其匹配的脚本一般传递par文件的内容给程序。程序类型是一个对象,用于优化开发和维护的效率。 程序类型对象指定程序类型的脚本。程序类型的脚本完成AppWorx和程序执行的联络,并处理程序输出。可以定义多种程序类型。程序类型的脚本都位于AW_HOME目录的exec子目录。
程序完成执行之后,程序类型脚本捕获输出和确保文件被完全登记。
程序和程序类型的交互影响一个特定的任务的执行。一般而言,程序生成并返回退出状态给程序类型脚本。无论是程序或程序类型的脚本都可能会产生输出,这依赖于输出是如何设置的。任何程序写入标准输出的输出将被系统输出文件捕获。如果程序创建任何额外的输出,需要登记到AppWorx ,程序类型的脚本可以调用FILESIZE。
FILESIZE创建一个文件,包含AppWorx登记输出文件所需的信息。缺省地,输出到$file或%file%。如下列表为缺省设置。
| 输出 | UNIX | Windows |
| Standard out(log file) | $AW_HOME/out/o<job_id> | %AW_HOME\out\o<jobid>.log |
| Program output | $AW_HOME/out/b.<$job_id> | %AW_HOME\out\o<jobid>.lis |
程序执行,并返回退出状态给程序类型接口脚本和可能创建输出。程序传递状态值给程序类型脚本和执行(可选)错误检查和输出处理。一般而言,程序类型负责登记输出。
程序的标准输出一般重定向到作业的日记文件,但有些程序类型脚本可能会重定向输出到一个文件。
程序的输出文件包含程序实际的信息。一个程序可以生成很多程序输出文件。程序输出的缺省的位置是out子目录。
1. 首先,publishing adapter创建消息,触发创建消息的事件可能是数据库的一个选择操作,或者只是到了特定的时间间隔。每个消息在协作的情况下被创建,并且协作的部分配置说明了发布这个消息的目标。这个消息被送到一个“topic”(也叫JMS目标),然后被写入稳定存储器中。
2. 现在订阅者可以开始订阅消息了。订阅过程是基于publishing collaboration/event type的组合实现的。每个订阅者连接topic,然后获取下一个有效的信息。订阅者用分开的线程从各个事件类型地基地中获取消息。消息的获取是通过它在topic内的位置确定的。作为获取过程的一部分,Error Hosptial软件通过更新消息的状态来反映当前有一个订阅者正在处理这个消息。
3. 一个订阅者一旦获取到消息,他就可以根据自己的规则自由地处理它。如转换适配器,它可以打开消息、修改消息内容、把修改后的消息发布到新的topic上。如果新的消息与原消息类型不同,新消息可以发布到原topic上。修改后的消息可以有多个订阅者,对每个订阅者,都不断重复以上过程。
4. 当一个订阅者完成消息处理后,topic相应更新消息的状态。当所有的订阅者都完成对消息的处理后,这个消息可能会被立即删除或者在删除前存档一定的时间。存档根据topic的类型和Quene Manager的不同设置来相互区别。
5. 消息传递给适当的订阅者后或者在topic上的停留时间达到了MaxTimeToLive参数设置的时间时,JMS Quene Manager将删除这个消息。
SMTR8i DEMO程序步骤笔记
为了熟悉MSTR8开发工具,我特做了一个DEMO演示程序!把关键过程写了下来,希望能对后边学习MSTR8的同事们有些帮助!当然,由于时间和个人能力的原因,这一过程难免有误,希望大家以予指正!为了做演示程序,我在rdw12md这个用户下面建了2张表:CUX_EMP_INF: 员工基本信息维护表,CUX_EMP_PER_PAY :员工待遇维护表,为了使用方便,我在员工待遇表里加入了员工姓名。两张表通过EMP_ID 关联。
在前面,已经写过建立DESK TOP 与RDW数据库之间的连接,那么今天我们就来看一下我们怎么用MSTR8来开发报表。
一:建立项目源。建立属于自己的项目源,我们的开发都将在这个项目源里进行。
工具à项目资源管理器à添加à
进入如下界面:
注意,ODBC DSN中 xie_ds 是我们建立好的数据源。这是用来连数据资料的。之前志茹已经写过步骤了。至于如何确定我们写的ODBC DSN 是否连接成功,我们可以打开套件里中的 ODBC TEST TOOL :
确定以后,进入界面,可以用一个SQL 测试一下,
select * from cux_emp_inf
进入下图:
此时,我们项目源建立成功!
二:创建我们的项目。
2.1创建项目。选中我们的项目源。右击选择新建项目。点创建。
进入下个界面:
如果你第一次进入,系统会默认为管理员,并留空密码进入。在创建过程中,会为客人用户选安全角色,我们选NORMAL USERS:
确定!至此,第一步完成。
我们选择之前建立好的数据库实例,把我们要用的表>放到右边去 进入下图:
点击保存并关闭!此时,第2步完成。
2.3创建事实。
选中全部,放到右边。
此时,系统将可用列,生成为事实!
2.4创建实体。将可用列全选到右边。
关系定义:以后做钻取的时候定义了比较简单的层次,当然也可以通过建立实体对象来做更详细的钻取!
点下一步,然后确定,至此,第二步完成!入下图
三:报表开发。
3.1 创建实体对象。展开MSTR_DEMO,展开公共对象,新建一个文件夹,存放我们的对象文件。
打开文件夹,右击 新建实体,我们首先创建一个月份的实体,用来按月展示或度量员工信息!
选取存放月份的表,把字段EMP_MONTH 拖到右边,点手动。
确认以后;把表源勾上,写上注释!
确定以后,我们点关闭并保存,命名为:月份。
用同样的方法创建 姓名,地址等对象!
3.2 创建度量。在度量文件夹里创建一个空白度量,把事实EMP SARLARY 放到右边框里,这里我们选择汇总,(可以根据需要选择函数):
点关闭并保存,命名为:工资总数。
同理,创建奖金总数,津贴总数,创造总价值等度量!
入下图:
现在基本工作应该做好了 ,我们先点框架,然后点更新框架,这样我们所做的操作才会产生效果!
3.3创建报表模版。
文件à新建à报表:
在对象浏览器中 选择 公共对象,找到我们创建的对象,拖到报表对象栏中,再把我们建立的度量加入到报表对象里,如下图。
我们运行一下报表:
为了方便观察,我们把它做成纵向报表:切换到视图设计,点攻 行列互换按钮!我们再运行报表,如下图:
到此,一个简单的报表初步形成。下边我们用这张报表来分析所有员工的平均收入,员工的工作效率,并把工作效率小于80的员工效率显示红色,把效率大于等于90的员工效率显示为蓝色!
四:进一步开发报表,在以上报表里实现上诉需求。
4.1添加总计函数,先把视图筛选里的 自动应用更改勾上。在菜单栏里选数据,点总计,就自动为你做好总计了。
4.2计算员工的每月的总收入,总收入=工资+奖金+津贴,我们在报表对象栏里选择空白地方,右击插入计算。
4.3计算员工的效率, 员工的效率=员工创造总价值/(员工创建总价值+员工总收益),由于还没解决括号问题,我用总价值来替代 员工创建总价值+员工总收益,按以上步骤写出计算公式。得出下图结果:
4.4 阀值的运用,显示员工效率小于80的效率表格为红色,大于等于90的为蓝色!
选取员工效率行,右击选择 阀值。做如下设置。
得到如下图:
4.5报表的拖拉,拖拉是工具本身所带的功能,如下图:
4.6筛选,选出公司员工效率大于等于90以上的员工信息:
在视图筛选里做如下操作,就能得出结果:
4.7 钻取:我们选中6月份这栏;右击,钻取,其他方向,EMP DATE IN,确定以后,一个新的报表产生,如下图:![]()
我们继续向下钻取,同理,选 向下钻取:来到EMP DATE OUT(员工离职当月信息)如图:
我们现在来新建一个钻取方向:比如按性别来钻取:
4.7.1 实际上,我们只需要创建一个性别的对象实体就能获得钻取路径,由于怎么创建对象实体在前面以已经描述过了,那直接得出下图:
4.8用图形界面或报表一起查看:
4.8.1 在菜单里 选择 看看,图形查看,我们选择饼图的第一个样式:
4.8.2 图表查看:
方法同上,选择图表查看:
4.8.3 SQL查看。同上,选择SQL查看,我们将来的开发可能需要修改报表里的SQL代码,我们通过SQL查看能得到以下信息:
报表: DEMO_REP
数据行: 140
数据列: 1
使用报表缓存: 否
查询引擎执行开始时间: 2008-10-22 14:23:59
查询引擎执行结束时间: 2008-10-22 14:24:00
查询引擎的整个处理周期: 0:00:00.43
SQL持续时间: 0:00:00.06
分析持续时间: 0:00:00.00
查询引擎的其它处理周期: 0:00:00.37
返回行数: 19
返回列数: 7
临时表的数目: 0
SQL 的总数目: 1
SQL的数目: 1
分析的数目: 0
DB用户: rdw12md (1)
DB实例: xieyang_ins
访问的表:
CUX_EMP_INF
CUX_EMP_PER_PAY
SQL声明:
路径0 – 持续期间: 0:00:00.06
select a11.EMP_NAME EMP_NAME,
a12.EMP_ADDR EMP_ADDR,
a11.EMP_MONTH EMP_MONTH,
sum(a11.EMP_TASK) WJXBFS1,
sum(a11.EMP_SALARY) WJXBFS2,
sum(a11.EMP_BONUS) WJXBFS3,
sum(a11.EMP_ALLOWANCE) WJXBFS4
from CUX_EMP_PER_PAY a11
join CUX_EMP_INF a12
on (a11.EMP_NAME = a12.EMP_NAME)
group by a11.EMP_NAME,
a12.EMP_ADDR,
a11.EMP_MONTH
[分析引擎计算步骤:
1. 计算度量: <员工效率值> 在最初的数据级别 在视图中
2. 计算度量: <总价值> 在最初的数据级别 在视图中
3. 计算度量: <员工总收益> 在最初的数据级别 在视图中
4. 计算小计: <总计>
5. 计算度量: <员工效率值> 在小计级别 在视图中
6. 计算度量: <总价值> 在小计级别 在视图中
7. 计算度量: <员工总收益> 在小计级别 在视图中
8. 评估阈值
9. 执行交叉表
4.9报表细节处理:
4.9.1分页的使用:我们可以选择查看某个月的员工情况,在运行报表以后,点工具栏里的分页按钮,比如,我们想让报表按月来显示员工信息,我们可以把月份对象拖放到分页栏里!
然后就能选择需要显示的月份!由于我们安装的是7天评估版的,现在已经到期,这个功能的页面浏览不能出现。以致不能截图!但功能不变!
4.9.2小计的使用:按月汇总员工信息:点小计算按钮,点上总计,点高级,在应用级别界面上选分组 加入月份,如下图,我们点确定以后,报表自动修改:
我们也可以按性别,按人来进行汇总!同样,也能求取平均!比如求员工的平均收入,平均工作效率等!
4.9.3报表风格:我们可以选择自己喜欢的报表风格来显示报表:表格—>选择的自动样式,这时,可以选择我们喜欢的报表显示,如:
4.9.4 大纲显示对我们也是帮助的,能让我们更好的分析报表,可以按大纲一级一级的展开。点击工具栏里的按显示大纲结果:遗憾,由于版本问题,现在还截取到截面!
4.9.5用提示来自定义报表。我们现在要实现的功能是不用的用户,可以用提示来创建自己想看的报表,可以自定义报表的显示部分和数据分析!
我们到 公共对象 新建 提示,选择对象提示, 下一步,点加入,把我们需要的实体加入到框内,如下图:
勾选 默认提示答案。我们继续点 下一步 ,加入我们的答案,把性别设置为默认答案!
点下一步,完成,设置标题:
点保存!
我们现在运行报表以后,在对象浏览器中找到我们的提示,把它拖到报表相应的位置上,
点 下一步,完成,则新报表产生。
我们点保存并关闭!
点确定,以后我们请求运行报表的时候,就可以自定义想要显示的列了!
4.9.6 利用筛选来进行简单的人机交流!找到我们希望看到的数据,屏蔽掉我们不想看到的数据!比如:我们只想分析6 月份和7月份 姓名是ANDY 和JON的情况! 我们可以这样来实现!
在公共对象里,打开 筛选文件夹!新建筛选!
选择实体 月份,把6月7月的描述加入到选的对象里
点确定,现在我们完成了对月的筛选!我们用同样的方法建立对人的筛选!完成以后如下图:
保存名字为:对姓名和月份的筛选。运行报表,把筛选拖到报表里,效果如下:
4.9.7 将提示和筛选结合使用,这样会让报表的自定义更加灵活。由于版本licence到期,这个功能暂不能演示!在后边我会将缺少的功能一一列出!
到此,我们完成了开发基本报表的步骤!
五:需要注意的问题和等待进一步研究的问题
5.1 需要注意的问题:
5.1.1:创建完实体对象和度量以后,记得更新框架。因为只有在更新以后,系统才会把你所做的操作进行更新映射。如果不更新直框架而直接运行报表则会出现以下错误:
当装载报表时发生错误: DSSSQLEngine:
转换报表:模板 (本地模板). -模板单元度量-模板度量-维度量 (liangdu).
-维度量-维度量-聚合度量 (). -聚合度量表达式-聚合度量-聚合度量叶-表达式-表达式-在DFC转换的时候DFC框架中找不到对象。
5.1.2:把自己创建对象,报表,度量放在不同的文件夹里,有利于以后在有大量对象的情况下快速选择和应用。
5.1.3:如果我们需要修改报表,例如加一个字段,可以直接从数据表里抽取那个字段做成实体对象,在报表设计视图拖入该对象就行。
5.1.4:关于度量,不做分析就可以不用创建度量,就相当于是做一样张没有分析的陈列报表。
要做好度量也不容易,需要我们更深层次的去研究。
5.1.5:由工具产生的报表能直接导出成EXEL 或HTML格式。不需要我们再做转换。
5.2 等待进一步解决和研究的问题:
5.2.1数据抽取和筛选(重点研究),分析数据的前提是一定要先选出我们需要的数据。
5.2.2 对开发工具的进一步研究。
5.2.3 按需求定义钻取层次,达到想怎么钻取就怎么钻取。
5.2.4 深化度量的创建,度量是分析计算存储的数据(事实)。度量可在报表中定义以指定什么样的数据可显示在报表中。数据可被查看或用来做决策分析。所以对度量还需进一步研究,以便解决客户提出更复杂的需求!
Retail-AppWorx讨论贴
有关AppWorx所有部署,开发过程中的问题,都在此帖讨论。重要问题可单独开帖讨论,并在本帖多所有重要问题建立索引连接。
Retail-RDW-讨论贴
有关RDW所有部署,开发过程中的问题,都在此帖讨论。包括数据抽取,模型,展现的所有问题都可在此帖讨论,重要问题可单独开帖讨论,并在本帖多所有重要问题建立索引连接。
Retail-EBS-BPEL-RIB-接口开发-配置讨论帖
有关Retail 和EBS的接口开发、配置过程中的所有问题均在此帖进行讨论 ,重要问题可以单独开帖讨论,但在本帖会建有索引。
1、部署bpel流程出错,请老商看看(已解决)
2、SendPaymetTermsToRetek bpel process出错
3、
RDW-RETL 安装指南
1. 安装准备
1.1 通过Oracle Edelivery(http://edelivery.oracle.com) 下载RETL12.0安装介质(B30292-01.zip);
1.2 通过Metalink(https://metalink.oracle.com/CSP/ui/index.html) 下载 RETL 12 的两个Patchs:RETL 12.0.1(p6008912_1200_GENERIC.zip) 和 RETL 12.0.1.1(p6418724_1200_GENERIC.zip);
1.3 解压缩下载的RETL安装介质和Patch,参考 RETL 12.0.1.1版本下的安装指南(retl-12011-pg.pdf)进行安装
2. 安装 RETL 12
2.1 首先 安装 RETL 12.0
2.1.1 创建目录:/d01/app/retail/retl/12.0/rfx
2.1.2 上传 retl_12.0_install.zip 到 /d01/app/retail/retl/12.0 目录下
2.1.3 创建安装用户:useradd -g oinstall rfx
passwd rfx
2.1.4 su rfx
ORACLE_HOME=/d01/app/oracle/product/10.2.0/db_1
export ORACLE_HOME
ORACLE_SID=RDW
export ORACLE_SID
INSTALL_DIR=/d01/app/retail/retl/12.0/rfx
export INSTALL_DIR
2.1.5 cd /d01/app/retail/retl/12.0
unzip retl_12.0_install.zip
./install.sh
ps.输入安装 RETL 12.0 的目录:/d01/app/retail/retl/12.0/rfx
2.1.6 安装后查看 RETL 的版本:# retl -v
显示:retl 12.0 build 870
2.2 其次 安装覆盖型Patch,即安装 RETL 12.0.1 (参考:Upgrading from Earlier Releases of RETL章节)
2.2.1 创建目录:/d01/app/retail/retl/12.0.1/rfx 和 /d01/app/retail/retl/12.0.1/rfx/tmp
2.2.2 上传 retl_12.0.1_install.zip 到 /d01/app/retail/retl/12.0.1 目录下
2.2.3 INSTALL_DIR=/d01/app/retail/retl/12.0.1/rfx
export INSTALL_DIR
2.2.4 执行安装前先修改/d01/app/retail/retl/12.0.1/etc 目录下的 rfx.conf/logger.conf:
cd /d01/app/retail/retl/12.0.1/etc
vi rfx.conf //见附录1
vi logger.conf //见附录2
2.2.5 cd /d01/app/retail/retl/12.0.1
unzip retl_12.0.1_install.zip
./install.sh
ps.输入安装 RETL 12.0.1 的目录:/d01/app/retail/retl/12.0.1/rfx
2.2.6 查看安装产生的日志:cat $INSTALL_DIR/install/install.log
2.2.7 根据安装产生的提示,创建环境变量并执行RETL测试脚本(verify_retl):
export RFX_HOME=/d01/app/retail/retl/12.0.1/rfx
export PATH=/d01/app/retail/retl/12.0.1/rfx/bin:$PATH
执行测试脚本:
$RFX_HOME/bin/verify_retl
$RFX_HOME/bin/verify_retl -do
ps. 执行以上脚本,在目录/d01/app/retail/retl/12.0.1/rfx/tmp 下会产生运行脚本的日志文档;若RETL正常安装后,会在SecureCRT tools上显示如下内容:
Checking RETL Environment…found ORACLE environment…passed!
Checking RETL binary…passed!
Running samples…/d01/app/retail/retl/12.0.1/rfx/samples
passed!
=========================================================================
Congratulations! Your RETL environment and installation passed all tests
See the programmer’s guide for more information about how to further test
your database installation (if applicable).
=========================================================================
Exiting…saving output in /tmp/verifyretl-21524.log
2.2.8 安装后查看RETL版本:$ retl -v 或 $ rfx -v 或 $RFX_HOME/bin/retl -version
显示:retl 12.0.1 build 1142
2.2.9 执行脚本 $INSTALL_DIR/bin/setup.sh 检查RETL的安装和环境变量设置:
2.2.9.1 需要安装Java Runtime Environment 1.4.2 (JRE) 以上版本并设置 $JAVA_HOME 环境变量:
JAVA_HOME=/d01/app/appworx/MGMLDRMS/jre
export JAVA_HOME
2.2.9.2 . /$INSTALL_DIR/bin/setup.sh
ps.运行后,正常会在SecureCRT tools显示:
===========================================
****Welcome to RETL 12.0.1 Installation****
===========================================
Please Enter RFX_HOME where RFX_HOME=<BASE RETL INSTALL DIR>
Enter RFX_HOME:
/d01/app/retail/retl/12.0.1/rfx
/d01/app/retail/retl/12.0.1/rfx
Please Enter JAVA_HOME where JAVA_HOME=<BASE JAVA INSTALL DIR>
JAVA_HOME:
/d01/app/appworx/MGMLDRMS/jre
/d01/app/appworx/MGMLDRMS/jre
Please Enter ORACLE_HOME where ORACLE_HOME=<BASE ORACLE INSTALL DIR>
ORACLE_HOME:
/d01/app/oracle/product/10.2.0/db_1
/d01/app/oracle/product/10.2.0/db_1
===========================================
Environment variables set successfully
===========================================
=================================================
Starting the testing of RETL 12.0.1 Installation
=================================================
Invalid argument : d01/app/retail/retl/12.0.1/rfx/bin
grep: verify_usage: No such file or directory
=================================================
Starting the testing of RETL 12.0.1 Installation
=================================================
Checking RETL Environment…found ORACLE environment…passed!
Checking RETL binary…passed!
Running samples…/d01/app/retail/retl/12.0.1/rfx/samples
passed!
=========================================================================
Congratulations! Your RETL environment and installation passed all tests
See the programmer’s guide for more information about how to further test
your database installation (if applicable).
=========================================================================
Exiting…saving output in /d01/app/retail/retl/12.0.1/rfx/tmp/verifyretl-23125.log
2.2.10 ./$RFX_HOME/bin/gsort
ps.12.0.1 Programmer’s Guide For Liunx:You need to create a symbolic link for gsort, pointing to $RFX_HOME/bin/gsort.
2.2.11 RETL提供的环境变量、向后兼容说明及配置说明,可以参考书中:RETL Environment Variables、Backward Compatibility Notes、Configuration Field Descriptions、Temporary Space Configuration、Logger Configuration、Multibyte Character Support 章节
3. 修改RDW中profile文件中RETL_HOME环境变量:
cd /d01/app/retail/rdw/dbserverunix/sample_profiles
vi rdw_profile_ora
# RETL SETUP REQUIRED HERE
# CHANGE REQUIRED HERE
# variable for the location of the RETL software. This should be modified when RETL is installed.
RETL_HOME=/d01/app/retail/retl/12.0.1/rfx ; export RETL_HOME
RFX_HOME=$RETL_HOME ; export RFX_HOME
4. 安装完成RETL后,在/home/rfx/目录下建立环境文件 retl.env,内容如下:
ORACLE_HOME=/d01/app/oracle/product/10.2.0/db_1
export ORACLE_HOME
ORACLE_SID=RDW
export ORACLE_SID
INSTALL_DIR=/d01/app/retail/retl/12.0.1/rfx
export INSTALL_DIR
RFX_HOME=/d01/app/retail/retl/12.0.1/rfx
export RFX_HOME
PATH=/d01/app/retail/retl/12.0.1/rfx/bin:$PATH
export PATH
JAVA_HOME=/d01/app/appworx/MGMLDRMS/jre
export JAVA_HOME
执行启用RETL前,先运行上述环境变量:
source /home/rfx/retl.env
运行后,检查一下是否已经生效:
env | grep RFX_HOME
如果有显示上面对应设置的结果,则表明已经生效。
附录1:rfx.conf
<CONFIG>
<NODE hostname=”syfr12″ numpartitions=”1″ bufsize=”2000″>
<!–
If you change the TEMPDIR settings, you may also want to change
the performance log file location specified in logger.conf.
–>
<TEMPDIR path=”/d01/app/retail/retl/12.0.1/rfx/tmp” />
</NODE>
<GLOBAL bytes_per_character=”1″ PRINT_HELP=”ALL”>
<!– Logger configuration has been moved to logger.conf. –>
</GLOBAL>
<DEFAULTS operator=”oraread”>
<PROPERTY name=”maxdescriptors” value=”100″/>
<PROPERTY name=”hostname” value=”syfr12″/>
<PROPERTY name=”port” value=”1521″/>
</DEFAULTS>
<DEFAULTS operator=”orawrite”>
<PROPERTY name=”hostname” value=”syfr12″/>
<PROPERTY name=”port” value=”1521″/>
</DEFAULTS>
</CONFIG>
ps.在原来的rfx.conf中必须增加:<PROPERTY name=”hostname” value=”syfr12″/>
附录2:logger.conf
<?xml version=”1.0″ encoding=”UTF-8″ ?>
<!DOCTYPE log4j:configuration SYSTEM “log4j.dtd”>
<!–
Logger configuration file. See http://logging.apache.org/log4j/docs/documentation.html
–>
<log4j:configuration xmlns:log4j=’http://jakarta.apache.org/log4j/’>
<!–
NONERRORS console appender. Only messages with level less than WARN are logged
to standard output. Only the message is logged, not the level.
–>
<appender name=”NONERRORS” class=”org.apache.log4j.ConsoleAppender”>
<param name=”target” value=”System.out”/>
<layout class=”org.apache.log4j.PatternLayout”>
<param name=”ConversionPattern” value=”%m%n”/>
</layout>
<filter class=”org.apache.log4j.varia.LevelRangeFilter”>
<param name=”acceptOnMatch” value=”true”/>
<param name=”levelMin” value=”DEBUG”/>
<param name=”levelMax” value=”INFO”/>
</filter>
</appender>
<!–
ERRORS console appender. Only messages with level greater than or equal to
WARN are logged to standard error.
–>
<appender name=”ERRORS” class=”org.apache.log4j.ConsoleAppender”>
<param name=”target” value=”System.err”/>
<layout class=”org.apache.log4j.PatternLayout”>
<param name=”ConversionPattern” value=”%-5p – %m%n”/>
</layout>
<filter class=”org.apache.log4j.varia.LevelRangeFilter”>
<param name=”acceptOnMatch” value=”true”/>
<param name=”levelMin” value=”WARN”/>
<param name=”levelMax” value=”FATAL”/>
</filter>
</appender>
<!–
Performance appender. Output goes to a file.
–>
<appender name=”PERFORMANCE-APPENDER” class=”org.apache.log4j.FileAppender”>
<!–
To change the location of the performance log, change the value in the
“file” parameter below.
–>
<param name=”file” value=”/d01/app/retail/retl/12.0.1/rfx/tmp/rfx.log”/>
<layout class=”org.apache.log4j.PatternLayout”>
<param name=”ConversionPattern” value=”[%d]%m%n”/>
</layout>
</appender>
<!–
RETL logger. Output goes to both NONERRORS and ERRORS. The level is set to
INFO, but if RFX_DEBUG is set, the level is changed to DEBUG.
–>
<logger name=”retek.retl”>
<level value=”INFO”/>
<appender-ref ref=”NONERRORS”/>
<appender-ref ref=”ERRORS”/>
</logger>
<!–
Performance logger. Turn off additivity so that performance information
is not logged to retek.retl.
–>
<logger name=”retek.retl.performance” additivity=”false”>
<level value=”WARN”/>
<appender-ref ref=”PERFORMANCE-APPENDER”/>
</logger>
</log4j:configuration>
首先谈一下BPEL和WSDL(Web Service Design Language)的区别,WSDL只是定义接口参数,不会定义如何实现接口,而BPEL不仅有自己的接口定义(也是一个WSDL文件,包括输入参数、方法操作名、返回参数),BPEL会定义如何调用其他服务的接口来实现自己的接口。简单地说,BPEL通过流程编程将各种接口组合在一起,其目的在于提供一个“集成了各种接口”的接口。
BPEL扩展了WSDL以便以抽象方式提供和使用Web服务。这样可以发挥WSDL的重要长处之一,即能够将合成时所需的抽象消息和端口信息与调用时所需的物理绑定和地址详细信息分离。
WSDL中的XML语义:
1. Types指定在后面的Message中需要的类型。
2. Message可以理解为函数中的参数,只不过如果一个函数如果有多个参数的时候应该把这些参数定义到一个Message中而不能定义为多个Message。
3. ProtTypes就是一个服务接口,定制在你的服务中应该包含哪些操作。
4. Operations指的是操作,也就是对应每个接口中的函数名称,每一个Operations都可以有input,output,fault等,这些参数能够来自于Message。
5. Bindings定义通讯方式,每一个PortType对应一个Binding,然后在Binding中进一步细化设置每一个操作,进而每一个input,output,fault的传出方式,编码方式等。
6. Service就是将binding与对应的地址相关联,这样就知道什么地址上的服务能够做哪些事了。
一、JDeveloper开发环境配置:
在JDEVELOPER的菜单上点击View->Connection Navigator
配置应用服务连接:
1. 右键点击Application Server选择New Application Server Connection(或直接双击Application Server),在welcome窗口直接点击下一步
2. 在下面窗口的Connection Name窗口输入有意义的连接名称,Connection Type选择Oracle Application Server 10g 10.1.3(具体依JDeveloper的版本而定,这里使用的是JDev10.1.3.1)
3. 点击下一步,输入登陆BPEL服务器的用户名和密码(默认用户名是oc4jadmin,密码是welcome1)
4. 点击下一步,如果在第3步的Connection Type选择正确,则OC4J Instance Name字段为home(如果为空则有可能第3步配置错了)。
Connect To: 选Single Instance
Host Name: 填上BPEL服务器的主机名或IP地址
OPMN Port: 填上安装BPEL服务器时设定的应用服务端口号(默认为6003)
配置集成服务连接:
1. 右键点击Intergration Server选择New Integration Server Connection,在welcome窗口直接点击下一步
2. 在Connection Name中输入连接名称
3. 点击下一步,在Connection窗口,Application Server选择刚才创建的应用连接,此时Host Name也自动指定,输入Port Number(默认是8888)
4. 点击下一步,测试,如果测试结果中只有第一项测试成功,则说明端口配置错误。
二、创建一个项目
1. 在JDeveloper窗口菜单中选择File>New
2. 在弹出的新建窗口中选择General->Application
3. 在弹出的新建应用窗口中输入应用名称,其它采用默认
4. 点击“确定”,提示创建“Project”,点“取消”。
5. 右击刚才新建的应用“Application”选择New,在弹出的新建project窗口中选择如下:
6. 点击“确定”,在弹出的“Project Setting”窗口中输入项目名称,在Template中选择“Synchronous BPEL Process”。
7. 点击“finished”,创建项目成功。(可以开始进行开发了!)
三、BPEL项目的发布与测试
右击你所要发布的“Project”,选择Deploy->(你创建的连接)->Deploy to defalult domain.
在完成数据统一之前,我们需要熟悉Oracle 零售系统自带的工具集。并且需要做如下工作。
1. 准备工作
在准备做data convention之前,需要按照上述流程图做好外部系统数据的分析、整理、映射、以及生成平面文件。其中最主要的就是和oracle 零售系统的映射工作。也就是后面会讲到的外部系统数据表的定义工作。
2. 假设条件
Oracle 零售系统的工具集的数据转换通常情况下是会假设所有的待转换的数据都是不需要验证的;你对UNIX环境下的SHELL编程熟悉
数据转换是通过工具集的脚本,以外部系统的为基准,并且通过一个“主程序”脚本,以队列的形式运行的脚本集合。大致分为三类脚本:
1. 主控脚本 DC_LOAD_MAIN.KSH
主控脚本,主要是用来运行其他脚本,也可以把这个脚本看成是一个容器,稍作改动(客户化脚本),就可以用来装米饭,甚至是用来喝汤。当然,主控脚本主要是为下面的段值载入脚本服务,同时,主控脚本还可以运行其他的一些KSH脚本和SQL脚本;另外,我们还可以通过修改脚本,使脚本可以指向任意数量的数据表。
2. 段值载入脚本
段值载入程序通常调用外部数据表创建脚本和数据导入脚本。当然,我们也可以修改段值载入脚本,达到只导入数据,而不创建外部数据表的目的。
3. 外部数据表创建脚本
外部数据表创建脚本通常包含如下要素:外部数据表列定义;目标导入文件(以DAT批处理文件为主);目标导入文件地址以及定义此次导入行为所生成的输出、日志、坏死以及忽略信息;
综上所述,在做数据转换工作中,各脚本的层级关系可以概括如下图A。
下面是整个数据转换所涉及到的功能划分:
1. 核心(Core) DC_LOAD_CORE.KSH
2. 商品架构 DC_LOAD_MERCH.KSH
3. 组织架构 DC_LOAD_WH_ORG.KSH
4. 供应商 DC_LOAD_SUPPLIER.KSH
5. 商品 DC_LOAD_FASHION_ITEM.KSH
————————————————————————————————————————–
————————————————————————————————————————–
1抛出异常以及日志文件的生成都是通过调用单独的一个库文件生成,而全局变量、脚本、数据以及其他的目标定义都是被定义在单独的一个配置文件中:DC_LOAD.CFG。
2.所有的脚本程序都可以在后缀名为*.seq的队列文件中定义脚本程序执行的先后顺序。
3.先导入-后验证,验证程序需要自己写进脚本里面,并且在每段验证程序加上注释。
4.主控脚本可以运行如下脚本
a.其他KSH脚本
b.SQL脚本
c.独立或者是关联成链的RMS中的BATCH程序.
配置文件DC_LOAD.CFG包含了对可执行的KSH脚本、SQL脚本的所有执行路径信息,以及DC_LOAD_MAIN.KSH和段值脚本所产生的日志文件和临时目录的路径信息。
在运行DC_LOAD_MAIN.KSH之前,需要做如下准备工作,才可以成功的运行DC_LOAD_MAIN.KSH
A.建立路径目录
$ chmod 777 Directory_Name
路径 路径名称 路径描述
数据库路径 orclDataDir 用来指定系统数据库路径
数据库日志文件路径 orclLogDir 用来存放外部数据表中生成的日志文件路径
数据文件路径 dataDir 用来存放平面文件的路径
完成数据文件路径 dataCompDir 用来存放已经传输完成的数据的路径
坏死文件路径 badDir 在数据文件传输过程中生成的坏死文件的存放路径
忽略文件路径 dscDir 在数据文件传输过程中生成的忽略文件的存放路径
脚本路径 scriptDir 存放在数据转换过程中所有相关的脚本文件的路径
日志文件路径 logDir 用来存放脚本运行的过程中生成的日志文件
状态文件路径 statusDir 用来存放在整个转换过程完成时生成的.status状态文件。
注意:此路径可以和日志文件路径logDir相同
RMS程序路径 rmsBinDir 存放RMS系统所安装的batch文件
B.定义环境变量
变量名称 描述
connectStr 连接Oracle 数据库的用户名和密码,格式为 username/password
dataExt 文件扩展名定义,默认为 .dat
badExt 文件扩展名定义,默认为 .bad
dscExt 文件扩展名定义,默认为 .dsc
statusExt 文件扩展名定义,默认为 .status
seqExt 文件扩展名定义,默认为 .seq
C.队列文件定义
标签
PGM
KSH以及其他的可执行的脚本文件的文件名;如/$HOME/RETAIL/SCRIPTS/STOREADD.KSH,如果没有路径,则将使用上面配置文件中的路径scriptDir 做为默认可执行脚本的路径
SQL
该标签用来运行SQL脚本;如/$HOME/RETAIL/SCRIPTS/DC_CUSTOMER.SQL,如果没有路径,则将使用上面配置文件中的路径scriptDir 做为默认可执行脚本的路径
RMS
用来执行RMS的BATCH程序。
注意:尽管BATCH程序本身就可以直接运行,但是仍然需要确保BATCH程序是在上面CFG文件中定义的rmsBinDir路径下,除非是调用客户化BATCH程序,那么需要在前面加上客户化程序的完整路径,并且需要加入BATCH程序的控制表:restart_control(prepost情况除外)
>
表示该行客户化定制的信息将显示在屏幕和日志文件中
#
注释掉该行
例子:
[oracle@syfr12 ~]$ vi LOAD_SUPPLIER.seq
#This section will load the supplier information to the RMS tables
>Running LOAD_SUPPLIER.KSH…
PGM load_supplier.ksh
>Loading Supplier Information Completed
#Now Validating Supplier Information
SQL dc_validate_supplier.sql
DC_LOAD.LIB包含以下文件的配置如下FUNCTION
1.checkCfg
被导入程序调用,用来检查DC_LOAD.CFG文件是否存在,并且是否所有的配置信息都已经配置以用来完成整个流程。
2.checkError
将被后面的execPgm和execSql 两个Function调用,用来在执行完在队列文件中定义的脚本后,对流程的状态进行检查并且将相关信息写入日志文件
3.checkFile [-e\–x\-r\-s\-x]
检查文件是否符合载入要求
-x 检查是否可执行
-e 检查文件是否存在
-r 检查文件是否可读
-s 检查文件的大小
1)对于平面文件(*.dat)和(*.seq),需要检查文件的是否存在、文件大小、还有是否可读;
2)对于坏死文件(*.bad)、可忽略文件(*.dsc)以及状态文件(*.status),仅仅检查文件是否存在;
4.getAvailThread
从restart_program_status表中取状态为”ready for start”,字段thread_val的最小值
SELECT MIN(T.THREAD_VAL)
FROM RESTART_PROGRAM_STATUS T
WHERE 1=1
AND T.PROGRAM_STATUS = ‘ready for start’
AND T.PROGRAM_NAME = ‘posupld’;
5.refreshThreads
把已经成功完成的流程的状态转换成为”ready for start”;
UPDATE RESTART_PROGRAM_STATUS T
SET T.PROGRAM_STATUS = ‘ready for start’
WHERE 1 = 1
AND T.PROGRAM_STATUS = ‘completed’
AND T.PROGRAM_NAME = ‘posupld’;
6.execPgm
在checkFile函数返回值为0的时候,被队列文件中定义的主控脚本以及其他的可执行脚本来调用,并且将生成日志文件。
7.execSql
在checkFile函数返回值为0的时候,通过定义sqlplus –s执行SQL脚本,并且通过环境变量connectStr来连接数据库。并且生成日志文件。
8.execRms
Restart_control的作用:
DD_RESTART_RECOVERY调用RESTART_CONTROL表,来决定当前的BATCH PROGRAM的driver以及thead 数量。
该函数会首先检查要运行的batch 文件是否存在以及是否可执行,然后会检查该batch文件的类型。
类型可以分为下面三种:
1) Prepost
2) File类型
3) Table类型
A.准备工作
创建环境变量
>vi /home/oracle/.bash_profile
PATH=$PATH:$HOME/external/scripts #视具体情况而定
Export PATH
B., 运行脚本
> dc_load_main.ksh –q <sequence-name>
> dc_load_core.ksh
————————————————————————————————————————–
————————————————————————————————————————–
有关具体细节的开发,参看一下图B。就可以知道大概的流程了。
在做好外部系统的分析、整理、生成DAT文件之后,通过DBC_CREATE_SUPS_TAB.SQL、DBC_CREATEC0SUP_ADDR_TAB.SQL、DBC_CREATE_SUP_IMORT_ATTR_TAB.SQL脚本来创建外部系统数据表DC_SUPS、DC_SUP_ADDR、DC_SUP_IMORT_ATTR。这些表用来存放从DAT文件中抽取出来的外部系统数据。然后再运行dc_load_supplier.ksh这个process,通过前面的准备工作,我们已经可以顺利并且成功运行dc_load_supplier.ksh脚本啦。那么,这样就可以把上面的表中的信息导入到RMS系统中的SUPS、ADDR、SUP_IMPORT_ATTR表中。至此,整个data convention结束。
————————————————————————————————————————–
RMS系统中有很多的BATCH Program,在当前的测试阶段,由于Batch program本身就具有可执行性,但是由于在跑完一个batch只有我们需要手工到后台数据库中去改状态(相当于上面的库函数DC_LOAD.LIB中的refreshThreads以及getAvailThread两个函数的功能)。APPWORX本身就集成了Oracle Retail的相关的batch来做成的chain,其中也都是用shell编程来达到流程控制的目的。我想,之所以用APPWORX,是因为它的窗口化,而不是上面所做的代码化(我们需要在Linux下运行命令脚本)。
————————————————————————————————————————–
RDW-Microstrage BI Server 安装指南
在虚拟机(mstsc /v: 192.168.11.81 /console)上安装和配置 MicroStrategy IS 说明
1.安装 MicroStrategy IS
1.1 把MicroStrategy安装介质上传到虚拟机上,在Windows下按通常的安装步骤安装完毕即可。
2.创建 MicroStrategy IS
2.1 选择开始->程序->MicroStrategy->Configuration Wizard
2.1.1 创建元数据库资料和统计表
点击Next>
在弹出的对话框中,选择默认,点击Next>
第一次新建ODBC数据源时,点击New…
在弹出的对话框中,选择默认选项:Microstrategy ODBC Oracle Wire Protoclo,点击Next>
建立DSN (输入DSN Name=MstrDS、Host Name=syfr12、Port Number=1521、SID=RDW)
为了测试是否跟RDW数据库连接成功,可以点击Test…,在弹出的对话框中输入登录RDW数据库的帐户。(such rdw12dev)
PS.若弹出对话框显示错误,查看hosts文件中是否加入:192.168.11.41 syfr12
新建ODBC DSN后,再输入User Name和Password,点击Next>
在弹出的对话框中,默认Script地址,点击Next>
点击Finish,弹出创建元数据库资料和统计表成功的信息对话框
2.1.2 创建MicroStrategy IS
点击Next>
在弹出的对话框中,选择之前建立的ODBC DSN及用户名密码信息,点击Next>
在弹出的对话框中,因第一次创建Server,不能输入’Administrator’管理员的密码,留空待后面重置,直接点击Next>
选择创建新的Server,可修改Server Name(默认带计算机名称):Mstr-SERVER,点击Next>
弹出创建新的Server的提示,并询问是否把新建立的Server设置成为Deault,点击Yes
在弹出的对话框中,提示输入Server Port Number,默认即可,点击Next>
点击Finish,弹出创建MicroStrategy Intelligence Server成功,并询问是否现在启动,点击Yes
3.MicroStrategy Server 说明
3.1 启用MicroStrategy Server路径:开始->程序->MicroStrategy->Tool->Service Manager
3.2 MicroStrategy IS启动后,会在Windows桌面右下角显示一个图标,双击此图标,在弹出的界面上可以设置对应Server的信息
3.2.1 安装的Server有:MicroStrategy Intelligence Server、MicroStrategy Listener、MicroStrategy Enterprise Manager Data Loader
3.2.2 点击Start/Stop/Restart进行对MicroStrategy Server进行启动/停止/重新启动
3.2.3 点击Options…按钮,对MicroStrategy Server设置启动类型及帐户
3.3 修改用户(包括上面第一次创建时产生的’Administrator’管理员用户)密码:开始->程序->MicroStrategy->Desktop->Desktop->Tools->Change Password…
简单备份指南
一、完整冷备份
1、先停止所有的应用
2、停止所有的数据库服务
1,2 可参考:
http://blog.retailsolution.cn/blog/index.php/retail-startup-shutdown-1
3、停止appworx
请参考:AppWorx安装指南 2.4
http://blog.retailsolution.cn/blog/index.php/appworx%e5%ae%89%e8%a3%85%e6%8c%87%e5%8d%97
3、完整的冷备份(其实就是打包)
以root用户登陆Secure CRT ,执行命令
cd /d01
mkdir bak
tar -zcvf /d01/bak/appYYYYMMDD.tar.gz /d01/app
二、局部备份&升级(比如RPM 应用)
1、先停止RPM的应用
2、备份
以root用户登陆Secure CRT ,执行命令
cd /d01/app/retail/rpm
mkdir bak
tar – zcvf /d01/app/retail/rpm/bak/rpmYYYYMMDD.tar.gz /d01/app/retail/rpm
3、进行升级
4、升级后测试,如果一切正常则OK, 否则恢复/d01/app/retail/rpm 目录
1,3,4 可参考 RPM 安装日志 :
http://blog.retailsolution.cn/blog/index.php/rpm12-install-guide
现在已经将SendPaymentTermsToRetek bpel process 成功部署在bpel server上,但是运行bpel process的时候出错,错误信息如下:
<messages><input><PublishPaymentTermsToRetek_Produce_Message_InputVariable><part xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" name="RibMessages"><RibMessages xmlns:ns1="http://xmlns.oracle.com/pcbpel/adapter/db/top/PublishService" xmlns="http://xmlns.oracle.com/pcbpel/adapter/db/top/PublishService">
<ns1:publishetname>etEXTPayTerm</ns1:publishetname>
</RibMessages>
</part></PublishPaymentTermsToRetek_Produce_Message_InputVariable></input><fault><remoteFault xmlns="http://schemas.oracle.com/bpel/extension"><part name="code"><code>null</code>
</part><part name="summary"><summary>file:/home/oracle/product/10.1.3.1/OracleAS_1/bpel/domains/default/tmp/.bpel_SendPaymentTermsToRetek_1.2_c4cc1f9b57c1a8f1232822f7db772ba9.tmp/PublishPaymentTermsService.wsdl [ Produce_Message_ptt::Produce_Message(RibMessages) ] – WSIF JCA Execute of operation ‘Produce_Message’ failed due to: Adapter Framework unable to create outbound JCA connection.
file:/home/oracle/product/10.1.3.1/OracleAS_1/bpel/domains/default/tmp/.bpel_SendPaymentTermsToRetek_1.2_c4cc1f9b57c1a8f1232822f7db772ba9.tmp/PublishPaymentTermsService.wsdl [ Produce_Message_ptt::Produce_Message(RibMessages) ] – : The Adapter Framework was unable to establish an outbound JCA connection due to the following issue: ORABPEL-12133
ERRJMS_JMS_EXCEP.
Unable to create JMS connection due to JMS exception.
Please examine the log file to determine the problem.
[Caused by: Could not create session, connection may be dropped]
; nested exception is:
ORABPEL-12511
Adapter Framework unable to create outbound JCA connection.
file:/home/oracle/product/10.1.3.1/OracleAS_1/bpel/domains/default/tmp/.bpel_SendPaymentTermsToRetek_1.2_c4cc1f9b57c1a8f1232822f7db772ba9.tmp/PublishPaymentTermsService.wsdl [ Produce_Message_ptt::Produce_Message(RibMessages) ] – : The Adapter Framework was unable to establish an outbound JCA connection due to the following issue: ORABPEL-12133
ERRJMS_JMS_EXCEP.
Unable to create JMS connection due to JMS exception.
Please examine the log file to determine the problem.
[Caused by: Could not create session, connection may be dropped]
Please examine the log file for any reasons. Enable DEBUG logging in the BPEL Console.
</summary>
</part><part name="detail"><detail>null</detail>
</part></remoteFault></fault></messages>
domain.log日志中记录:
<2008-10-20 11:11:35,249> <DEBUG> <default.collaxa.cube.ws> <JMSAdapter::Outbound> JMSConnectionFactoryFactory_getConnectionFactory: looking up ‘com.seebeyond.jms.client.STCTopicConnectionFactory’
<2008-10-20 11:11:35,250> <DEBUG> <default.collaxa.cube.ws> <JMSAdapter::Outbound> JMSConnectionFactoryFactory_getConnectionFactory: JNDI Naming exception when looking up com.seebeyond.jms.client.STCTopicConnectionFactory: com.seebeyond.jms.client.STCTopicConnectionFactory not found
<2008-10-20 11:11:35,250> <DEBUG> <default.collaxa.cube.ws> <JMSAdapter::Outbound> JMSConnectionFactoryFactory_getConnectionFactory: Will now try to determine if the ‘ConnectionFactoryLocation’ com.seebeyond.jms.client.STCTopicConnectionFactory is a loadable Java class. If so, the above exception can be ignored.
<2008-10-20 11:11:35,250> <DEBUG> <default.collaxa.cube.ws> <JMSAdapter::Outbound> JMSConnection_init: Using non-XA TopicConnectionFactory
<2008-10-20 11:11:35,273> <DEBUG> <default.collaxa.cube.ws> <JMSAdapter::Outbound> Error while creating managed connection:
<2008-10-20 11:11:35,275> <DEBUG> <default.collaxa.cube.ws> <JMSAdapter::Outbound>
ORABPEL-12133
ERRJMS_JMS_EXCEP.
Unable to create JMS connection due to JMS exception.
Please examine the log file to determine the problem.
在metalink上提了TAR,现在还没有解决,请高手帮忙.
RETL 12 下载
1、登陆 http://edelivery.oracle.com
Product Pack 和 Platform 选择如下:
2、选择 Oracle Retail Data Warehouse(RDW) Media Pack
3、选择RETL12
2、 选择: 补丁程序和更新程序->高级搜索
3、选择产品或系列
输入 RETL , 按[查找] , 在被选的产品名称前打√
4、版本选择:Oracle Retail 12
patch类型选择:Patchset/Minipack
其他:全部默认
5、点[查找] 得到搜索结果:
上述结果中,RETL12.0.1 和 RETL12.0.1.1 都是R12版本上的升级包.
本文简要介绍Retail系统中的批处理程序,批处理流程,appworx for retail
一、名词解释
1) 批处理程序: Retail中的批处理程序(俗称batch 或者batch program) , 主要用途是:
1.1) 处理大批量的业务数据
1.2) 和外部系统做接口
1.3) 执行内部数据同步(在一个模块建立数据,同步到另一模块)和维护(自动批量更新)
批处理程序的优点如下:
a)可以快速、高效的处理大批量的数据。
b)可以更快的处理一些在线更新动作,而且对系统性能影响更小。
2)批处理流程:Retail中的批处理流程(batch process) 指得是多个批处理程序按照一定的顺序运行形成一个流程。整个执行过程不和用户进行交互。批处理流程一般安排在系统比较闲的时候定时运行。
3)批处理调度软件:也称为批处理计划软件,用于协调多个批处理程序按照一定的顺序和限制条件执行,如果其中一个批处理程序运行时发生错误,管理员必须及时更正错误,并手动的从新运行发生错误的程序。批处理调度软件在市场上很多,比较有名的就是appWorx.
参考资料:
1、RMS框架下每个batch的用途请参考:
/d01/app/retail/rms/12.0.1/rms_1201_docs/Operations Guide/Volume 1 – Batch Overviews and Designs
2、如果想了解Retail 系统 下的各中批处理程序应该按照怎样的流程运行,请参考: 《merch-1203-batchschedule.pdf》
二、appworx for Retail 学习指南
appworx 是一个非常优秀的的批程序调度软件,这个软件是由奥大利亚的U4公司开发的。在调度软件市场上享有盛誉。从2000年开始U4公司就在Appworx产品上与Retak产品进行合作。已经为Retak开发了大量的批处理流程模版。利用这些现成的模版可以大大节省Oracel Retail 项目上批处理流程管理的开发和部署时间。
参考资料:
1、有关appworx的概要介绍,请参考《Appworx学习指南》
2、有关appworx的安装,请参考《AppWorx安装指南》
3、有关appworx的流程开发,请参考《Appworx流程开发指南》
4、有关appworx for Retail的安装配置和应用,请参考《Appworx For Retail 应用指南》
其他参考资料:
1、appworx for retail 白皮书 :wp056_122006_oracle_retail
2、appworx for retail 实施指南:retek_template_implentation_guide_se_3
简要介绍遗留系统数据整理的工作内容.
问题的提出:
1、遗留系统的基础数据编码统一究竟需要统一那些数据?
2、遗留系统统一后的基础数据需要整理成怎样的格式才能利用Retail现有的数据转换工具进行转换后导入到Oracle Retail系统?
数据转换流程:
数据转换工作是极其重要的,将有一支专门的Team来完成这件事情,我们称为主数据Team,其主要任务有两个:
1)各遗留系统的主数据统一
2)遗留系统的主数据转换导入到Retail 系统。
在数据转换前,主数据实施团队必须已经完成如下事情:
1) 从遗留系统的数据库中抽取需要被转换的数据到平面文件。
2) 进行数据分析、清理、Mapping。
需要被整理的数据包括:
1)快速编码(比如运费类型,运费条款,增值税率编码,增值税区域,各种单据类型编码)
2)商品架构
3)组织架构
4)供应商资料
5)商品资料
等等。。。
详情请参考文档《merch-1203-dcog.pdf》merch-1203-dcog
如果要在UNIX系统中安装AppWorx,首先要创建一个用户作为安装和管理A ppWorx系统的用户。本次安装直接采用数据库安装用户oracle。
1) ORACLE版本:Oralce8i(8.1.7),Oracle9i(9.2.03),Oracle 10G
2) Shared_pool_size: 20M
3) 索引和表空间:150M
4) Processes:100个
AppWorx在基于规则的优化模式下,具有更好的性能。如果在一个高负载的情况,必须运行在基于规则的优化模式下。
create user appworx
identified by appworx
default tablespace RETEK_DATA
temporary tablespace TEMP
profile DEFAULT
quota unlimited on lob_data
quota unlimited on retek_data
quota unlimited on retek_index;
grant select on v_$session to appworx;
grant select on v_$lock to appworx;
grant select on v_$locked_object to appworx;
grant select on v_$sqltext_with_newlines to appworx ;
grant select on V_$SQLTEXT to appworx ;
grant create view to appworx;
grant create procedure to appworx;
grant create trigger to appworx;
grant create table to appworx;
grant create database link to appworx;
ALTER SYSTEM FLUSH SHARED_POOL;
grant execute on dbms_sql to appworx;
grant execute on dbms_pipe to appworx;
grant execute on dbms_lock to appworx;
grant execute on dbms_output to appworx;
grant alter session to appworx;
grant create synonym to appworx;
grant create public synonym to appworx;
grant create session to appworx;
grant create sequence to appworx;
grant create materialized view to appworx;
— Grant/Revoke role privileges
grant developer to appworx;
grant select_catalog_role to appworx;
如果需要DROP用户,需要先Drop 数据库pipe;否则,在你重新安装之前,必须重启数据库。
— 使用 appworx用户运行
DECLARE
ret NUMBER;
BEGIN
dbms_pipe.purge(user|| ‘pipe_master’ );
ret := dbms_pipe.remove_pipe(user|| ‘pipe_master’);
END;
— 使用sys用户运行
ALTER SYSTEM FLUSH SHARED_POOL;
drop user appworx cascade;
本次直接采用数据库客户端
ORACLE_HOME=/d01/app/oracle/product/10.2.0/db_1
export ORACLE_HOME
ORACLE_SID=RETL
export ORACLE_SID
安装AppWorx需要Java 1.4.2及以上的运行环境,如果当前的Java版本不够,或不支持java –jar 运行参数,请重新安装。以下语句可查看JAVA版本。
java -version
在V7子目录下运行如下脚本可完成JAVA的安装,安装到/d01/d01/java
. jinstall.sh
替换/usr/bin/java的符号链接
rm /usr/bin/java
ln –s /d01/d01/java/bin/java /usr/bin/java
以下操作使用用户:oracle
上传安装文件到如下目录:
/d01/d01/AppWorx70
mkdir /d01/app/appworx
cd /d01/app/appworx
mkdir MGMLDRMS
cd MGMLDRMS
ORACLE_HOME=/d01/app/oracle/product/10.2.0/db_1
export ORACLE_HOME
ORACLE_SID=RETL
export ORACLE_SID
PATH=$PATH:$ORACLE_HOME/bin
. /d01/d01/AppWorx70/V7/CDINST.SH
| Server Name | O/S | AppWorx Node | AW Version | Agent Type | Application |
| syfr12 | Linux | MGMLDRMS | 7.0.2 | Master |
Master Installation
AppWorx Linux User: oracle
AppWorx Directory: /d01/app/appworx/MGMLDRMS
Installation Files: /d01/d01/AppWorx70/V7
Master name =MGMLDRMS
Master’s IP address or DNS name = 192.168.11.41
AppWorx’s Oracle Login = appworx
AppWorx Oracle Instance Name (SID) = RETL
Oracle Instance IP or DNS name Address = 192.168.11.41
Oracle Listener Port = 1521
Oracle Version = 102030
Time of start of Virtual day = 00:00
Time Zone = PRC
smtp_host = mail.hand-china.com
smtp_port = 25
smtp_email = xiaojun.shen@hand-china.com
AwComm Port Number = 2136
Master require it’s own RMI server = Y
Apache Web Server installed on this machine = Y
Full path of the Apache Directory = /d01/app/oracleas/OraHome_1/Apache/Apache
Port the web server listens on = 7777
Location of Web Directory = /d01/app/appworx
IP address or DNS name of this computer = 192.168.11.41
Rmi Registry Port Number = 5099
Enable SSL Encryption = Yes
Enable Master/Java Agent SSL Encryption = Y
Firewall installed = N
Enable RmiServer Debug = No
Configuration Files
$AW_HOME /site/awenv.ini
$AW_HOME /data/keyfile.ini
$AW_HOME /web/classes/Options.properties
$AW_HOME /data/Masters.properties
/d01/app/oracleas/OraHome_1/Apache/Apache/conf/httpd.conf
/d01/app/oracleas/OraHome_1/Apache/Apache/conf/appworx.conf
$AW_HOME /jre/bin
在文件$AW_HOME/site/sosite中增加如下脚本:
ORACLE_HOME=/d01/app/oracle/product/10.2.0/db_1
export ORACLE_HOME
ORACLE_SID=RETL
export ORACLE_SID
PATH=$PATH:$ORACLE_HOME/bin
使用appworx用户登录linux,执行如下脚本
. /d01/app/appworx/MGMLDRMS/site/sosite
startso all
apachectl start
使用appworx用户登录linux,执行如下脚本
. /d01/app/appworx/MGMLDRMS/site/sosite
apachectl stop
stopso awcomm
在浏览器中设置192.168.11.41为可信站点,并运行http://192.168.11.41:7777/MGMLDRMS/Intro.html
出现如下界面
点击第一个链接“Start the AppWorx Client”
安装目录(目标目录)缺省的目录就是当前目录,所以一定到准备放置AppWorx 的目录去执行安装脚本。不要到安装程序所在的目录执行,否则会出现找不到文件或目录的错误。
AppWorx Installaton directory [/d01/appworx/MGMLDRMS] –目标目录
CDROM mount point [/d01/d01/AppWorx70/V7] –安装程序目录
java -jar AxUnzip.jar -v AWFILES.zip data/awinstall.pl data/rainstall.pl data/inst.pl data/timezone_list.dat data/eng.msg
出现错误,不能识别参数。
请检查java版本,必要的时候,安装更新的版本。
cat LB_lxr73.Z|uncompress|tar xvf – c/gethost c/myzone c/change_awenv c/awnetex c/perlbash: uncompress: command not found
出现错误,不能识别参数。
使用root 用户执行
ln -s /usr/bin/gunzip /usr/bin/uncompress
需要给数据库用户足够的权限去创建和执行程序。
系统安装文档或安装目录下的SYSDBA.SQL文件中提供的权限清单不够。
具体权限请参考 2.2创建Oracle数据库用户
需要安装完整版的数据库客户端,简化版或普通用户版的客户端没有sqlldr命令。
点击“Start the AppWorx Client”,出现Client.jnlp的源程序,而不是执行Client.jnlp。
在本机保存Client.jnlp,使用本机最新版的javaws.exe打开,并保存这种打开方式。
如以上方法还不能解决,请安装Opera浏览器。
如果数据库服务器与AppWorx服务器不在同一台主机上,客户端连接主机时会发生如下错误:
Setting classpath
Processing file ../temp/deploy.wsdd
Exception: AxisFault
faultCode: {http://schemas.xmlsoap.org/soap/envelope/}Server.userException
faultSubcode:
faultString: java.net.ConnectException: Connection refused
faultActor:
faultNode:
faultDetail:
{http://xml.apache.org/axis/}stackTrace:java.net.ConnectException: Connection refused
错误原因及解决方法,暂时还没确定。