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"
=======================================================================

《Oracle Applications DBA 基础》- 9 - Concurrent Processing[Z]的更多相关文章

  1. 《Oracle Applications DBA 基础》- 9 - Concurrent Processing

    来自:http://www.itpub.net/thread-1411293-1-4.html <Oracle Applications DBA 基础>- 9 - Concurrent P ...

  2. Oracle Applications DBA 基础(一)

    1.引子 2014年9月13日 20:33 <oracle Applications DBA 基础>介绍Oracle Applications R12的系统架构, 数据库后台及应用系统的基 ...

  3. Oracle Applications DBA 基础(二)

    6.OAM及系统管理 2014年9月13日 20:40 参考资料: 1.Oracle Applications System Administrator's Guide - Configuration ...

  4. Oracle EBS DBA常用SQL - 安装/补丁【Z】

    Oracle EBS DBA常用SQL - 安装/补丁 检查应用补丁有没有安装:select bug_number,last_update_date from ad_bugs where bug_nu ...

  5. Oracle Applications Multiple Organizations Access Control for Custom Code

    档 ID 420787.1 White Paper Oracle Applications Multiple Organizations Access Control for Custom Code ...

  6. Oracle Apps DBA 常用命令

    数据库启动监听 addlnctl.sh start instance 启动数据库 addbctl.sh start 启动应用服务器 adstrtal.sh 停止应用服务器 adstpall.sh -- ...

  7. Globalization Guide for Oracle Applications Release 12

    Section 1: Overview Section 2: Installing Section 3: Configuring Section 4: Maintaining Section 5: U ...

  8. 【绝密外泄】风哥Oracle数据库DBA高级工程师培训视频教程与内部资料v0.1

    [绝密外泄]风哥Oracle数据库DBA高级工程师培训视频教程与内部资料v0.1 由于是[绝密外泄]资料,防止被查,需要的小伙伴赶紧下载附件中的课件文档.由于视频太大了,已放在百度网盘了,已经在附中说 ...

  9. General Ledger Useful SQL Scripts – Oracle Applications 11i

    General Ledger Useful SQL Scripts – Oracle Applications 11i Contents GL Set of Books Configuration O ...

随机推荐

  1. eclipse下的web开发问题总结[struts2文件上传]

    最近需要做一个web方面的文件上传的Demo.开发工具是eclipse[具体名称:Eclipse IDE for Java EE Developers 版本:2.0.0.20130613-0530]. ...

  2. 关于CMCC(中国移动)、CU(中国联通)、CT(中国电信)的一些笔记

    一.三大运营商网络 CMCC(ChinaMobileCommunicationCorporation):GSM(2G).TD-SCDMA(3G).TD-LTE(4G); CU(China Unicom ...

  3. 【Android】Android实现截取当前屏幕图片并保存至SDCard

    功能 1. 实现截取当前屏幕的功能. 2. 把截取的图片保存到SDCard中的某个目录文件夹下面. Java代码 package com.app.test01; import java.io.File ...

  4. 求职(2015南京站获得百度、美的集团、趋势科技、华为offer)

    版权所有所有:没有马缰绳chhuach(CSDN博客源).转载请注明出处. 禁止www.haogongju.net转载. 特此声明 一.开篇: 9月底,找工作接近尾声,笔者主要经历了2015年南京站百 ...

  5. 搭建MyBatis框架

    一.开发环境 1.JDK 1.6.0_22 2.MyEclipse 10.7.1 3.Oracle_10g_10.2.0.4 注:各软件版本不是必须的,正常任意版本都行,文件较大就不附上下载地址了,推 ...

  6. asp.net cookie的使用.

    Cookie就是服务器暂时存放在你的电脑里的资料(.txt格式的文本文件),好让服务器用来辨认你的计算机.当你在浏览网站的时候,Web服务器会先送一小小资料放在你的计算机上,Cookies 会帮你在网 ...

  7. 百度编辑器ueditor 在vs2008中的使用方法

    个人觉得百度编辑器ueditor还是不错的,虽然出生的时间比较短,但某些方面相比其它富文本编辑器更优秀,免费.可定制等等. 由于在官方下载的ueditor包是在vs2012下开发的,可以在vs2010 ...

  8. Knime 使用 初探

    使用数据挖掘工具 Knime,分析某公司用户使用情况. 首先,打开csv文件数据,看到有以下门类: 时间.track id 歌曲名.用户行为.用户id.日期.snap_id 即歌曲门类 然后,打开Kn ...

  9. Tera Term——访问linux的ssh工具

    个人感觉他是一款免费的并且比较好用的ssh工具,下载地址: http://logmett.com/index.php?/products/teraterm.html 下载之后一路下一步就可以了.可以选 ...

  10. TSF自定义候选词列表界面

    概述 TSF(Text Service Framework),已经取代IMM(Input Method Manager),成为win8+系统的输入法框架.现在有个需求,触摸屏上要使用软键盘(虚拟键盘, ...