分类目录归档:转载文章(档)

Oracle EBS的组织架构介绍

一、Oracle EBS的组织架构

        软件系统的“组织设置”必须以业务流程运作为核心,要求尽可能简单并保持相对稳定,在公司(人员)规模扩大的过程中具有延续性与继承性。 
        ORACLE  EBS系统组织划分为“业务组(Business Group)、法律实体(Legal Entity)、业务实体(Operating Unit)、库存组织(Inventory Org)”等,与企业实际的行政组织不是完全等同的概念,而是基于系统业务运作需要而设定的。

二、业务组(BG,Business Group)

“业务组”的概念可以视同企业的“集团”概念,但不同的是一个企业在系统中可以设置多个“业务组(集团)”。 
通常对于一个企业来说,系统中有一个“业务组”就够了,这表示企业就是一个“集团公司”。而对于某些业务“多元化”的特大型公司(如跨国公司),则可能需要在系统中设置多个“业务组”,表示企业由多个“集团公司”组成。 
业务组设置是系统组织设置的第一步,是最高层级的组织形态,但它主要是与人力资源信息的分隔有关,即“人员信息”的设置在一个BG范围内是由各业务模块共享的(如果需要)。一旦系统设置的用户名(User)被与“人员”(Employee)关联,无论使用什么“责任”进入系统,都会定位至一个确定的BG中,任何责任在任意时刻只能关联一个BG。EBS安装好后,系统里面已经预置了一个名为“Setup Business Group”的“初始业务组”。

三、法律实体(LE,Legal Entity)

对应实际的按国家法律法规注册的法人公司。 
R12中在定义“分类帐”时的“会计科目设置管理器”WEB中定义并分配法人实体LE。一个分类帐设置(主辅分类帐)可以添加多个LE,但每个LE只能具有一个分类帐设置。 
业务实体(OU,Operating Unit)是EBS系统组织设置的重点也是难点之一。它与法人主体LE本身没有必然的关系,与会计科目弹性域结构中的“公司段”也没有直接关系。
从企业实际业务管理需要的角度去看,业务实体OU可以看作是在系统中按照业务的相似性,把多个不同公司(包括LE)的业务处理过程及数据划分成相对独立的“管理单元”。在每个管理单元内部,各公司的业务运作共享相关数据并执行统一的业务策略。

四、库存组织(Inventory Org)

不是真实业务的“仓库管理部门”那么简单,它除了是有“物料接收与发出”等业务功能之外,更重要的是,它还是EBS系统有关计划(MPS主生产计划/MRP物料需求计划)、在制品管理(WIP)、物料清单(BOM)等模块业务功能的操作与管理平台。 
在EBS中还有两个组织概念“MRP组织、WIP组织”,它们实际是必须构建于库存组织之上的组织概念,表示该库存组织还可以进行MRP或WIP的功能。系统之所以如此处理,主要是为了控制某些INV不能做MRP或WIP而已,因为基于物料接收或发出需要所设定的INV数量可能比较多。
对于绝大多数基于库存组织INV的业务功能(个别除外),系统用户在做业务操作时,均必须首先进行INV的选择切换,以便进入确定的INV上下文环境。库存组织的作用是如此基础,以至于EBS的相关文档在提及组织(Org)概念时,如果未作特别说明,默认就是指INV组织。 
一个库存组织INV只能属于一个确定的帐套SOB、一个确定的法人实体LE、一个确定的业务实体OU。反之,一个“帐套/法人实体/业务实体”组合则可以有多个库存组织INV。 

五、HR组织

系统的HR组织设置是与HRM模块的相关业务处理功能相关,与核心业务、财务处理功能关系不大

六、资产组织

“资产组织”的设置,它是在企业需使用到资产管理模块FA时才涉及到。“资产组织”实际上是所谓“资产账簿”的代名词,它只是表示有关资产信息的一个数据维度,作用主要在于分隔数据范围

七、多组织访问控制

