转载自:http://www.orapub.cn/posts/3296.html

Oracle EBS二次开发中,往往会创建很多数据库对象,如表、同义词、视图等,这些数据库对象是二次开发配置管理内容很重要的一部分,通常情况下我们会使用脚本文件来记录这些数据库对象的创建、变更和维护,随着开发的进行需要对这些对象的脚本进行版本管理;更重要的是将这些数据库对象从开发环境移植到其它环境的时候面临着诸多的问题:

  1. 数据库对象本身并没有实现版本管理
  2. 需要安装人员执行多个数据库对象脚本
  3. 安装人员必须了解一定的数据库知识才能执行脚本
  4. 脚本的安装的方式容易出错,如果设计的脚本和目标系统有所出入,很有可能导致更新出错或带来灾难
  5. 需要分别为多个目标系统定制安装脚本,工作量非常大
  6. 脚本的格式没有统一的标准

作为开发人员很希望有一个工具来完成数据库对象在两个数据库之间的移植,而无需我们为了不同的数据库维护不同的对象脚本,避免上面所描述的问题,下面我们来看看Oracle为我们所提供的解决方案: XDF(XML Object Description File)工具。

XDF工具的原理和FNDLOAD是一样的,同样是从源系统中获取需要移植对象的元数据信息后生成数据文件(.xdf),然后在目标系统中使用数据文件根据目标系统的情况生成相应的操作来新增或者修改数据库对象。

目前版本的Xdf(EBS R12.1.1)可以完成以下数据库对象的移植:

  1. Table
  2. Index
  3. View
  4. Sequence
  5. Synonym
  6. Mview
  7. Mviewlog

一、ODF(Object Description File)介绍

在讲解XDF工具之前我们必须先了解一下它的前身ODF(Object Description File),ODF是在11i之前Oracle为EBS系统提供的数据库对象移植工具,它有两个组件组成:

1. ODF Generator(adodfgen):用来从源系统中生成数据库对象的描述信息文件(.odf),如生成PO_HEADERS_ALL这个表的定义信息。但是这个工具作为Oracle内部使用从来没有对外公开过,致使我们无法使用这个工具,我们所能够得到的odf数据文件都是Oracle作为补丁类型提供给我们的,因此对于我们二次开发移植来说根本无法使用ODF这个工具。

2. ODF Comparison(adodfcmp):用来在目标系统中通过对比odf数据文件和目标系统数据库中对象来生成并执行相应命令,odf文件中包括了数据库对象所有的信息,如果它发现目标系统中不存在这个对象的时候就创建它;如果目标系统中已经存在这个对象并版本低于odf文件中描述的对象就修改对象的定义。这个工具在很多补丁或者Oracle解决问题的时候会用来进行odf数据文件的对比操作。

adodfcmp可以在$AD_TOP/bin目录下找到, 由于并不是经常使用,在此就不做更多详细介绍,有兴趣的可以在命令行中输入 adodfcmp命令后回车可以看到使用的说明

使用的例子:

adodfcmp mode=sequences priv_schema=system/manager userid=gl/gl touser=apps/apps odffile=glxx.odf changedb=Yes
adodfcmp mode=tables priv_schema=system/manager userid=gl/gl touser=apps/apps odffile=glxxx.odf changedb=Yes
adodfcmp mode=views priv_schema=system/manager userid=gl/gl touser=apps/apps odffile=glxxx.odf changedb=Yes

虽然Oracle并未公开ODF工具供我们使用,但是Oracle内部看似还在使用它,在EBS R12版中可以看到很多模块中还有odf数据文件提供,odf数据文件一般在各模块的 patch/115/odf 目录下

二、Xdf(XML Object Description File)

在Oracle EBS 11i之后,Oracle结合了Java和XML的技术推出了XDF这个数据库对象移植工具作为ODF的接班,XDF作为FND模块中的一个工具组件出现,XDF的Java实现在$JAVA_TOP/oracle/apps/fnd/odf2 目录下,它的原理和ODF以及FNDLOAD是一样的,只是XDF不像FNDLOAD那样需要控制文件而已。

