EBS 11i升级到R12
Posted on July 5, 2010
花了大概一周时间完成了一套11i系统(到12.1.1)的升级,之所以耗费如此多时间,简单归纳了一下大致有以下原因:
- 历史遗留的配置问题(比如用中文做关键词),此类问题导致数据转换错误。
- 客户化(索引,物化视图等)导致升级错误。
- 测试机性能差,耗时颇巨。期间多次由于内存的原因,导致java程序出错。
- 很多R12本身的升级过程中的bug需要处理。
- 部分业务数据升级时出错,可能是旧数据完整性被破坏所致。
- 一些前期工作跳过没错,这本来可以缩短升级过程的一部分排错时间。
- 其他的一些可在升级之前就预先解决的问题。
整体上说,机器的性能问题很关键,有些步骤运行动辄数个小时,有些是升级程序有优化余地而事先没有发现,这些一般都在metalink上有了解决办法。对于升级,很多人第一反应就是克隆环境升级,然后导入最新数据并进行主备切换,其实这种方案对于多数企业而言很难,因为升级过程中会修改大量的表结构,甚至很多应用级别的调整,我很怀疑有哪家公司能够做到对Oracle EBS的数据结构了解的如此洞彻明晰,至少国内没有。这是我第一次对11i进行升级,积累了一些经验,在此分享。
升级前的准备
升级前的准备包括三方面,一个是应用本身的准备工作,这个在升级手册里已经详细说明;另一个就是对服务器性能做一个充分的评估,确保整个升级过程不会跳到deadline之外;还有一个,就是将所有能提前做的工作都做好,比如invalid objects,韩语分词补丁,OLAP升级等等,这些在数据库升级阶段不是必须的,但是EBS升级时却是无法直接忽略的步骤,此外可靠的网络连接也很重要,patching过程中断线后虽然可以继续,但是光启动就要花不少时间。
升级过程中的注意事项
这里依旧按照升级步骤来进行说明。
- Disable AOL Audit Trail (conditional)
关闭所有审计功能,包括标准功能提供的,以及客户自行在DB级别上添加的。 - Shut down application tier listeners and concurrent managers (required)
- Migrate database to at least Oracle10g Release 2 (conditional)
这一步之前已经做了,考虑到停机时间,分两步走是比较合适的方案。 - Update init.ora with upgrade parameters (required)
同上,升级数据库时已经基本做好了。 - Disable custom triggers, constraints, and indexes (conditional)
注意:最好将所有直接关联到标准表的客户化索引和Materialized View都drop掉,这很可能和升级程序有冲突。比如客户化索引,很可能升级过程中就会创建同样的索引(不同名),也可能修改表结构,这些操作都可能引起错误。 - Drop MRC schema (conditional)
- Back up the database (recommended)
- Ensure that Maintenance Mode is enabled (required)
在11i环境中启用维护模式,如果数据被一些外部程序所用,则最好在升级期间停掉。 - Apply AD 12.1.1 upgrade driver (required)
先取消appltest的环境变量(.profile),然后source新的APPS_host.env,该文件在新的$APPL_TOP目录下,如apps/apps_st/appl/APPSTEST_erptest.env。
adpatch 时可能会报如下错误:ld.so.1: adpatch: fatal: .../apps/tech_st/10.1.2/lib/libclntsh.so.10.1: wrong ELF class: ELFCLASS64
原因是如下错误所导致的:
进 apps/tech_st/10.1.2/lib32 目录ls -lldflags -> /d4/R12/ab/apps/R1211XB9/apps/tech_st/10.1.2/lib/ldflags
ldflags链接到了一个不存在的文件上,这是R12本身的bug,解决办法:
$ rm $ORACLE_HOME/lib32/ldflags $ ln -s $ORACLE_HOME/lib/ldflags $ORACLE_HOME/lib32/ldflags
然后 $ORACLE_HOME/bin/genclntsh -32 重新生成libclntsh.so.10.1。
注意:$ORACLE_HOME请指向10.1.3目录,否则在Post-Upgrade还得一番折腾。 - Run the American English upgrade patch driver (required)
这一步耗时最长,问题也最多。在我的测试环境中,因为机器内存小(有两套克隆环境),patching 过程经常报java错误,需要留意检查adworkxxx.log日志,若发现错误可以尝试用adctrl去failed该job等待其重新处理即可通过。该步骤会把测试机拖得非常慢,每个adworker会带出一个java进程,占用内存非常大,所以将worker设定为一个比较小的数值会更好,比如8个,等之后运行sql等占用内存较少的步骤时,再将adworker数目调大。错误:
CREATE OR REPLACE SYNONYM APPS.CST_ACCRUAL_ACCOUNTS FOR BOM.CST_ACCRUAL_ACCOUNTS AD Worker error: The following ORACLE error: ORA-00955: name is already used by an existing object
同义词和一个视图名称一样了。这个错误很低级,我的解决办法是 DROP VIEW APPS.CST_ACCRUAL_ACCOUNTS。
错误:
A database error occurred: ORA-24816: Expanded non LONG bind data supplied after actual LONG or LOB column The error occurred while executing the following statement: INSERT INTO FND_SEED_STAGE_ENTITY (SEQ, CONFIG_ID, TOP_ENTITY_SEQ, LAST_DB_UPDATED_BY, LAST_DB_UPDATE_DATE, LAST_FILE_UPDATED_BY, LAST_FILE_UPDATE_DATE, ACTION, EXEC_STATUS, COMMIT_FLAG, BIND_VAR_METADATA, PARENT_PK_VALUE ,BIND_VALUE0 ,BIND_VALUE1 ,BIND_VALUE2 ,BIND_VALUE3 ,BIND_VALUE4 ,BIND_VALUE5 ,BIND_VALUE6,BIND_VALUE7 ,BIND_VALUE8 ,BIND_VALUE9 ,BIND_VALUE10 ,BIND_VALUE11 ,BIND_VALUE12 ,BIND_VALUE13 ,BIND_VALUE14 ,BIND_VALUE15 ,BIND_VALUE16 ,BIND_VALUE17 ,BIND_VALUE18 ,BIND_VALUE19 ,BIND_VALUE20 ,BIND_VALUE21 ,BIND_VALUE22 ,BIND_VALUE23 ,BIND_VALUE24 ,BIND_VALUE25 ,BIND_VALUE26 ,BIND_VALUE27 ,BIND_VALUE28 ,BIND_VALUE29 ,BIND_VALUE30) VALUES (:seq, :config_id, :top_entity_seq, NULL, NULL, NULL, NULL, 'IGNORE', '0', NULL, :bvar_metadata, :parent_pk_value ,:bind_value0 , :bind_value1 ,:bind_value2 ,:bind_value3 ,:bind_value4 ,:bind_value5 ,:bind_value6 ,:bind_value7 ,:bind_value8 ,:bind_value9 ,:bind_value10 ,:bind_value11 ,: bind_value12 ,:bind_value13 ,:bind_value14 ,:bind_value15 ,:bind_value16 ,:bind_value17 ,:bind_value18 ,:bind_value19 ,:bind_value20 ,:bind_value21 ,:bind_va lue22 ,:bind_value23 ,:bind_value24 ,:bind_value25 ,:bind_value26 ,:bind_value27 ,:bind_value28 ,:bind_value29 ,:bind_value30)
旧的NLS_LANG是American_America.ZHS16GBK,新的NLS_LANG是American_America.UTF8(这是rapidwiz默认赋值的),如果在安装就设置NLS_LANG和旧的一致,则不会出现问题,但是也无法转换form等编码了。
解决办法:用另一用户登录,修改NLS_LANG,手工执行fndload,然后adctrl用隐藏选项8来跳过该步骤。错误:
如果升级数据库时没有升级OLAP,则会出现一个OLAP相关的错误,此时需要升级OLAP到64位。也可以通过重建AW来解决:exec dbms_aw.execute('aw delete zpb.zpbcode') exec dbms_aw.execute('aw delete zpb.zpbdata') exec dbms_aw.execute('aw delete zpb.zpbannot') @appl_top/zpb/12.0.0/patch/115/SQL/zpbmakeaws.sqlNote:
EPB AW’s Cannot Be Attached Or Do Not Exist [ID 795247.1]错误4:
eamsnupd.sql 步骤出错,此步进行前需要预先设置好Installed Base中相关参数和配置文件。
Note:
Enterprise asset Management (EAM) Upgrade Notes to R12 – Integration and Licence [ID 884201.1]注:自R12起,IB和eAM将紧密集成。Oracle 真应当将这部分内容写到升级文档中,不了解Installed Base就尝试升级是个悲剧。
phase=A232 eamdffup.sql出错:
sqlplus -s APPS/***** @.../apps/apps_st/appl/eam/12.0.0/patch/115/sql/eamdffup.sql DECLARE * ERROR at line 1: ORA-06501: PL/SQL: program error ORA-06512: at "APPS.FND_FLEX_DSC_API", line 1626 ORA-06501: PL/SQL: program error ORA-06512: at "APPS.FND_FLEX_DSC_API", line 298 ORA-01403: no data found ORA-06512: at line 177
仔细检查问题sql,发现由以下数据引起的:
SELECT * FROM fnd_descr_flex_contexts_tl f WHERE f.application_id = 426 AND f.descriptive_flex_context_code IN ('PE', 'PG');解决办法:将弹性域名称从中文(能源计量:电能/能源计量:气体)修改为英文。
phase=A250 apilnupg.sql有严重的性能问题,1天都跑不完
解决办法:create index AP_INVOICE_DISTRIBUTIONS_N25 on AP_INVOICE_DISTRIBUTIONS_ALL(PARENT_REVERSAL_ID);
Note:
R12 : Performance Issue While Runing apilnupg.sql (Upgrade to 12.1.1) [ID 942694.1]phase=A260 appdstln.sql 报错
sqlplus -s APPS/***** @.../apps/apps_st/appl/ap/12.0.0/patch/115/sql/appdstln.sql &un_ap &batchsize 7 16 DECLARE * ERROR at line 1: ORA-01400: cannot insert NULL into ("AP"."AP_PAYMENT_HIST_DISTS"."INVOICE_DISTRIBUTION_ID") ORA-06512: at line 38解决办法:修改AP_PAYMENT_HIST_DISTS.INVOICE_DISTRIBUTION_ID 和 AP_PAYMENT_HIST_DISTS.AMOUNT 允许为空,找到那些为空的数据查明原因。正式环境升级时应当避免该情况发生。
注:这其实不是真正意义上的“解决”办法,关键是找到哪些数据有问题,为什么有问题。phase=A322 csxruprf.sql 报错
sqlplus -s APPS/***** @.../apps/apps_st/appl/cs/12.0.0/patch/115/sql/csxruprf.sql DECLARE * ERROR at line 1: ORA-20002: ORA-20001: -28102-ORA-28102: policy does not exist. ORA-06512: at line 146
解决办法:
SELECT nvl(sr_agent_security, 'XXXX') FROM cs_system_options;
如果查询结果为ANONE,那么它认为已经创建policy,此处只需要生效即可,而实际上系统中并未存在这些policy。通过手工执行相关sql,并跳过该job继续。
phase=A327 FNDFFVGN 报错
.../apps/apps_st/appl/fnd/12.0.0/bin/FNDFFVGN &ui_apps 0 Y 2 401 'MTLL' 'MTL_ITEM_LOCATIONS_KFV' 'Y' Log filename : .../apps/apps_st/appl/admin/TEST/log/l9017672.req Report filename : .../apps/apps_st/appl/admin/TEST/out/o9017672.out Segmentation Fault - core dumped AD Worker error: The above program failed with error code -117. See the AD Worker log file and/or the program log file for details.
解决办法:这个只是编译弹性域,可以跳过该步骤,应用起来后重新编译弹性域。
- Run the NLS upgrade patch driver (conditional)
- Apply latest product patches (required)
- Synchronize NLS and American English product patches (conditional)
- Disable Maintenance Mode (required)
- Reset init.ora parameters (required)
数据库升级时已经做了 - Back up Oracle E-Business Suite (recommended)
- 出错
FRM-30064: Unable to parse statement select upet.type_name EPC_type_name, upec.name category_name, upet.type_id, upec.category_id
from mgd_idencoding_category upec,
mgd_idencoding_type upet
where upec.category_id = upet.category_id
and ((NVl(upet.partition_value,0)= 0 and upet.category_id = 1 ) or upet.category_id <> 1)
order by upec.category_id,type_name.
ORA-00942: table or view does not exist
Record Group EPC_RULE_RG
Form: WMSLABEL
FRM-30085: Unable to adjust form for output.
解决办法:这个用不到,当作成功继续下一步。
- 出错
.../apps/tech_st/10.1.2/bin/rwconverter userid=APPS/***** source=.../apps/apps_st/appl/xtr/12.0.0/reports/ZHS/XTRTMBLT.rdf dest=.../apps/apps_st/appl/admin/TEST/out/tmp001.rdf stype=rdffile dtype=rdffile overwrite=yes batch=yes compile_all=yes ld.so.1: rwconverter: fatal: librw.so: open failed: No such file or directory Killed ERROR [code=-119] generating report "XTRTMBLT.rdf" from input file .../apps/apps_st/appl/xtr/12.0.0/reports/ZHS/XTRTMBLT.rdf
是编译rdf的程序有问题,参考文档:
On R12.1.1/Solaris Platform , Generating Oracle Reports Files failed on : " ld.so.1: rwconverter: fatal: librw.so: open failed: No such file or directory", How to get a Potential quick Solution ?. [ID 1067786.1]
标准功能的升级并不难,虽然中途有很多问题,但是整体上没有多大难度(事实上这世界上的事情只有烦的,没有难的)。最耗精力和时间的,估计反而是那些凌乱的客户化应用。在ERP项目实施过程中,虽然每个人都知道文档的重要性,但是数年下来,回过头来整理时,往往会发现很多文档消失不见,或者有文档但是形同于无。这些是应用升级后需要耗费时间的地方。
对于客户化应用的升级,没有标准答案。
Related Posts
» Filed Under E-Business Suite
Print This Post
Comments
Leave a Reply
