zoukankan      html  css  js  c++  java
  • 《Oracle Applications DBA 基础》- 9

    来自:http://www.itpub.net/thread-1411293-1-4.html


    Oracle Applications DBA 基础》- 9 - Concurrent Processing

    ==================================

    参考资料:

    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中负责
    处理批作业 或 后台作业的。 用的地方很多,所以需要多花点时间理解。

    Concurrent Manager 管理的基础知识,比如 start/stop,output and logfile location 等,
    前面已提及。

    下面只是列出一些常用的内容,可以帮助理解concurrent manager。

    =====================================================
    # 如何从 concurrent request id  找到 Oracle session id (sid) :

    很多时候我们需要从 concurrent request 的request id 找到对应的
    Oracle session id (sid),可以用下面的方法, 由此我们也可了解
    concurrent manager 对应的 table 结构。


    # 当前正在运行的 concurrent request:

    select request_id, controlling_manager,  phase_code 
    from fnd_concurrent_requests  
    where phase_code='R';

    # 根据 request id 找到 对应的<controlling_manager>
    select request_id, controlling_manager,  phase_code 
    from fnd_concurrent_requests  
    where request_id = <request_id>;

    # 根据 <controlling_manager> 找到对应的<ORACLE_PROCESS_ID>:
    select OS_PROCESS_ID, ORACLE_PROCESS_ID 
    from fnd_concurrent_processes 
    where CONCURRENT_PROCESS_ID = <controlling_manager>;

    # 根据 <ORACLE_PROCESS_ID> 就知道 SID
    select a.sid ,b.spid from v$session a , v$process b 
    where b.addr=a.paddr and b.pid = <ORACLE_PROCESS_ID>;

    # 另外一种 SQL query 方法:
    select session_id from fnd_concurrent_processes 
    where CONCURRENT_PROCESS_ID = <controlling_manager>;

    select sid from v$session where audsid=<session_id>;

    ===========================================
    # 统计 每个 program 对应完成的 request 数量:

    select a.concurrent_program_id , b.CONCURRENT_PROGRAM_NAME, count(1) 
    from fnd_concurrent_requests a, fnd_concurrent_programs b
    where a.concurrent_program_id = b.concurrent_program_id
    group by a.concurrent_program_id,b.CONCURRENT_PROGRAM_NAME;

    ===============================================
    # 列出 concurrent program的种类

    col LOOKUP_CODE for a10
    col meaning for a60

    select lv.lookup_code, lv.meaning from fnd_lookup_values lv
    where lv.lookup_type='CP_EXECUTION_METHOD_CODE' and language='US' order by 1;

    # 列出 concurrent program的种类对应的数量
    select lv.meaning , count(*) from fnd_lookup_values lv,
    fnd_concurrent_programs cp where lv.lookup_type='CP_EXECUTION_METHOD_CODE' and
    language='US' and lv.lookup_code=cp.execution_method_code
    group by lv.meaning order by 2;

    select cp.enabled_flag,lv.meaning , count(*) cp_count
    from fnd_lookup_values lv,fnd_concurrent_programs cp 
    where lv.lookup_type='CP_EXECUTION_METHOD_CODE' and
    language='US' and lv.lookup_code=cp.execution_method_code
    group by cp.enabled_flag,lv.meaning
    order by cp.enabled_flag, cp_count;

    ==========================================================
    # 列出正在运行的 concurrent manager processes: 

    select CONCURRENT_QUEUE_NAME, control_code, running_processes, max_processes 
    from fnd_concurrent_queues 
    where running_processes != 0

    ========================
    # status code 对应的解释 <297909.1>

    select lookup_type,lookup_code, meaning from fnd_lookups 
    where lookup_type like 'CP_%';

    # fnd_concurrent_processes 的 status_code

    select lookup_code, meaning from fnd_lookups 
    where lookup_type='CP_PROCESS_STATUS_CODE'


    # 如何手动停掉正在运行的 Concurrent Request <154688.1> 

    update fnd_concurrent_requests set status_code='C',phase_code='c' 
    where request_id=4374195;

    # <152763.1> , in that case, set status_code='X'
    # check the meaning of status_code of requests from the note above

    update fnd_concurrent_requests set status_code='C' ,phase_code='C' 
    where request_id = 2722233;

    # The Oracle server process might become runaway. 
    # find out the sid first to kill it manully if needed.

    ==================================
    # 如何在命令行上提交 concurrent request

    CONCSUB apps/apps SYSADMIN "System Administrator" SYSADMIN WAIT=N CONCURRENT FND cusupt3 PROGRAM_NAME="custom update 3"

    "cusupt3": concurrent executable in $FND_TOP/bin


    # 如何 trace concurrent program
    ===================================
    metalink note: 453527.1

    1. concurrent program => define => "Enable Trace" 

    2. Profiles => System => Concurrent:Allow Debugging

    3. submit request => Debug Options


    # 各种 不同的 concurrent programs
    Concurrent Program 可以用不同的方式构成, 既可以用 shell,PL/SQL, C, JAVA 等
    语言,也可以用 Oracle Reports,SQL*loader 等工具。下面逐一介绍。
    ====================================== 
    example 1 : shell concurrent program
    =======================================

    cd $FND_TOP/bin
    vi WH1TEST.prog

    cat ./WH1TEST.prog
    ===========================
    #!/bin/ksh
    . /applvis/apps/apps_st/appl/APPSVIS_mis.env

    sqlplus apps/apps@VIS <<EOF
    EOF
    echo "END"
    =========================

    chmod +x WH1TEST.prog

    ### pass parameter as separate variable

    ln -s $FND_TOP/bin/fndcpesr WH1TEST

    然后,在R12中逐一定义如下内容:
    concurrent executable 
    concurrent program 
    Responsibility : Request 
    request group (system Administrator Reports)

    ## start concurrent program "WH1TEST" manually
    CONCSUB apps/apps SYSADMIN "System Administrator" SYSADMIN WAIT=N CONCURRENT FND WH1TEST PROGRAM_NAME="WH1TEST"

    select CONCURRENT_PROGRAM_NAME, PROGRAM_TYPE from 
    fnd_concurrent_programs where concurrent_program_name likE '%WH1%';

    ====================================================================


    example 2: c & pro*c concurrent program
    ========================================
    基本上参考 metalink <113428.1>。因为内容比较长,不在这里列出。

    example 3: 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@mis US]$ pwd
    /applvis/apps/apps_st/appl/fnd/12.0.0/reports/US
    [applvis@mis US]$ ls -l WH1*
    -rw-r--r--  1 applvis dba 98304 Aug  9 17:40 WH1RPTCP.rdf
    [applvis@mis US]$

    then register this rdf as in other cases of the concurrent testing program
    use "WH1RPTCP" as the Execution file name. (note: without the .rdf suffix)

    but in the "define" part, choose "pdf" as output format .
    =================================================

    example 4: PL/SQL concurrent program
    ===================================
    参考 metalink <73492.1>。

    [oravis@mis ~]$ cat plconc.sql
    create or 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');
    insert into 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> 
    ### note that CONC_REQUEST_ID returns -1. <878636.1> 
    declare
    v_id number;
    v_id2 number;
    begin
    --(user_id, responsibility_id, app_resp_id) 
    --(sysadmin, system administrator, application system admin)

    fnd_global.apps_initialize(0,20420,1);

    --(app short 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;


    ### find out 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_id number;
    l_phase varchar2(30);
    l_status varchar2(30);
    l_dev_status varchar2(30);
    l_dev_phase varchar2(30);
    l_msg varchar2(2000);
    status boolean;
    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;
    /


    #####################################
    example 5: SQL*loader Concurrent program
    ========================================
    vi .ctl file in $PRODUCT_TOP/bin


    example 6: Java concurrent program
    =================================================
    参看 metalink <250964.1>。

    cd $JAVA_TOP/oracle/apps/fnd/cp
    mkdir sample

    vi Hello.java
    ################################
    package oracle.apps.fnd.cp.sample;
    import oracle.apps.fnd.cp.request.*;

    public class Hello implements JavaConcurrentProgram {
    public static final String RCS_ID = "$Header$";
    public void 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@mis sample]$ 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


    ### 另一个版本
    cat Hello.java

    package oracle.apps.fnd.cp.sample;
    import oracle.apps.fnd.cp.request.*;
    import oracle.apps.fnd.util.*;
    import java.io.*;
    import java.sql.*;

    public class Hello implements JavaConcurrentProgram {
    public static final String RCS_ID = "$Header$";
    String c1Var ;
    public void runProgram (CpContext ctx) {
    c1Var ="HI";
    ctx.getLogFile().writeln("-- Hello World!--",0);
    ctx.getOutFile().writeln("-- Hello World!--");
    Connection mJConn = ctx.getJDBCConnection();
    ParameterList lPara = ctx.getParameterList();
    ReqCompletion lRC = ctx.getReqCompletion();
    String lQuery = "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();
      OutFile lOF = ctx.getOutFile();
      LogFile lLF = 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"
    =======================================================================
  • 相关阅读:
    [转载]DB2数据库移植罕见成绩片面理睬(4)
    [转载]接续刷新Sybase数据库后果大搜聚1
    [转载]DB2数据库移植罕见结果周全理会(3)
    [转载]有关PB/Sybase斥地过程中数据库转移引见 (2)
    [转载]如何将sybase的sa暗码重置为空
    [转载]DB2数据库移植罕有成绩片面解析(1)
    [转载]精益求精Sybase数据库题目成果年夜征求8
    [转载]精益求精Sybase数据库标题大包括6
    [转载]千锤百炼Sybase数据库题目大大搜罗7
    [转载]DB2数据库移植罕有结果片面解析(2)
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299179.html
Copyright © 2011-2022 走看看