但是在EBS R12之前,Oracle并未公开XDF生成工具(FndXdfGen),所以也无法用来移植客户化的数据库对象,直到R12发布的时候,FndXdfGen终于向我们开放了,至此我们终于可以在二次开发中使用Xdf这个工具。

XDF工具由2个组件构成:

  1. 对象描述生成工具(FndXdfGen):用来从源系统中生成数据库对象的描述信息文件(.xdf)
  2. 对象对比工具(FndXdfCmp):用来在目标系统中通过对比odf数据文件和目标系统数据库中对象来生成并执行相应命令,它是Xdf工具的核心

1,对象描述生成工具(FndXdfGen)

Xdf生成工具是用来从源数据库系统中将描述数据库对象的元数据信息从数据字典中取出后生成odf文件的工具,它通过Java类oracle.apps.fnd.odf2.FndXdfGen来实现

语法如下:

java oracle.apps.fnd.odf2.FndXdfGen apps_schema= apps_pwd= jdbc_protocol= jdbc_conn_string= object_name= xsl_directory= [object_type=] [owner_name=] [xdf_filename=] [deferred=<yes|no|> ] [logfile=] [dropcr=] [custom_defval=colname1=col1value;colname2=col2value] [includetriggers=][obsolete=][base_partition=][apply_dbversion=]

关键的几个参数:

  1. apps_schema:apps模式名称,一般为apps
  2. apps_pwd:apps模式的密码
  3. jdbc_conn_string:数据库连接信息,可以使用Net8格式的连接或者hostname:port:sid的格式
  4. object_name:指定要导出信息的数据库对象名称,trigger和sequence两种类型可以使用百分号(%)来一次性提取多个,其它类型需要明确指定名称,一次提取一个对象
  5. xsl_directory:用来做XSLT转化时所要求的xsl文件目录,通常使用$FND_TOP/patch/115/xdf/xsl 或者 $FND_TOP/admin/xdf/xsl
  6. jdbc_protocol:jdbc协议(thin 或 oci8)
  7. object_type:导出的对象类型,有table, mview, mviewlog, index, view, sequence, synonym
  8. owner_app_shortname:对象所属的应用简称
  9. xdf_filename:生成的对象描述文件名称,名称自动添加后缀”.xdf”

其它参数可以直接在命令行中输入java oracle.apps.fnd.odf2.FndXdfGen 后打印出来看

下面以移植 xhu.xhu_blog_article_2201 表为例来演示如何使用XDF工具,使用appl操作系统用户登录到EBS中间服务器,运行如下的命令:

java oracle.apps.fnd.odf2.FndXdfGen apps_schema=apps apps_pwd=apps jdbc_protocol=thin jdbc_conn_string=ebs006.hand-china.com:1522:VIS02 object_name=XHU_BLOG_ARTICLE_2201 xsl_directory=$FND_TOP/patch/115/xdf/xsl owner_app_shortname=XHU object_type=table

命令正常执行后会看到如下的日志信息输出:

Generating xdf - xhu_blog_friend_2201.xdf
The xdf file contains the following objects
Primary Object's Application Short Name :
XHU
Primary Object Schema Name :
XHU
Primary Object Name :
XHU_BLOG_FRIEND_2201
Primary Object Type :
TABLE
Dependent Object Information :
Indexes on XHU_BLOG_FRIEND_2201 :
XHU_BLOG_FRIEND_2201_U1
None
Sequence(s) on XHU_BLOG_FRIEND_2201 :
XHU_BLOG_FRIEND_2201_S
Policy(ies) on XHU_BLOG_FRIEND_2201 :
None
Created xdf successfully

从上面的日志信息中可以看到表、表上的索引、表的序列(按照<table_name>_s格式创建)和表的策略都一并导出,成功执行后会生成对象描述文件xhu_blog_article_2201.xdf,生成的对象描述文件(.xdf)是XML结构的,有兴趣的可以用记事本打开看看里面的内容。

对象描述文件记录信息的特点:

  1. 以XML格式描述对象信息
  2. 将相关联的对象一起提取出来,如表上的索引、策略和触发器等
  3. 不管在源系统中数据库表是否注册到EBS,生成描述信息都包含了这的信息
  4. 对象都具有自己的版本号,如表和表中的列都有自己的版本号
  5. 对象都有哈希值

