分类目录归档:经验闲谈

Oracle EBS如何启用说明性弹性域

        相信大家在做Oracle EBS的时候,都会遇到需要开启弹性域(说明性弹性域)的时候,这里我就将整个过程做一个描述性记录:

前提:需要开启的弹性域对应的表已经在弹性域定义界面进行注册(如果未注册,需要单独进行注册,此处不再描述注册过程)

主要分以下两种类型:

1.Form界面开启说明性弹性域

    a.打开需要设置弹性域的界面,找到该界面对应的表或试图,这里以开启物料批次弹性域为例,如下图所示:

      

    b.找到对应的基表,MTL_LOT_NUMBERS_ALL_V,一般都是以基表注册,因此找到基表MTL_LOT_NUMBERS,如下图所示:

      

    c.定位至弹性域注册界面,通过基表去模糊匹配,查出开启弹性域对应的标题(标题也可从最终需启用界面去看),找到标题“维护批号”,如下图所示:

    

    d.在说明性弹性域–段下,在标题栏输入“维护批号”,随即进入定义弹性域最终界面,如图所示:

    

    e.正常情况下,弹性域定义界面是冻结状态,如果需要编辑,需去掉冻结前的勾,点击段,进入编辑状态,如图所示:

    

    f.具体定义界面,输入编号,名称,窗口提示,弹性域对应基表的列,值集(值集与LOV值集同样意义),已显示和已启用,如下图,

   

    g.对值集进行编译,主要可选择必输和非必输项,如下图所示:

   

    h.保存,勾上冻结选项,系统会自动进行编译,编译完成即可生效,具体生效截图,如文档第一幅图所示。

2.web界面开启弹性域(待续)

可参考以下链接:

http://blog.csdn.net/rfb0204421/article/details/7641831

http://www.cnblogs.com/benio/archive/2009/12/07/1618725.html

ORA-24247网络访问被访问控制列表 (ACL) 拒绝

        情景:Oracle EBS并发管理器无法启动

        现象:Oracle并发请求程序错误,表面日志指向内存错误

        环境:Oracle EBS R12.2.4

        2016年12月14号上午10点钟,Oracle EBS系统发现所有推向外围电商系统的并发程序全部保存,主要报错的信息是“内存不足”。由于处在业务发生期,因此不能随便停机重启(很多时候EBS重启能解决很大程度的问题)。于是准备等到中午午休时间通知所有业务财务人员停止使用,重启系统,同时开发人员和DBA(非EBS DBA)也在进行相关问题排查处理。技术人员提供相关日志到DBA处,然而始终未能在准备停机之前解决。

        第一次重启:中午12点整,我按照系统启停脚本正常启停应用服务,未发现报错,但是进系统发现所有并发未能启动。看到这里也并没有因此慌张,因为以前很多次启动应用服务的时候都遇到过,于是单独启动并发服务adcmctl.sh,也并未报错,结果还是没提示任何错误。再次进入前台页面查验,还是未能正常启动;

        第二次重启:中午12点36分,这次同时启动数据库和应用,完成相关操作后,发现系统并发管理器正常启动。这时去查验电商推送程序,发现还是报“内存”错误。此时已经12点45分左右。

        第三次重启:向DBA求助,他也没有更好的方法,于是他提出重启整个机器,reboot操作系统。由他操作,操作完成后结果并发管理器全部无法启动。这下有些慌了,因为已经到中午13点,这时业务人员已经打电话到领导那,甚至有相关人员直接来找领导问询进度。

        第四次、五次…….,各种进程kill后,多次重启仍然无法解决。就这样一直拖到下班。其中一个同事已经找好外部某著名13摸的技术专家,准备在实在没办法时通过外部资源付费解决(领导已经同意付费)。此时公司内部的DBA做过应用的回退,正准备进行数据库的闪回操作,闪回至中午11点50。而且也这样做了。终于在牺牲部分业务数据后,系统启动正常。马上去验证电商接口问题,很遗憾还是一片红彤彤。此时已经18点35分。

       此时大家都准备回家去,至少系统已经能使用,除开电商接口。15号早上起来,发现群里已经解决。其中一个技术顾问从最开始的并发请求的日志中发现ACL网络访问控制。问题迎刃而解。但原因未明,ACL安全性注册数据被冲掉(EBS访问外网系统均需注册ACL访问控制),具体的相关注册方式如下:

————————————————————————————————————————————

SecureCRT,以DBA登录数据库 uat3db:

Last login: Mon Jan 25 20:12:49 2016 from 172.16.1.225
[orauat3@uat3db ~]$ sqlplus apps/apps

SQL*Plus: Release 11.2.0.4.0 Production on Mon Jan 25 20:14:37 2016

Copyright (c) 1982, 2013, Oracle.  All rights reserved.


Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 – 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> conn /as sysdba
Connected.
SQL> exec  dbms_network_acl_admin.create_acl('httprequestmid.xml','http request mid', 'APPS', TRUE,'connect',NULL,  NULL);

PL/SQL procedure successfully completed.

SQL> exec DBMS_NETWORK_ACL_ADMIN.ADD_PRIVILEGE( acl => 'httprequestmid.xml', principal => 'APPS', is_grant => TRUE, privilege => 'resolve');

PL/SQL procedure successfully completed.

SQL> COMMIT;

Commit complete.

SQL> exec dbms_network_acl_admin.assign_acl('httprequestmid.xml','*',NULL, NULL); commit;

PL/SQL procedure successfully completed.

————————检查是否生效命令如下————————————————————————–

–查询:
SELECT any_path FROM resource_view WHERE any_path like '/sys/acls/%';

