6.OAM及系统管理
2014年9月13日
20:40
参考资料:
1.Oracle Applications System Administrator's Guide - Configuration
http://download.oracle.com/docs/... acrobat/120sacg.pdf
2.Oracle Applications System Administrator's Guide - Maintenance
http://download.oracle.com/docs/... acrobat/120samg.pdf
3.Oracle Applications System Administrator's Guide - Security
http://download.oracle.com/docs/... acrobat/120sasg.pdf
4.Oracle 11i System Administrator Fundamentals
OracleApplicatinons Manager (OAM) 是一个 R12 的GUI管理工具,通常感兴趣的地方有
site map
dashboard
checkingpatch applied
runautoconfig
OAM的内容丰富。Oracle对GUI管理工具也在不断改善,所以值得去看,尝试使用。
=======================
R12 8-系统管理
-----------------
系统管理通常不是 DBA 的职责,另有专人负责,不过我觉得DBA 了解基本的内容也是需要的。一方面在
自己学习的过程中,方便学习。比如说要开发一个custom的concurrentprogram,写好
程序后你也要会将它连到R12中,这就需要system administration的知识。
另外,在performancetuning 的过程中, 如果要给用户一个好的体验,system administration
方面的知识也很重要,比如说concurrent manager。如果只是看 CPU/Memory 又或者 数据库性能,
你可能只是看到系统很忙,资源不够,不过,如果你熟悉concurrent manager, 你还可以看看
processesnumber that the concurrent manager defines, what's the workshifts ,
what'sthe cache size . 另外, 还可以看看有什么负责purge 过期数据的concurrent request有没有
在系统schedule。这些东西都会影响系统性能,影响用户的体验。
下面列出一些我觉得重要的systemadmin 方面的知识,具体的内容可参考上面列出的参考资料。
1.Security 方面的内容:
这包括function security,responsibility,data group,data security 的概念。
OracleApplications 里面的security 的结构大致如下:
FND user=> responsibility => request group
=> menu => function
=> menu=> function
=> data group =>applications <=> Oracle ID =>tables
||
formsand programs
2. 有关user managment 方面的内容。
3. 有关profile option 方面的内容。
profileoption 大致相当于程序中的 global variable,它的scope 可以有以下几种:
user level
responsibility level
application level
site level
( Server , Organization level)
它的内容可以在以下表内查看:
fnd_profile_options
fnd_profile_options_tl
fnd_profile_option_values
大量的R12的设置由ProfileOption 决定,所以需要了解。
4. 有关Flexfield 方面的内容。
Flexfields包括如下两种:
-Descriptive Flexfields (DFF) : ATTRIBUTE1 .. n in tables
- KeyFlexfields (KFF) : eg. GL_CODE_COMBINATIONS ( CODE_COMBINATION_ID + SEGMENT1 +...)
5. 有关concurrent manager 方面的内容。
6. 有关printer setup and report generation 方面的内容。
7.Concurrent Processing
2014年9月13日
20:42
参考资料:
1.Oracle Applications System Administrator's Guide - Configuration
http://download.oracle.com/docs/... acrobat/120sacg.pdf
2.Oracle Applications System Administrator's Guide - Maintenance
http://download.oracle.com/docs/... acrobat/120samg.pdf
3.Oracle 11i System Administrator Fundamentals
4.Oracle Applications Developer's Guide
http://download.oracle.com/docs/... acrobat/120devg.pdf
并发处理 (Concurrent process) 和 并发管理器(Concurrent Manager) 是R12中负责
处理批作业 或后台作业的。 用的地方很多,所以需要多花点时间理解。
ConcurrentManager 管理的基础知识,比如 start/stop,output and logfile location 等,
前面已提及。
下面只是列出一些常用的内容,可以帮助理解concurrentmanager。
=====================================================
# 如何从 concurrent request id 找到 Oracle session id (sid) :
很多时候我们需要从concurrent request 的request id 找到对应的
Oraclesession id (sid),可以用下面的方法, 由此我们也可了解
concurrentmanager 对应的 table 结构。
#当前正在运行的 concurrent request:
selectrequest_id, controlling_manager, phase_code
fromfnd_concurrent_requests
wherephase_code='R';
# 根据request id 找到 对应的<controlling_manager>
selectrequest_id, controlling_manager, phase_code
fromfnd_concurrent_requests
whererequest_id = <request_id>;
# 根据 <controlling_manager> 找到对应的<ORACLE_PROCESS_ID>:
selectOS_PROCESS_ID, ORACLE_PROCESS_ID
fromfnd_concurrent_processes
whereCONCURRENT_PROCESS_ID = <controlling_manager>;
# 根据 <ORACLE_PROCESS_ID> 就知道 SID
selecta.sid ,b.spid from v$session a , v$process b
whereb.addr=a.paddr and b.pid = <ORACLE_PROCESS_ID>;
# 另外一种SQL query 方法:
selectsession_id from fnd_concurrent_processes
whereCONCURRENT_PROCESS_ID = <controlling_manager>;
selectsid from v$session where audsid=<session_id>;
===========================================
# 统计 每个program 对应完成的 request 数量:
selecta.concurrent_program_id , b.CONCURRENT_PROGRAM_NAME, count(1)
fromfnd_concurrent_requests a, fnd_concurrent_programs b
wherea.concurrent_program_id = b.concurrent_program_id
group bya.concurrent_program_id,b.CONCURRENT_PROGRAM_NAME;
===============================================
# 列出concurrent program的种类
colLOOKUP_CODE for a10
colmeaning for a60
selectlv.lookup_code, lv.meaning from fnd_lookup_values lv
wherelv.lookup_type='CP_EXECUTION_METHOD_CODE' and language='US' order by 1;
# 列出concurrent program的种类对应的数量
selectlv.meaning , count(*) from fnd_lookup_values lv,
fnd_concurrent_programscp where lv.lookup_type='CP_EXECUTION_METHOD_CODE' and
language='US'and lv.lookup_code=cp.execution_method_code
group bylv.meaning order by 2;
selectcp.enabled_flag,lv.meaning , count(*) cp_count
fromfnd_lookup_values lv,fnd_concurrent_programs cp
wherelv.lookup_type='CP_EXECUTION_METHOD_CODE' and
language='US'and lv.lookup_code=cp.execution_method_code
group bycp.enabled_flag,lv.meaning
order bycp.enabled_flag, cp_count;
==========================================================
#列出正在运行的 concurrent manager processes:
selectCONCURRENT_QUEUE_NAME, control_code, running_processes, max_processes
fromfnd_concurrent_queues
whererunning_processes != 0
========================
# statuscode 对应的解释 <297909.1>
selectlookup_type,lookup_code, meaning from fnd_lookups
wherelookup_type like 'CP_%';
#fnd_concurrent_processes 的 status_code
selectlookup_code, meaning from fnd_lookups
wherelookup_type='CP_PROCESS_STATUS_CODE'
#如何手动停掉正在运行的 Concurrent Request <154688.1>
updatefnd_concurrent_requests set status_code='C',phase_code='c'
whererequest_id=4374195;
#<152763.1> , in that case, set status_code='X'
# checkthe meaning of status_code of requests from the note above
updatefnd_concurrent_requests set status_code='C' ,phase_code='C'
whererequest_id = 2722233;
# TheOracle server process might become runaway.
# findout the sid first to kill it manully if needed.
==================================
#如何在命令行上提交 concurrent request
CONCSUBapps/apps SYSADMIN "System Administrator" SYSADMIN WAIT=N CONCURRENTFND cusupt3 PROGRAM_NAME="custom update 3"
"cusupt3":concurrent executable in $FND_TOP/bin
# 如何trace concurrent program
===================================
metalinknote: 453527.1
1.concurrent program => define => "Enable Trace"
2.Profiles => System => Concurrent:Allow Debugging
3.submit request => Debug Options
# 各种 不同的concurrent programs
ConcurrentProgram 可以用不同的方式构成, 既可以用 shell,PL/SQL, C, JAVA 等
语言,也可以用Oracle Reports,SQL*loader 等工具。下面逐一介绍。
======================================
example1 : shell concurrent program
=======================================
cd$FND_TOP/bin
viWH1TEST.prog
cat./WH1TEST.prog
===========================
#!/bin/ksh
./applvis/apps/apps_st/appl/APPSVIS_mis.env
sqlplusapps/apps@VIS <<EOF
EOF
echo"END"
=========================
chmod +xWH1TEST.prog
### passparameter as separate variable
ln -s$FND_TOP/bin/fndcpesr WH1TEST
然后,在R12中逐一定义如下内容:
concurrentexecutable
concurrentprogram
Responsibility: Request
requestgroup (system Administrator Reports)
## startconcurrent program "WH1TEST" manually
CONCSUBapps/apps SYSADMIN "System Administrator" SYSADMIN WAIT=N CONCURRENTFND WH1TEST PROGRAM_NAME="WH1TEST"
selectCONCURRENT_PROGRAM_NAME, PROGRAM_TYPE from
fnd_concurrent_programswhere concurrent_program_name likE '%WH1%';
====================================================================
example2: c & pro*c concurrent program
========================================
基本上参考 metalink <113428.1>。因为内容比较长,不在这里列出。
example3: report concurrent program
===================================
这里只是copy现成的一个test Oracle Report 做示范。
cd$FND_TOP/reports/US
Note:the report file should be in US directory.
cp/applvis/apps/tech_st/10.1.2/reports/samples/demo/test.rdf ./WH1RPTCP.rdf
[applvis@misUS]$ pwd
/applvis/apps/apps_st/appl/fnd/12.0.0/reports/US
[applvis@misUS]$ ls -l WH1*
-rw-r--r-- 1applvis dba 98304 Aug 9 17:40 WH1RPTCP.rdf
[applvis@misUS]$
thenregister this rdf as in other cases of the concurrent testing program
use"WH1RPTCP" as the Execution file name. (note: without the .rdfsuffix)
but inthe "define" part, choose "pdf" as output format .
=================================================
example4: PL/SQL concurrent program
===================================
参考 metalink <73492.1>。
[oravis@mis~]$ cat plconc.sql
createor replace procedure WH1plcp(errbuf out varchar2, retcode out varchar2) as
begin
fnd_file.put_line(FND_FILE.LOG,'WH1plcp begins');
fnd_file.put_line(FND_FILE.OUTPUT,'WH1plcp output');
insertinto t1 values('WH1PLCP');
commit;
fnd_file.put_line(FND_FILE.LOG,'WH1plcp ends');
end;
/
[oravis@mis~]$
###submit conc request in PL/SQL
### ref<221542.1>
### notethat CONC_REQUEST_ID returns -1. <878636.1>
declare
v_idnumber;
v_id2number;
begin
--(user_id,responsibility_id, app_resp_id)
--(sysadmin,system administrator, application system admin)
fnd_global.apps_initialize(0,20420,1);
--(appshort name, conc program short name )
v_id :=APPS.FND_REQUEST.SUBMIT_REQUEST('FND','FNDSCURS');
v_id2 :=FND_GLOBAL.CONC_REQUEST_ID;
commit;
dbms_output.put_line(v_id);
dbms_output.put_line(v_id2);
end;
/
### findout relevant info
select *from fnd_application_tl where application_id = 1 ;
select *from fnd_user where user_name ='SYSADMIN' ;
select *from fnd_responsibility_tl where responsibility_name = 'System Administrator';
select *from fnd_user_resp_groups where user_id = 0 ;
select *from fnd_conc_req_summary_v where program_short_name='FNDSCURS';
select *from fnd_conc_req_summary_v where request_id= 314020 ;
###check the stauts of an conc request
declare
l_req_idnumber;
l_phasevarchar2(30);
l_statusvarchar2(30);
l_dev_statusvarchar2(30);
l_dev_phasevarchar2(30);
l_msgvarchar2(2000);
statusboolean;
begin
l_req_id:= 314021 ;
status:=fnd_concurrent.get_request_status(REQUEST_ID=>l_req_id,
PHASE=>l_phase, STATUS=>l_status, DEV_PHASE => l_dev_phase,
DEV_STATUS=> l_dev_status, MESSAGE => l_msg ) ;
dbms_output.put_line(l_req_id||':'||l_phase||':'||l_status||':'||l_dev_phase||':'||l_dev_status);
end;
/
#####################################
example5: SQL*loader Concurrent program
========================================
vi .ctlfile in $PRODUCT_TOP/bin
example6: Java concurrent program
=================================================
参看 metalink <250964.1>。
cd $JAVA_TOP/oracle/apps/fnd/cp
mkdirsample
viHello.java
################################
packageoracle.apps.fnd.cp.sample;
importoracle.apps.fnd.cp.request.*;
publicclass Hello implements JavaConcurrentProgram {
publicstatic final String RCS_ID = "$Header$";
publicvoid runProgram (CpContext ctx) {
ctx.getLogFile().writeln("--Hello World!--",0);
ctx.getOutFile().writeln("--Hello World!--");
ctx.getReqCompletion().setCompletion(ReqCompletion.NORMAL,"");
}
}
###########################
javac$JAVA_TOP/oracle/apps/fnd/cp/sample/Hello.java
ls -l$INST_TOP/appl/fnd/12.0.0/secure/VIS.dbc
[applvis@missample]$ which java
/applvis/apps/tech_st/10.1.3/appsutil/jdk/jre/bin/java
java-Ddbcfile=$INST_TOP/appl/fnd/12.0.0/secure/VIS.dbc \
-Drequest.outfile=./outfile\
oracle.apps.fnd.cp.request.Run\
oracle.apps.fnd.cp.sample.Hello
#在R12中作如下设置:
executable:WH1JAVACP
program:WH1JAVACP
security> responsiblity > request
###另一个版本
catHello.java
packageoracle.apps.fnd.cp.sample;
importoracle.apps.fnd.cp.request.*;
importoracle.apps.fnd.util.*;
importjava.io.*;
importjava.sql.*;
publicclass Hello implements JavaConcurrentProgram {
publicstatic final String RCS_ID = "$Header$";
Stringc1Var ;
publicvoid runProgram (CpContext ctx) {
c1Var="HI";
ctx.getLogFile().writeln("--Hello World!--",0);
ctx.getOutFile().writeln("--Hello World!--");
ConnectionmJConn = ctx.getJDBCConnection();
ParameterListlPara = ctx.getParameterList();
ReqCompletionlRC = ctx.getReqCompletion();
StringlQuery = "select c1 from t1 where c1 = ?";
while(lPara.hasMoreElements() )
{
NameValueType aNVT = lPara.nextParameter();
c1Var = aNVT.getValue();
}
try{
PreparedStatement lStmt = mJConn.prepareStatement(lQuery);
lStmt.setString(1, c1Var);
ResultSet lRs = lStmt.executeQuery();
OutFilelOF = ctx.getOutFile();
LogFilelLF = ctx.getLogFile();
while (lRs.next() )
{
lOF.writeln(lRs.getString(1));
}
lStmt.close();
ctx.getReqCompletion().setCompletion(ReqCompletion.NORMAL,"");
}
catch(SQLException e) {
lRC.setCompletion(ReqCompletion.ERROR,e.toString());
}
finally{
ctx.releaseJDBCConnection();
}
}
}
java-Ddbcfile=$INST_TOP/appl/fnd/12.0.0/secure/VIS.dbc \
-Drequest.outfile=./outfile\
oracle.apps.fnd.cp.request.Run\
oracle.apps.fnd.cp.sample.Hello\
"TOKEN1=HI"
8.Custom Application Integration
2014年9月13日
20:42
OracleApplications 比较灵活,易于做客户化开发。虽然DBA 通常不需要做开发, 但我觉得
了解客户化过程也很有帮助,因为可因此了解Oracle其他模块的开发方式和标准。
因为大家都遵循同样的开发标准,做过一次,就会熟悉,比如说,File system 里product 的目录结构,
adadmin的维护任务等等。
参考资料:
1.Oracle Applications Developer's Guide
http://download.oracle.com/docs/... acrobat/120devg.pdf
2.<176852.1>Integrating Custom Applications with Oracle ApplicationsRelease 11i
3.<70167.1> Step by Step guide to Creating a C or Pro*C StandaloneConcurrent program
forOracle applications
4.<70228.1> Running a Shell script as a Concurrent Program
复杂一点的开发可能用C/JAVA之类,如上面的metalink涉及的,简单的客户化可以只是一个
SQLstatement。
9.FNDCPASS、FND_STATS和FNDLOAD
2014年9月13日
20:43
11 和 12节 介绍 Oracle Applications 里几种常用的工具, FNDCPASS, FND_STATS,
FND_LOAD.
FNDCPASS 是用来修改fnd_user和fnd_oracle_userid上面用户的密码的。
### 例子1: 修改 apps 用户的password
shutdownapps tier,
FNDCPASSapps/apps 0 Y system/manager SYSTEM APPLSYS password
然后 运行AUTOCONFIG, 再start app tier 。
### 例子 2: 修改 sysadmin 用户的password
不用shutdown app tier,
FNDCPASSapps/password 0 Y system/manager USER SYSADMIN password
然后restart apache, forms, reports, 806 listener, and cm
### 例子3: 修改 gl, pa, etc. 用户的password
不用shutdown app tier
FNDCPASSapps/password 0 Y system/manager ALLORACLE password
FNDLOAD可以用来在不同的环境中copy configuration。例如,业务人员可能在
UAT设好config,可以用这个工具download 下来再传给Production,这样就避免
人工输入可能出现的错误。下面举几个例子:
- UsingFNDLOAD to download Concurrent Program definition
selectAPPLICATION_ID, CONCURRENT_PROGRAM_NAME
fromfnd_concurrent_programs
whereCONCURRENT_PROGRAM_NAME='FNDSCURS';
selectAPPLICATION_SHORT_NAME
fromfnd_application where APPLICATION_ID = 0;
###download the definition to file myACTIVEUSER.ldt
FNDLOADapps/apps 0 Y DOWNLOAD $FND_TOP/patch/115/import/afcpprog.lct myactiveuser.ldtPROGRAM APPLICATION_SHORT_NAME="FND"CONCURRENT_PROGRAM_NAME="FNDSCURS"
- UsingFNDLOAD to download Lookup type and its value <419136.1>
selectLOOKUP_TYPE from FND_LOOKUP_TYPES where lookup_type like 'FND%'order by 1
FNDLOADapps/apps 0 Y DOWNLOAD $FND_TOP/patch/115/import/aflvmlu.lct mylookup.ldtFND_LOOKUP_TYPE VIEW_APPSNAME=FND LOOKUP_TYPE="FND_CP_PROGRAM_TYPE"
- UsingFNDLOAD to download profile options set on responsibiity level <566865.1>
selectRESPONSIBILITY_KEY from FND_RESPONSIBILITY ;
selectPROFILE_OPTION_NAME
fromFND_PROFILE_OPTIONS
wherePROFILE_OPTION_NAME like 'FND%' ;
selectUSER_PROFILE_OPTION_NAME
fromFND_PROFILE_OPTIONS_VL
whereUSER_PROFILE_OPTION_NAME like 'FND%';
FNDLOADapps/apps 0 Y DOWNLOAD $FND_TOP/patch/115/import/afscursp.lct myresp.ldtFND_RESPONSIBILITY RESP_KEY="SYSTEM_ADMINISTRATOR"
FNDLOADapps/apps 0 Y DOWNLOAD $FND_TOP/patch/115/import/afscprof.lct myprofile.ldtPROFILE PROFILE_NAME="ICX_SESSION_TIMEOUT"APPLICATION_SHORT_NAME="ICX"
FNDLOADapps/apps 0 Y DOWNLOAD $FND_TOP/patch/115/import/afscprof.lct myprofile.ldtPROFILE PROFILE_NAME="FND_DIAGNOSTICS"APPLICATION_SHORT_NAME="FND"
===========================================
12.statistics
=======================================================
OracleApplications 并不直接用 DBMS_STATS 来 收集数据库的statistics,而是用自己的工具
FND_STATS。
例子如下:
#sqlplus apps/<apps_pwd>
SQL>exec fnd_stats.gather_schema_statistics('MRP'); <- One schema
SQL>exec fnd_stats.gather_schema_statistics('ALL'); <- All schemas
SQL>exec fnd_stats.gather_table_stats('MRP','MRP_FORECAST_DATES'); <- One table
SQL>begin <-Partitioned table
2 fnd_stats.gather_table_stats(ownname => 'APPLSYS',
3 tabname =>'WF_ITEM_ACTIVITY_STATUSES',
4 granularity => 'PARTITION');
5 end;
6 /
selectPARTITION_NAME from all_tab_partitions where upper(TABLE_NAME) ='GL_JE_LINES';
execFND_STATS.GATHER_TABLE_STATS('GL','GL_JE_BATCHES',10,8,NULL,'NOBACKUP',TRUE,'GLOBAL');
execFND_STATS.GATHER_TABLE_STATS('GL','GL_JE_HEADERS',10,8,NULL,'NOBACKUP',TRUE,'GLOBAL');
execapps.FND_STATS.GATHER_TABLE_STATS('GL','GL_JE_LINES',10,8,'JAN09','NOBACKUP',TRUE,'PARTITION');
###check global stats
selecttable_name, last_analyzed from dba_tables where table_name ='GL_JE_LINES'
###gather table stats
execapps.FND_STATS.GATHER_TABLE_STATS('GL','GL_JE_LINES',10,8,NULL,'NOBACKUP',TRUE,'ALL');
###check which columns do histogram
selecttable_name,column_name,hsize from applsys.fnd_histogram_cols;
参考资料:
<419728.1>How To Gather Statistics On Oracle Applications 11.5.10(and above)
<169935.1>Troubleshooting Oracle Applications Performance Issues
<429002.1>histogram collection
10. 性能调整基础
2014年9月13日
20:44
性能影响用户对系统的体验,所以显得很重要,不过因为涉及的地方比较多,
很难一下掌握,下面只是对于OracleApplications,列出一些通常注意的地方,
包括从应用服务器到后台数据库。
性能调整自然会涉及不同的参数,具体要设什么值,就要看具体情况具体分析。
1.应用服务器( technology stack)方面
Technologystack 方面的范围也比较广, 下面分点列出.
1.1 JVM
OracleApplications 11i 和 R12 都有着 大量的功能用 Java 实现, 所以JVM的调优要考虑,
但一般来说,不是太复杂。主要要点:
- JVM的数量
Bydefault, R12 有如下的JVM:
[applvis@misscripts]$ ./adopmnctl.sh status|grep OC4J
OC4JGroup:default_group | OC4J
afm | 5552 | Alive
OC4JGroup:default_group | OC4J:forms | 5459 | Alive
OC4JGroup:default_group | OC4J
acore | 5365 | Alive
一般来说,不用启动太多的JVM,因为Java 是multi thread的, 所以Oracle建议有俩个CPU
才用一个JVM,但如果你的connection数量非常大,也有很多CPU, 就可以考虑是否需要
增加 JVM的数量。Oracle 建议一个JVM 服务不超过100个 active connection。
如果想看详细点JVM的运行情况,你可以做threaddump ( kill -3 ) 来看当前thread 的状态。
-合理的memory配置
主要就是heapsize (XMX, XMS)的设置,我见过设得太大,导致系统出现paging,
以致很慢的,也见过设得太小, 导致 OOM error 和 GC 很忙的。所以,设置要适中。
其他还有一些JVM的参数,比如,stacksize,perm size , new size, new/old ratio,
parallelcollection 等等,就和你用的JVM有关 (AIX, Sun 的之类),比较复杂,
一般先用default值看看。
如果想看详细点,就要根据 Garbage Collection的情况。这是所有JVM tuning 都一样的,
R12也没什么不同。
GC的信息在jvm log 中,参见有关的jvm_start_options。
-Xloggc:/u02/inst/apps/PROD_mis/logs/ora/10.1.3/opmn/jvmoacore.log-XX:+PrintGCDetails
1.2.Apache
有关Apache 的常用的参数如下。
Timeout
Keeplive
MinSpareServers5
MaxSpareServers10
StartServers3
MaxClients512
LogLevel
SSLLogLevel
1.3 JDBC
DBC file( $INST_TOP/appl/fnd/12.0.0/secure/prod.dbc) 控制app tier 与数据库
的JDBC连接 (参考 metalink note <278868.1> AOL/J JDBC Poolin 11i )。
每个 JVM都会 创建自己的 JDBC Pool. 常用的参数如下,根据具体情况配置:
fnd_jdbc_buffer_decay_interval=300
fnd_jdbc_buffer_decay_size=5
fnd_jdbc_usable_check=false
fnd_jdbc_buffer_min=1
fnd_jdbc_buffer_max=5
FND_JDBC_STMT_CACHE_SIZE=200
FND_MAX_JDBC_CONNECTIONS=500
1.4其他一些参数:
FND:View Object Max Fetch Size
FND:Enable Cancel Query
ICX:Session Timeout
s_sesstimeout: selfservice session timeout
s_frmConnectMode:FORMS使用socket mode 或servlet
具体的参数描述,见metalinknote <458282.1> : Context Variables.
2. 数据库方面
数据库方面跟其他应用的数据库调优并没有什么不同。也可以分两个层次:
2.1Instance level
与R12有关的Instancelevel参数, 可参看metalink note
<396009.1>Database initilization parameters for Oracle applications for R12
例如,_optimizer_autostats_job=false, 这是因为R12 采用自己的FND_STATS
package 来 collect stats。 sec_case_sensitive_logon = FALSE ,这是因为
R12不支持11g 的这个新特性。
另外,象sga/pga 这些参数,也可根据具体情况设置。
2.2 SQLlevel
象大多数数据库一样,今时今日,Instance level参数要注意的地方不多,一方面
Oracle在不断改善,越做越好,另一方面,DBA 也越来越熟悉这些地方。现在,
棘手的问题大多在SQLlevel。
处理的方法可以从AWRreport, v$active_session_history,或trace(concurrent manager
job或Forms 的 trace, 具体collection方法见前述 )中, 找到问题SQL,然后再具体分析。
一些有用的view:
v$sql/v$sql_plan/v$sql_bind_capture/v$sql_plan_statistics
解决的方法,要不是open SR (anyway, 这是Oracle 自己开发的程序),要不就用 SQL profile (10g)
SQL planbaseline (11g) 影响 optimizer 以得到正确的plan。
当然,在分析时,要保证表的statisitcs是 up-to-date,可以这样看:
setserveroutput on
set long10000
setlinesize 132
setpages 1000
execfnd_stats.verify_stats('GL','GL_DAILY_BALANCES');
===================================================================================================
Table GL_DAILY_BALANCES
===================================================================================================
lastanalyzed sample_size num_rows blocks
05-17-200803:14 6199 61990 4527
Indexname last analyzed num_rows LB DK LB/key DB/key CF
----------------------------------------------------------------------------------------------------
GL_DAILY_BALANCES_N1 05-17-2008 03:14 61976 445 33848 1 1 60667
GL_DAILY_BALANCES_N2 05-17-2008 03:14 61976 299 194 1 146 28420
GL_DAILY_BALANCES_N3 05-17-2008 03:14 61976 300 151 1 188 28418
GL_DAILY_BALANCES_N4 05-17-2008 03:14 7547 31 5 6 359 1796
----------------------------------------------------------------------------------------------------
Histogram Stats
Schema Table Name Status last analyzed Column Name
----------------------------------------------------------------------------------------------------
GL GL_DAILY_BALANCES not presentTEMPLATE_ID
Legend:
LB :Leaf Blocks
DK :Distinct Keys
DB :Data Blocks
CF :Clustering Factor
PL/SQLprocedure successfully completed.
SQL>
3. 应用方面
应用层常见的需要注意的地方:
3.1.Concurrent manager
ConcurrentManager 方面,可以注意以下参数:
cachesize: number of pending requestes picked up each time
numberof work processes:
Workshift:
另外,一些常见的重要job:
"PurgeConcurrent Request and/or Manager Data"
"PurgeObsolete Workflow Runtime Data"
有关concurrent job 运行情况的表:
fnd_conc_req_stat( turned off by profile "Concurrent: Collect Request Statistics"
3.2.产品的参数表
有时候,有些product的参数表也需要考虑,例如 HR payroll 里的 pay_action_parameters,
需要注意的参数如下:
Threads: number of processes to use in the concurrent manager
Chunk_size: commit unit
4. OS(cpu/memory/disk/network)
Last butnot least, 任何tuning 都要考虑 OS 方面的东西,cpu/memory/disk/network。
11.从11i到R12的升级
2014年9月13日
20:45
参考资料:
1.Oracle Applications Upgrade Guide: Release 11i to Release 12.0.4
http://download.oracle.com/docs/... bat/r1204upg11i.pdf
2.<850008.1> Interesting Documents Concerning E-Business Suite 11i to R12Upgrades
3.<554509.1> Unable To Login To Oracle Applications After Upgrading
from11.5.10 to R12
4.<403339.1> Oracle 10gR2 Database Preparation Guidelines for
anOracle E-Business Suite Release 12.0.4 Upgrade
5. http://advait.wordpress.com/2008/03/04/
upgrading-oracle-application-11i-to-e-business-suite-r12/
11i 到R12 的升级过程比较复杂,下面分planning, preparing, upgrade, after upgrade
几个section简单介绍一下,只是一个大概的印象。主要还是靠阅读相关的metalink 文档。
除了techstack的升级外,一部分精力可能还在各个product 升级后,业务可能遇到的bug,
需要其他进一步的patch。不过,好在11iupgrade 通常也不是一两天的工作。
14.1planning for upgrade
=========================
首先清楚自己在什么版本,一般要求在11.5.10.2CU2 ,
metalink note <316366.1>: 11.5.10 Oracle E-Business SuiteConsolidated Update 2 (CU2) ,
有这样的解释:
"11.5.10.2Maintenance Pack (3480000.drv). This new release of the maintenance pack
includesCU2. You do not have to apply it separately"
"Likethe 11.5.10.2 Maintenance Pack, Rapid Install 11.5.10.2 also includesCU2,
so thereis no need to apply it separately. "
相关的11.5.10.2CU2 的patch number:
Patch3460000: 11.5.10 ORACLE E-BUSINESS SUITE CONSOLIDATED UPDATE 2
Patch3480000: ORACLE APPLICATIONS RELEASE 11.5.10.2 MAINTENANCE PACK
检查11.5.10 CU2 的 level:
selectbug_number from apps.ad_bugs where bug_number ='3460000';
检查 AD 的level:
selectpatch_level from fnd_product_installations where patch_level like '%AD%';
11i.AD.I.5
检查 checktablespace sizing
selectsum(bytes)/1024/1024,TABLESPACE_NAME from
dba_free_spacegroup by TABLESPACE_NAME;
selectcontents,extent_management,allocation_type
fromdba_tablespaces where tablespace_name='TEMP';
检查 OATMOracle Application Tablespace Model
检查multiple org 是否enabled
selectmulti_org_flag from apps.fnd_product_groups;
select *from apps.hr_operating_units;
profileoption: "MO:Operating Unit"
检查 dbparameters
recyclebin=off
14.2Preparing for the upgrade
================================
安装 TUMS(Upgrade Manual Script ) patch 5120936, 步骤如下:
adadmin=> adpatch
cd$AD_TOP/patch/115/sql
sqlplusapps/welcome @adtums.sql /usr/tmp
注意:/usr/tmp must be in the "utl_file_dir"
安装 ADpreparation patch: patch 5726010
cd5726010
sqlplusapps/welcome @adgncons.sql apps welcome
修改adcrtbsp.sql to reflect your current tablespace information
sqlplus<SYSTEM>/<SYSTEM PASSWORD> @adcrtbsp.sql
mkdir -p$ORACLE_HOME/appsutil/admin
cpadgrants.sql $ORACLE_HOME/appsutil/admin
sqlplus/ as sysdba
SQL>@$ORACLE_HOME/appsutil/admin/adgrants.sql APPLSYS
rungather statistics
14.3upgrade
================================
确认character sets of APPL_TOP
CharacterSets
You haveto be careful while selecting the character set for APPL_TOP.
###create /u01 ,/u02, /u03 for the R12 tech stacks.
/u01=> appl_top,common_top, 10.1.3,10.1.2
/u02=> inst_top
/u03=> rdbms home ,10.2.3
chown -Rapplvis:dba /u01
chown -Rapplvis:dba /u02
chown -Roravis:dba /u03
第一次运行rapidwiz 安装新的tech stack:
[root@misrapidwiz]# pwd
/media/usbdisk/r1204/StageR12/startCD/Disk1/rapidwiz
[root@misrapidwiz]# ./rapidwiz
选项如下:
=>upgrade to R12 => create upgrade file system => apps/welcome
Configurationfile written to: /u02/apps/PROD_mis/conf_PROD.txt
Configurationfile written to: /u03/db/tech_st/10.2.0/appsutil/conf_PROD.txt
Databaselogfile - /u03/db/tech_st/10.2.0/appsutil/log/PROD_mis/12121135.log
Appltoplogfile - /u02/apps/PROD_mis/logs/12121135.log
升级数据库 to10gR2
applypatch 6319846
[oravis@mis6319846]$ $ORACLE_HOME/OPatch/opatch napply -skip_subset -skip_duplicate
sql>@postinstall.sql
applypatch 6110331
如果 appsaccount locked ,unlock apps, enable maintenance
sourceR12's env, apply patch 6604842
#$APPL_TOP/admin/topfile.txt
###apply u6394500.drv
cd$AU_TOP/patch/115/driver
adpatchoptions=nocopyportion,nogenerateportion
可能问题如下:
1. mkdiradmin
2.ORA-02303: cannot drop or replace a type with type or table dependents
metalink:<603952.1> Script jtfpfcreate.sql fails during Upgrade to Release 12.0.4
nodependent objects found for type "JTF_PF_CLIENT_OBJECT"
droptype force for all the type listed in <603952.1>.
dropTYPE APPS.JTF_PF_CLIENT_OBJECT force;
useadctrl to restart failed job
###JTF Java Technology Foundation, used by CRM , iStore,iMarketing
3.ORA-01653: unable to extend table APPLSYS.AD_DEFERRED_JOBS by 16 in tablespaceAPPS_TS_TX_DATA
restartadpatch
4./u01/apps/apps_st/appl/jtf/12.0.0/patch/115/sql/jtfpfstart.sql
apparentlyworkaround for point 2 is not good. causing issue here.
justmodify the sql and put exit.
5.restart a failed patch process
tellworker to shutdown ;
tellmanager that worker failed its job ;
tellmanager that worker acknowledges quit ;
restartadpatch;
#######################################
###autoconfig rdbms home
###第二次运行 rapidwiz 以配置系统。
[root@misrapidwiz]# ./rapidwiz
RapidInstall Wizard is validating your file system......
4 dvdlabels found
RapidInstall Wizard will now launch the Java Interface.....
[root@misrapidwiz]# Appltop logfile - /u02/apps/PROD_mis/logs/12151909.log
14.4 Upgrade 后可能的问题
#############################
can'topen any form after login:
javaconsole get this:
Loadedimage:
FollowingException occured: java.lang.IllegalArgumentException: Illegal argument forcolorScheme applet parameter
java.lang.IllegalArgumentException:Illegal argument for colorScheme applet parameter
at oracle.forms.engine.Main.initDesktop(Unknown Source)
at oracle.forms.engine.Main.start(Unknown Source)
atsun.plugin2.applet.Plugin2Manager$AppletExecutionRunnable.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
metalink<858367.1> matches .
justdeinstall java 1.5 and then open a form again it will pickup the java 1.6.
and ok.
noFND_COLOR_SCHEME in R12. only "java color scheme", and not set.