EBS组织设置界面中,所谓的组织“类型”(Type)划分仅是基于组织自身的统计分析工作需要而定义的一个“维度”,例如“公司总部、产品线”等等,并不影响系统的业务处理功能。真正起作用的是设置界面中的“组织分类”,系统预置的组织分类LOV除了上述“业务组、法律实体、业务实体、库存组织”等之外,还有诸如“资产组织、运营公司、雇主”等等选项。在EBS系统中各应用模块所具有的业务处理功能通常需构建在一个确定的“组织分类”之上,“组织”是相关业务处理功能的平台,企业是否需要作相关组织分类设置、如何设置,取决于企业所需要使用到的应用模块功能。
ORACLR系统通过“组织”所具有的“层次结构”(Hierarchy)概念来达到“多组织访问”权限的控制功能。
这里的组织“层次结构”与真实企业的行政管理组织层次结构没有直接关系(尽管可能有所参考),它只是企业根据某种需要(如权限管理控制、数据统计汇报等)而人为设定的一个“层次结构”,例如将系统中已经设置的任意数量的“业务实体”或“库存组织”等组织,人为地设定一个具有上下级关系、自顶向下的金字塔形多层结构。

八、配置文件

所有定义的“安全性配置文件”构成系统多组织接入控制参数“MO:安全性配置文件”的LOV
EBS 通过“MO:业务实体”、“MO:安全性配置文件”、“MO:默认业务实体”这三个系统配置文件的共同作用,实现所谓“多组织访问”控制功能。 
对于“MO:业务实体”:在R12中, 一旦设定“MO:安全性配置文件”,则此配置文件失效而不起作用。 
对于“MO:安全性配置文件”,:在R12中,该参数如果不设定,则必须设定“MO:业务实体”参数;一旦该参数被设定,则就起决定作用,系统主要依赖其实现“多组织访问”控制功能。 
对于“MO:默认业务实体”: 在R12中,随“MO:安全配置文件”起作用后才起作用,其LOV是所有已定义OU,但如果设定值不在“MO:安全配置文件”所选择的“组织层次架构”的范围内,则仍不起作用(即在与OU相关诸如PO、OM等的FORM界面,OU字段的默认值仍然为空)。 
ORACLE强调其“多组织接入MOAC”功能主要是针对业务实体OU而言。库存组织的访问是在“组织访问”控制功能中,专门设定“库存组织”与“责任”的关联性 。
EBS系统通过“弹性域段值安全性”、“帐套/分类帐安全性”、“多组织访问控制(MOAC)”、“库存组织访问控制”等多维度、多方面的组合系统设置,提供了灵活、方便的用户权限管理功能,理清并掌握它们的复杂关系是系统实施的一项重要基础性工作。

转载自:http://blog.csdn.net/sunansheng/article/details/72636643

Oracle RMAN差异备份与累积备份区别

        RMAN是一个专业的数据库备份工具,在RMAN中对数据库进行备份的类型也有很多种。例如下面是两种比较常用的备份类型:完全备份(Full Backup)和增量备份(Incremental Backup)等。 

1 .完全备份 

顾名思义,完全备份是将除空白数据块外的所有数据块、控制文件和日志文件全部进行备份。执行完完全备份后,还可以执行其他备份操作。 

2 .增量备份

在进行增量数据备份时,除空白数据块外RMAN会将发生改变的数据块进行备份操作,而没有任何变化的数据块则不进行任何操作。增量备份的范围可以是单独的数据文件、表空间或者全部数据库。

其中增量备份的方式又分为两种: 

  1. 差异备份   差异备份是默认的备份方式,在备份时需要使用DIFFERENTIAL关键字,它是将备份上一次进行的同级或者低级备份以来所有变化的数据块。 
  2. 累积备份   使用累积备份时需要使用CUMULATIVE 关键字,它将备份上次低级备以来所有的数据块。

采用累积备份还是差异备份,在一定程度上取决于CPU 周期,以及磁盘的可用空间。使用累积备份意味着备份文件将会变得日益庞大,并花费更长的时间,但是在一次还原与恢复过程中,只需要两个备份集。使用差异备份只记录从上次备份以来的变化,但是如果从多个备份集进行恢复,这种操作可能会花费更长的时间。

3 .增量备份的方式

方式

关键字

默认

说    明 

差异备份 

DIFFERENTIAL

  是

  将备份上一次进行的同级或者低级备份以来所有变化的数据块

累积备份 

CUMULATIVE

  否

将备份上次低级备份以来所有的数据块 

例如,在一周之内每天使用的增量备份级别为:0 级、2 级、2 级、2 级、1 级、2 级和2级,下面分别使用这两种备份方式,实现不同的备份效果。

(1 )使用差异增量备份的方式,