系统中很多数据库对象的描述文件都保存在各模块的 patch/115/xdf 目录下

2,对象对比工具(FndXdfCmp)

FndXdfCmp是Xdf工具的核心组件,它根据对象描述文件(.xdf)中对象的信息,并根据目标数据库中对应对象的存在情况来生成对应的DDL语句,例如表对象,如果在目标系统中不存在,那就生成CREATE TABLE语句,否则就生成ALTER TABLE语句。

FndXdfCmp根据对象描述文件的内容、目标系统的对象存在情况以及对象类型来生成相应的DDL语句,整个XDF工具的魅力也就在此,不管存在多少个目标系统,我们移植时只需要一个对象的描述文件(.xdf),剩下的事情全部交给XDF对比工具(FndXdfCmp)去为我们完成。

FndXdfCmp使用语法:

java oracle.apps.fnd.odf2.FndOdfCmp < schema_name> < schema_Pwd> < apps_schema> < apps_pwd><jdbc_protocol> <jdbc_conn_string> <object_type> <xdf_filename> <xsl_directory> [CLONE_UN=<apps_clone_schema_id> CLONE_PW=<apps_clone_schema_password> SPEC_UN=<table_specs_schema_id> SPEC_PW=<table_specs_schema_password>] <xsl file Dir>[deferred=<list>] [dropCr=<list>] [logfile=<filename>] [changedb=<y/n>] [data_sec_vpd=<y/n>] [parallel_index_threshold=<block count>] [index_category=<small/large/both>]

关键的几个参数:

  1. schema_name:对象所属模式的名称
  2. schema_pwd:对象所属模式的密码
  3. jdbc_protocol:jdbc协议(thin 或 oci8)
  4. jdbc_conn_string:数据库连接信息,可以使用Net8格式的连接或者hostname:port:sid的格式
  5. object_type:对比的对象类型,有table, mview, mviewlog, index, view, sequence, synonym
  6. xdf_filename:对象描述文件的名称
  7. xsl_directory:用来做XSLT转化时所要求的xsl文件目录,通常使用$FND_TOP/patch/115/xdf/xsl 或者 $FND_TOP/admin/xdf/xsl

其它参数可以直接在命令行中输入java oracle.apps.fnd.odf2.FndXdfCmp后打印出来看

将xhu.xhu_blog_article_2201表的数据文件传到目标系统下,使用appl操作系统用户登录到EBS中间服务器,运行如下的命令来将xhu.xhu_blog_article_2201表移植到新的环境中:

java oracle.apps.fnd.odf2.FndXdfCmp XHU XHU APPS APPS thin ebs12.hand-china.com:1522:VIS04 table xhu_blog_article_2201.xdf $FND_TOP/patch/115/xdf/xsl

使用Xdf移植的数据库表会自动注册到EBS里面,即注册到FND_TABLES表中,成功执行后可以登录数据库查看数据库对象的情况,

SELECT * FROM dba_objects WHERE object_name = upper(‘xhu_blog_article_2201′);
SELECT * FROM fnd_tables WHERE table_name = upper(‘xhu_blog_article_2201′);

3,Xdf使用步骤

一般二次开发过程中都需要从开发环境将数据库对象移植到其它环境,或者标准化开发完成的程序安装到客户环境中,使用Xdf工具的步骤:

  1. 在开发环境中设计好数据库对象
  2. 使用描述对象生成工具FndXdfGen生成数据库对象的描述文件(.xdf)
  3. 将对象描述文件传到目标环境下或者打包发给相关人员
  4. 运行对象对比工具FndXdfCmp来在目标数据库中生成对象或修改对象

这样一来移植工作就完成了,通过Xdf工具来进行数据库对象的移植,整个移植的核心纽带则转移到了对象描述文件(.xdf)上面,而这个文件只是以XML的方式记录了对象的信息,和目标系统没有任何关系,这样使数据库对象的移植变得灵活简单并高效。