SELECT acl,
       principal,
       privilege,
       is_grant,
       TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date,
       TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date
  FROM dba_network_acl_privileges;

SELECT host, lower_port, upper_port, acl FROM dba_network_acls;

 

————————————————————————————————————————————

————以下是其他可参考文件————-

参考文件:

http://www.linuxidc.com/Linux/2013-12/93385.htm

http://blog.sina.com.cn/s/blog_4ca24203010128oe.html

http://www.shangxueba.com/jingyan/1666117.html

http://www.cnblogs.com/benio/archive/2011/10/21/2219826.html

http://www.2cto.com/database/201312/261243.html

select utl_http.request('www.apple.com') from dual;

需要先使用 DBMS_NETWORK_ACL_ADMIN.CREATE_ACL 创建访问控制列表(ACL)

BEGIN
 DBMS_NETWORK_ACL_ADMIN.CREATE_ACL (
  acl          => 'email_server_permissions.xml',
  description  => 'Enables network permissions for the e-mail server',
  principal    => 'STAT',
  is_grant     => TRUE,
  privilege    => 'connect');
END;

–查询
SELECT host, lower_port, upper_port, acl FROM dba_network_acls;
SELECT acl,
       principal,
       privilege,
       is_grant,
       TO_CHAR(start_date, 'DD-MON-YYYY') AS start_date,
       TO_CHAR(end_date, 'DD-MON-YYYY') AS end_date
  FROM dba_network_acl_privileges;

SELECT ANY_PATH FROM RESOURCE_VIEW;
结果如下图所示:

 

如何根据Web页面关于此页查到页面字段对应视图或基表

目标:查询标准客户地点层收件人存储的视图或基表

1. 进入相应页面,找到需要查询的字段,如下图

2. 点击全部展开,ctrl+f搜索“收件人”,,如下图所示

3. 获取“HzPuiPartySiteVO”信息及相应字段信息“Addresse”,如下图所示

4. 点击全部隐藏及业务组件,如下图所示

5. 在打开的业务组件,根据关键字“HzPuiPartySiteVO”搜索结果,如下图所示

6. 点击搜索出结果连接,即可找到相应所需sql命令,如下图所示

 

Oracle PLSQL 行合并

select created_by, translate(ltrim(text, '/'), '*/', '*,') researcherlist
  from (select row_number() over(partition by created_by order by created_by, lvl desc) rn,
               created_by,
               text
          from (select created_by,
                       level lvl,
                       sys_connect_by_path(c_researcher_code, '/') text
                  from (select created_by,
                               user_name as c_researcher_code,
                               row_number() over(partition by created_by order by created_by, user_name) x
                          from fnd_user
                         order by created_by, user_name) a
                connect by created_by = prior created_by
                       and x – 1 = prior x))
 where rn = 1
 order by created_by;

SQL分析:

1、利用 “ROW_NUMBER () OVER (PARTITION BY……” 为按“创建人”汇总后的数据行添加组内序号

2、“SYS_CONNECT_BY_PATH”  按组内序号相邻关系,为每一层进行不同行的“名称”叠加

3、再次利用“创建人”进行组内分组,但按第二部中的层次排倒序,增加调整后等级

4、取所有调整后等级为1的结果,即为所要求的数据行

其他参考:http://www.ningoo.net/html/2008/how_to_do_string_aggregate_on_oracle.html

PLSQL存储过程金额大写的转换

function lcw_get_money(money in number) return varchar2 is
    c_money  VARCHAR2(12);
    b_string VARCHAR2(80);
    m_string VARCHAR2(60) := '分角圆拾佰仟万拾佰仟亿';
    n_string VARCHAR2(40) := '壹贰叁肆伍陆柒捌玖';
    n        CHAR;
    len      NUMBER(10);
    i        NUMBER(10);
    tmp      NUMBER(12);
    is_zj    BOOLEAN;
    z_count  NUMBER(10);
    l_money  NUMBER;
    l_money1 NUMBER;
    l_sign   VARCHAR2(10);
  BEGIN
    l_money1 := to_number(money);
    l_money  := abs(money);
    IF l_money1 < 0 THEN
      l_sign := '负';
    ELSE
      l_sign := '';
    END IF;
    tmp     := round(l_money, 2) * 100;
    c_money := rtrim(ltrim(to_char(tmp, '999999999999')));
    len     := length(c_money);
    is_zj   := TRUE;
    z_count := 0;
    i       := 0;
    WHILE i < len LOOP
      i := i + 1;
      n := substr(c_money, i, 1);
      IF n = '0' THEN
        IF len – i = 6 OR len – i = 2 OR len = i THEN
          IF is_zj THEN
            b_string := substr(b_string, 1, length(b_string) – 1);
            is_zj    := FALSE;
          END IF;
          IF len – i = 6 THEN
            b_string := b_string || '万';
          END IF;
          IF len – i = 2 THEN
            b_string := b_string || '圆';
          END IF;
          IF len = i THEN
            b_string := b_string || '整';
          END IF;
          z_count := 0;
        ELSE
          IF z_count = 0 THEN
            b_string := b_string || '零';
            is_zj    := TRUE;
          END IF;
          z_count := z_count + 1;
        END IF;
      ELSE
        b_string := b_string || substr(n_string, to_number(n), 1) ||
                    substr(m_string, len – i + 1, 1);
        z_count  := 0;
        is_zj    := FALSE;
      END IF;
    END LOOP;
    b_string := l_sign || b_string;
    RETURN b_string;
  EXCEPTION
    WHEN OTHERS THEN
      RETURN(SQLERRM);
  END;