周日进行一次0 级增量备份,RMAN将数据文件中所有非空白的数据块都复制到备份集中。 

  • 周一进行级别2 的差异方式增量备份,由于不存在任何最近一次建立的级别为2 或级别为1 的增量备份,RMAN会对周日建立的0 级增量备份相比较,将发生变化的数据块保存到备份集中,即备份周日以后发生变化的数据。  
  • 周二进行级别为2 的差异增量备份,将备份周一以后发生变化的数据。 
  • 周四进行级别为1 的差异增量备份,RMAN将与周日建立的级别为0 的增量备份相比,将那些发生变化的数据块保存到备份集中。 
  • 周五进行一次级别为2 的差异增量备份,RMAN只备份从周四开始发生变化的数据。 
  • 周六进行一次级别为2 的差异增量备份,RMAN只备份从周五开始发生变化的数据。 

使用上述差异增量备份的好处是:如果周五发生故障,则只需要利用周四的1 级备份和周日的0 级备份,即可完成对数据库的恢复。 

(2 )如果使用累积增量备份的方式

  • 周日进行一次级别为0 的累积增量备份,RMAN将数据文件中所有非空白数据块保存在备份集中。 
  • 周一进行级别为2 的累积增量备份。由于不存在任何最近一次建立的1 级增量备份,RMAN以周日的0 级增量备份作为基准,将发生变化的数据块保存到备份集中。即只备份从周日以来发生变化的数据。 
  • 周二进行级别为2 的累积增量备份,RMAN将备份从周日开始发生变化的数据。 
  • 周四进行级别为1 的累积增量备份。RMAN将以周日建立的0 级增量备份为基准,将之后发生变化的数据块保存到备份集中。
  • 周五进行级别为2 的累积增量备份,RMAN将备份从周四以来发生变化的数据。 
  • 周六进行级别为2 的累积增量备份,RMAN将备份从周四建立的1 级备份为基准,将之后发生变化的数据块复制到备份集中,即备份周四以来发生变化的数据。 

在周二建立的2 级增量备份中,实际上包含了周一的2 级增量备份,因此这种增量备份方式称为累积方式。

本文转载自:http://blog.csdn.net/sunansheng/article/details/54893619

Oracle PLSQL 将数字转为对应的英文单词

用途
    将数字转为对应的英文单词,技术写代码可引用这一段
使用场景
    发票、对账单等处输出金额

命令如下,可点击sql查看,下面的内容直接贴出来似乎不能直接编译。
/*  FUNCTION money_format_us(p_money_amount IN NUMBER) RETURN VARCHAR2 IS*/
DECLARE
  p_money_amount NUMBER := -2.04;
  TYPE lt_array_type IS VARRAY(50) OF VARCHAR2(20);
   /*一维数组,字符串类型 */
  l_array        lt_array_type := lt_array_type('ONE ',
                                                'TWO ',
                                                'THREE ',
                                                'FOUR ',
                                                'FIVE ',
                                                'SIX ',
                                                'SEVEN ',
                                                'EIGHT ',
                                                'NINE ',
                                                'TEN ',
                                                'ELEVEN ',
                                                'TWELVE ',
                                                'THIRTEEN ',
                                                'FOURTEEN ',
                                                'FIFTEEN ',
                                                'SIXTEEN ',
                                                'SEVENTEEN ',
                                                'EIGHTEEN ',
                                                'NINETEEN ',
                                                'TWENTY ',
                                                'THIRTY ',
                                                'FORTY ',
                                                'FIFTY ',
                                                'SIXTY ',
                                                'SEVENTY ',
                                                'EIGHTY ',
                                                'NINETY ',
                                                'HUNDRED ',
                                                'THOUSAND ',
                                                'MILLION ',
                                                'BILLION ');
  c_money_amount VARCHAR2(14);
  l_string       VARCHAR2(600);
  n              CHAR;
  l_pre_n        CHAR;
  l_length       NUMBER;
  i              NUMBER;
  tmp            NUMBER;
  l_decimal_flag VARCHAR2(1);
  l_money_amount NUMBER;
  l_sign         VARCHAR2(10);