Oracle EBS数据定义移植工具:Xdf(XML Object Description File)的更多相关文章

  1. Oracle ebs 数据脱敏

    https://blog.csdn.net/pan_tian/article/details/16120351Data Masking可对数据进行不可逆的去身份化后,再用于非生产环境,同时自动保留引用 ...

  2. oracle EBS 资产定义

    一.资产定义也就是江项目任务上的特定(能生成资产的)物料按照一定格式生成资产信息,其中每个独立物料生成一条资产,具体操作步骤如下: 1.省本部库存超级用户系统内生成领料单.审批领料单.最后进行出库处理 ...

  3. Oracle EBS 数据访问权限集

    SELECT frv.responsibility_name, fpo.profile_option_name, fpo.user_profile_option_name, fpv.profile_o ...

  4. ORACLE SQL数据类型转换

    ORACLE SQL数据类型转换 2019-04-07 22:35:53 广小白 阅读数 429更多 分类专栏: Oracle   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议, ...

  5. Oracle EBS R12 XML数据表格的Excel脚本报表

    http://www.cnblogs.com/quanweiru/archive/2012/07/28/2612680.html 一.概述 在EBS系统中,报表是一个非常重要的客户化开发内容,也是系统 ...

  6. Oracle EBS使用adpatch工具打patch过程【Z】

    Oracle EBS使用adpatch工具打patch过程 从Metalink下载补丁 登陆到Metalink(https://support.oracle.com),Oracle内部用户可以使用AR ...

  7. Oracle EBS使用adpatch工具打patch过程(hotpatch mode)

    目录(?)[-] 从Metalink下载补丁 上传解压 使用adpatch来打patch完整的日志 检查patch是否打成功 adpatch的日志文件 补充关于Oracle EBS Patch的类型 ...

  8. ORACLE EBS xml publisher 报表输出字符字段前部"0"被EXCEL自动去掉问题

    http://www.cnblogs.com/lzsu1989/archive/2012/10/17/2728528.html   Oracle  EBS 提供多种报表的开发和输出形式,由于MS Ex ...

  9. Oracle language types(语言种类) 表的相关操作 DDL数据定义语言

    数据定义语言 Data Definition Language Statements(DDL)数据操纵语言 Data Manipulation Language(DML) Statements事务控制 ...

随机推荐

  1. 100-days: twenty-three

    Title: The surprising connection between single women and gentrification connection n.连接,联系,关系:连接点; ...

  2. 随机获得id的方法

    public String generateUUID() { String uuid = UUID.randomUUID().toString(); uuid = uuid.replace(" ...

  3. ubuntu18.04微信小程序学习笔记

    安装微信小程序开发工具 安装 https://github.com/cytle/wechat_web_devtools 创建快捷方式 sudo nautilus //在/usr/share/appli ...

  4. webpack 打包问题

    Project is running at http://localhost:8080/webpack output is served from /dist/webpack: wait until ...

  5. java 判断null和空

    判断null和空 org.apache.commons.lang3 if(StringUtils.isBlank(valuationMeasureUnitName)){ }

  6. Python 的经典设计格言,格言来源于 Python 但不限于 Python

    The Zen of Python, by Tim Peters Beautiful is better than ugly. Explicit is better than implicit. Si ...

  7. TJOI2010中位数

    中位数 上面是题目链接. 这一题比较水. 思路非常显然. 用mid查询时,只要返回中间值就行了. 主要就是add操作. 我们肯定不能插在末尾,然后用系统快排,这样只有30分. 那么正确的操作应该是二分 ...

  8. linux上安装mysql5.7

    1.下载tar包,这里使用wget从官网下载 wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2. ...

  9. Spring-bean的自动装配

    bean的自动装配:可以让一个bean对象自动的引用其他bean byType:按照类型进行装配.  缺点:如果在IOC容器中存在多个类型相同的bean的时候,会出现异常. <bean id=& ...

  10. Concept Drift(概念漂移)

    Introdution concept drift在机器学习.时间序列以及模式识别领域的一种现象.如果是在机器学习领域中,这个概念指的就是一个模型要去预测的一个目标变量,概念漂移就是这个目标变量随着时 ...