zoukankan      html  css  js  c++  java
  • Oracle Applications DBA 基础(二)

    6.OAM及系统管理

    2014913

    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

    2014913

    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

    2014913

    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.FNDCPASSFND_STATS和FNDLOAD 

    2014913

    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. 性能调整基础

    2014913

    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的升级

    2014913

    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. 


  • 相关阅读:
    nginx特性
    mysql增删改查
    keepalived+nginx集群
    nginx+tomcat集群方法
    jdk环境配置(Windows)
    nginx_http核心模块(二)
    nginx入门手册(一)
    nginx 配置文件解析(一)
    tcpdump用法
    Tcpdump.
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299119.html
Copyright © 2011-2022 走看看