BEGIN
  l_money_amount := round(abs(p_money_amount), 2);
  IF p_money_amount < 0 THEN
    l_sign := 'NEGATIVE ';
  ELSE
    l_sign := '';
  END IF;
  tmp            := l_money_amount * 100;
  c_money_amount := rtrim(ltrim(to_char(tmp, '999999999999999999')));
  l_length       := length(c_money_amount);
  i              := 0;
  WHILE i < l_length – 2 LOOP
    i := i + 1;
    IF MOD(l_length – 2 – i, 3) = 2 THEN
      n := substr(c_money_amount, i, 1);
      IF n <> '0' THEN
        l_string := l_string || l_array(to_number(n));
        l_string := l_string || l_array(to_number(28));
      END IF;
    END IF;
    IF MOD(l_length – 2 – i, 3) = 1 THEN
      n := substr(c_money_amount, i, 1);
      IF n = '1' THEN
        l_pre_n := n;
      END IF;
      IF n NOT IN ('0', '1') THEN
        l_string := l_string || l_array(to_number(n) + 18);
      END IF;
    END IF;
    IF MOD(l_length – 2 – i, 3) = 0 THEN
      IF nvl(l_pre_n, 'X') = '1' THEN
        n        := substr(c_money_amount, i, 1);
        l_string := l_string || l_array(to_number(l_pre_n || n));
        l_pre_n  := NULL;
      ELSE
        n := substr(c_money_amount, i, 1);
        IF n <> '0' THEN
          l_string := l_string || l_array(to_number(n));
        END IF;
      END IF;
    END IF;
    IF l_length – i = 5 AND substr(c_money_amount, i – 2, 3) <> '000' THEN
      l_string := l_string || l_array(to_number(29));
    END IF;
    IF l_length – i = 8 AND substr(c_money_amount, i – 2, 3) <> '000' THEN
      l_string := l_string || l_array(to_number(30));
    END IF;
    IF l_length – i = 11 THEN
      l_string := l_string || l_array(to_number(31));
    END IF;
  END LOOP;
  n := substr(c_money_amount, l_length – 1, 1);
  IF n NOT IN ('0', '1') THEN
    l_decimal_flag := 'Y';
    l_string       := l_string || 'AND ';
    l_string       := l_string || l_array(to_number(n) + 18);
  END IF;
  IF n = '1' THEN
    l_decimal_flag := 'Y';
    l_string       := l_string || 'AND ';
    l_pre_n        := n;
    n              := substr(c_money_amount, l_length, 1);
    l_string       := l_string || l_array(to_number(l_pre_n || n));
  ELSE
    n := substr(c_money_amount, l_length, 1);
    IF n <> '0' THEN
      IF nvl(l_decimal_flag, 'N') = 'N' THEN
        l_string := l_string || 'AND ';
      END IF;
      l_decimal_flag := 'Y';
      l_string       := l_string || l_array(to_number(n));
    END IF;
  END IF;
  IF l_decimal_flag = 'Y' THEN
    l_string := l_string || 'CENTS ';
  ELSE
    l_string := l_string;
  END IF;
  l_string := l_sign || l_string; /*RETURN l_string;*/
  dbms_output.put_line(l_string); /* EXCEPTION  WHEN OTHERS THEN    RETURN(SQLERRM);*/
END;

–此段引用自:http://catonisland.cn/post/138.html 

Oracle EBS多OU总结

(一)  多OU总结

1.  Form多OU实现

1)  创建一个Table,以CUX_AP_CHECK_HEADER_ALL为例

2)  创建Table的两个Synonym(一个不含_ALL,一个以_ALL结尾):CUX_AP_CHECK_HEADER和CUX_AP_CHECK_HEADER_ALL

3)  给不含_ALL的Synonym:CUX_AP_CHECK_HEADER加上组织屏蔽的策略函数

dbms_rls.add_policy(object_name       => 'CUX_AP_CHECK_HEADER',

          policy_name       => 'ORG_SEC',

          policy_function => 'MO_GLOBAL.ORG_SECURITY',

              policy_type       =>  dbms_rls.shared_context_sensitive);

4)  在不含_ALL的Synonym的基础上创建视图: CUX_AP_CHECK_HEADER_V

5)  进入FORM时(pre-form触发器)添加代码:

mo_global.init(&p_appl_shortname);–p_appl_shortname为应用简称

6)  当选择某个OU时(一般在when_validate_item触发器)中添加代码:mo_global.set_policy_context('S',&p_org_id);–p_org_id为OU的id

2.  Report多OU实现

1)  给并发程序设置业务实体模式:单个,多个和空(默认)。一般设置为‘单个’

业务实体模式对应表fnd_concurrent_programs中的multi_org_category字段

