首页 > 移动平台 > 详细

DBMS_APPLICATION_INFO

时间:2016-02-21 21:12:06      阅读:215      评论:0      收藏:0      [点我收藏+]

官方文档:http://docs.oracle.com/cd/E11882_01/appdev.112/e40758/d_appinf.htm#ARPLS003

     https://oracle-base.com/articles/8i/dbms_application_info#end_to_end_tracing_java

DBMS_APPLICATION_INFO允许应用程序向视图v$session,v$session_longops添加统计信息用于追踪程序执行情况。

declare
  v_module      varchar2(2000);
  v_action      varchar2(2000);
  v_client_info varchar2(2000);
begin
  dbms_application_info.set_module(module_name => TestModule,
                                   action_name => Action_start);
  dbms_application_info.set_action(action_name => Action01);
  dbms_application_info.set_client_info(client_info => Client_info01);
  dbms_application_info.read_module(module_name => v_module,
                                    action_name => v_action);
  dbms_output.put_line(v_module); --TestModule
  dbms_output.put_line(v_action); --Action01
  dbms_application_info.read_client_info(client_info => v_client_info);
  dbms_output.put_line(v_client_info); --Client_info01
end;

应用程序开始的时候总是应该注册module和action,用以标识某块和初始化Action,相关SQL:

select sid from v$mystat;

select vs.module, vs.action, vs.client_info
  from v$session vs
 where vs.sid = 36

ASH中Top Services/modules统计了在抽样会话活动中占较高百分比的SERVICE或者MODULE,AWR中SQL的统计信息中就会标识SQL所属的module。

 

为了监控操作时间较长的程序,可以通过SET_SESSION_LONGOPS记录执行情况,通过视图V$SESSION_LONGOPS查询具体的执行情况:

DBMS_APPLICATION_INFO.SET_SESSION_LONGOPS (
   rindex      IN OUT BINARY_INTEGER, 
   slno        IN OUT BINARY_INTEGER,  --oracle内部使用
   op_name     IN     VARCHAR2       DEFAULT NULL, -- 定义任务名称,最大64个字节
   target      IN     BINARY_INTEGER DEFAULT 0, --对应视图的target
   context     IN     BINARY_INTEGER DEFAULT 0, --对应视图的context
   sofar       IN     NUMBER         DEFAULT 0, --对应视图的sofar
   totalwork   IN     NUMBER         DEFAULT 0, --对应视图的totalwork
   target_desc IN     VARCHAR2       DEFAULT unknown target, --对应视图的total_desc,最大32个字节
   units       IN     VARCHAR2       DEFAULT NULL)   --最大32个字节

set_session_longops_nohint constant BINARY_INTEGER := -1;
declare
  v_rindex      binary_integer;
  v_slno        binary_integer;
  v_sofar       number := 0;
  v_op_name     varchar2(64) := batch_load;
  v_totalwork   number := 10;
  v_target_desc varchar2(32) := rows processing;
begin

  v_rindex := dbms_application_info.set_session_longops_nohint; --在视图v$session_longops中开始新的一行
  while v_sofar < 10 loop
    dbms_lock.sleep(10); --模拟长时间任务
  
    v_sofar := v_sofar + 1; --模拟任务执行进度
    dbms_application_info.set_session_longops(rindex      => v_rindex,
                                              slno        => v_slno, --oracle内部使用
                                              op_name     => v_op_name,
                                              sofar       => v_sofar, --对应视图的sofar
                                              totalwork   => v_totalwork, --对应视图的totalwork
                                              target_desc => v_target_desc);
  end loop;
end;

如下SQL可以查看任务的执行情况及执行进度:

select sid, opname, target_desc, sofar, totalwork, units
  from v$session_longops;

 

DBMS_APPLICATION_INFO

原文:http://www.cnblogs.com/yasun/p/5205533.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!