2)  得到当前OU的值。

使用:mo_global.get_current_org_id或者fnd_global.org_id

3)  在报表的参数和报表的逻辑中加上OU的限制

3.  GL数据的多OU实现

1)  得到当前OU的值。

使用:mo_global.get_current_org_id或者fnd_global.org_id

2)  根据OU的值得到部门段的值:

DECLARE

    l_segment1  VARCHAR2(150);–部门段

   BEGIN

SELECT o3.attribute5

   INTO l_segment1

  FROM hr_all_organization_units     o,

       hr_all_organization_units_tl  otl,

       hr_organization_information   o2,

       hr_organization_information   o3

WHERE o.organization_id = o2.organization_id

   AND o.organization_id = o3.organization_id

   AND o2.org_information_context = 'CLASS'

   AND o3.org_information_context = 'Operating Unit Information'

   AND o2.org_information1 = 'OPERATING_UNIT'

   AND o2.org_information2 = 'Y'

   and o.organization_id = otl.organization_id

   and o.organization_id = &p_org_id –OU id

   AND otl.LANGUAGE = USERENV('LANG');

END;

3)  将步骤2得到的值作为限制条件:

SELECT gl_code_combinations gcc WHERE gcc.segment1 = l_segment1;

4.  Interface多OU总结

1)  给并发程序设置业务实体模式:单个,多个和空(默认)。业务实体模式对应表fnd_concurrent_programs中的multi_org_category字段

2)  如果接口的导入程序中OU作为一个参数,则应该将所有的OU作一次循环。

5.  多OU实现扩展知识

1)  给客户化应用注册和取消MOAC的控制

fnd_mo_product_init_pkg.register_application(注册应用)

fnd_mo_product_init_pkg.remove_application(取消应用)

查看支持MOAC的应用SQL:

SELECT * FROM fnd_mo_product_init;

2)  给数据库对象注册和取消策略-policy

dbms_rls.add_policy(注册策略)

dbms_rls.drop_policy(取消策略)

3)  多OU 涉及到的表

a)   查看数据库对象是否增加了策略-policy

SELECT * FROM dba_policies;

b)   查看当前session所能访问的OU

SELECT * FROM mo_glob_org_access_tmp;

c)   查看当前session应用上下文(context)的值(说明:OU的值保存在context中)

SELECT * FROM dba_context dc WHERE dc.namespace LIKE 'MULTI%';

MOAC使用的应用程序上下文:MULTI_ORG,MULTI_ORG2

(二)  多帐套总结

1.   客户化开发中的多帐套屏蔽

1)  得到当前OU的值。

使用:mo_global.get_current_org_id或者fnd_global.org_id

2)  根据组织id得到帐套id和公司名称。SQL语句为:

DECLARE

   l_org_information3 VARCHAR2(150);–帐套id

        l_company_desc     VARCHAR2(150);–公司中文描述

  BEGIN

   SELECT o3.org_information3,o3.attribute3

     INTO l_org_information3,l_company_desc

     FROM hr_all_organization_units    o,

          hr_all_organization_units_tl otl,

          hr_organization_information  o2,

          hr_organization_information  o3

    WHERE o.organization_id   = o2.organization_id

      AND o.organization_id   = o3.organization_id

      AND o2.org_information_context || '' = 'CLASS'

      AND o3.org_information_context = 'Operating Unit Information'

      AND o2.org_information1 = 'OPERATING_UNIT'

      AND o2.org_information2 = 'Y'

      AND o.organization_id   = otl.organization_id

      AND otl.language        = USERENV('LANG')

      AND o.organization_id   = &p_org_id;–OU id

   END;

3)  得到本位币,SQL语句为:

DECLARE

l_local_currency_code VARCHAR2(15);–本位币

BEGIN

SELECT gsob.currency_code

    INTO l_local_currency_code

   FROM gl_sets_of_books gsob, hr_operating_units hou

  WHERE gsob.set_of_books_id = hou.set_of_books_id

  AND   hou.organization_id  = &p_org_id;–OU ID

END;

4)  在程序中加上帐套和本位币的限制

2.   多帐套实现扩展

1)  得到帐套的SQL语句为:

SELECT * FROM gl_ledgers;

2)  得到法人的SQL语句为:

SELECT * FROM xle_entity_profiles;

转载地址:http://blog.csdn.net/cunxiyuan108/article/details/6454450