原地址:https://blog.csdn.net/cymm_liu/article/details/13015849

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

数据库对象本身并没有实现版本管理
需要安装人员执行多个数据库对象脚本
安装人员必须了解一定的数据库知识才能执行脚本
脚本的安装的方式容易出错,如果设计的脚本和目标系统有所出入,很有可能导致更新出错或带来灾难
需要分别为多个目标系统定制安装脚本,工作量非常大
脚本的格式没有统一的标准
作为开发人员很希望有一个工具来完成数据库对象在两个数据库之间的移植,而无需我们为了不同的数据库维护不同的对象脚本,避免上面所描述的问题,下面我们来看看Oracle为我们所提供的解决方案:XDF(XML Object Description File)工具。

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

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

Table
Index
View
Sequence
Synonym
Mview
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个组件构成:

对象描述生成工具(FndXdfGen):用来从源系统中生成数据库对象的描述信息文件(.xdf)
对象对比工具(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=]
关键的几个参数:

apps_schema:apps模式名称,一般为apps
apps_pwd:apps模式的密码
jdbc_conn_string:数据库连接信息,可以使用Net8格式的连接或者hostname:port:sid的格式
object_name:指定要导出信息的数据库对象名称,trigger和sequence两种类型可以使用百分号(%)来一次性提取多个,其它类型需要明确指定名称,一次提取一个对象
xsl_directory:用来做XSLT转化时所要求的xsl文件目录,通常使用$FND_TOP/patch/115/xdf/xsl 或者 $FND_TOP/admin/xdf/xsl
jdbc_protocol:jdbc协议(thin 或 oci8)
object_type:导出的对象类型,有table, mview, mviewlog, index, view, sequence, synonym
owner_app_shortname:对象所属的应用简称
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结构的,有兴趣的可以用记事本打开看看里面的内容。

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

以XML格式描述对象信息
将相关联的对象一起提取出来,如表上的索引、策略和触发器等
不管在源系统中数据库表是否注册到EBS,生成描述信息都包含了这的信息
对象都具有自己的版本号,如表和表中的列都有自己的版本号
对象都有哈希值
系统中很多数据库对象的描述文件都保存在各模块的 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>]
关键的几个参数:

schema_name:对象所属模式的名称
schema_pwd:对象所属模式的密码
jdbc_protocol:jdbc协议(thin 或 oci8)
jdbc_conn_string:数据库连接信息,可以使用Net8格式的连接或者hostname:port:sid的格式
object_type:对比的对象类型,有table, mview, mviewlog, index, view, sequence, synonym
xdf_filename:对象描述文件的名称
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工具的步骤:

在开发环境中设计好数据库对象
使用描述对象生成工具FndXdfGen生成数据库对象的描述文件(.xdf)
将对象描述文件传到目标环境下或者打包发给相关人员
运行对象对比工具FndXdfCmp来在目标数据库中生成对象或修改对象
这样一来移植工作就完成了,通过Xdf工具来进行数据库对象的移植,整个移植的核心纽带则转移到了对象描述文件(.xdf)上面,而这个文件只是以XML的方式记录了对象的信息,和目标系统没有任何关系,这样使数据库对象的移植变得灵活简单并高效。
--------------------- 
作者:长烟慢慢 
来源:CSDN 
原文:https://blog.csdn.net/cymm_liu/article/details/13015849?utm_source=copy 
版权声明:本文为博主原创文章,转载请附上博文链接!

Oracle EBS数据定义移植工具:Xdf(XML Object Description File)相关推荐

  1. Oracle EBS数据定义移植工具:FNDLOAD

    在实际的EBS二次开发中,我们经常会碰到需要在各个环境之间移植二次开发的程序对象以及数据定义,如在EBS二次开发中并发请求的定义会涉及到:可执行.并发程序.值集.请求组等的定义,定义需要从开发环境.测 ...

  2. oracle请求界面,Oracle EBS如何enable 请求界面 View XML按钮

    Oracle EBS如何enable 请求界面 View XML按钮,查看请求,然后点诊断(Diagnostic)后,有个View XML按钮,不过有时可用,有时确实 查看请求,然后点诊断(Diagn ...

  3. oracle模板数据文件,Oracle EBS如何通过命令上传XML/BI Publisher数据定义文件和模板文件...

    EBS如何通过命令上传XML/BI Publisher数据定义文件和模板文件 以apdxxx1i用户登录系统,执行如下命令: (如果db和ap部署在不同节点,jdbc连接需要使用db节点的主机名) 导 ...

  4. oracle sqlldr 数据导入时报错:Field in data file exceeds maximum length完美解决

    使用oracle sqlldr进行数据导入时报Field in data file exceeds maximum length错误的解决办法: 一种是数据字段确实比数据库中的字段要长,这中错误需要调 ...

  5. oracle sqlldr 数据导入时报错:Field in data file exceeds maximum length

    使用oracle sqlldr进行数据导入时报Field in data file exceeds maximum length错误: 在ctl文件中设置的数据长度小于实际数据长度 如: column ...

  6. sql数据类型转换oracle,ORACLE SQL数据类型转换

    ORACLE SQL数据类型转换 开发工具与关键技术:Oracle sql*plus PLSQL Developer 撰写时间:2019年3月25日 下面要说的是,如何将不同类型的数据进行转换处理 这 ...

  7. ORACLE SQL数据类型转换

    ORACLE SQL数据类型转换 开发工具与关键技术:Oracle sql*plus PLSQL Developer 撰写时间:2019年3月25日 下面要说的是,如何将不同类型的数据进行转换处理 这 ...

  8. oracle系统计算工资,基于Oracle EBS的工资核算系统的设计与实现

    摘要: 随着信息技术的发展,越来越多的企业将会实施ERP系统.因各企业的业务差异,对系统将进行一定的二次开发.目前ERP实施过程中的二次开发存在诸多问题,经常导致项目延期及实施费用超出预算,所以总结一 ...

  9. oracle ebs r12 nls,Oracle EBS R12 - 如何通过命令上传XML/BI Publisher数据定义文件和模板文件...

    Oracle EBS R12 - EBS如何通过命令上传XML/BI Publisher数据定义文件和模板文件 以apdxxx1i用户登录系统,执行如下命令: (如果db和ap部署在不同节点,jdbc ...

  10. MySQL与Oracle的数据迁移注意事项,另附转换工具链接

    将数据从MySQL迁移到Oracle的注意事项 1. 自动增长的数据类型处理 MYSQL有自动增长的数据类型,插入记录时不用操作此字段,会自动获得数据值.ORACLE没有自动增长的数据类型,需要建立一 ...

最新文章

  1. Bootstrap方法为页面添加一个弹出框
  2. 半年总结(2018-10)
  3. 跨链(2)跨链技术“侧链(Sidechains)”
  4. VScode中Python的交互式命令环境使用笔记
  5. [零基础,全开源]基于web的远程深度学习服务搭建
  6. python flask 上传下载 api_python – 使用Flask上传和下载文件
  7. 漫话:如何给女朋友解释什么是3PC?
  8. thinkphp3 页面跳转外部链接_PPT超链接使用全攻略,你必懂的基本技巧!
  9. 【数学分析笔记05】数列极限的性质
  10. 《自己动手写操作系统》实践(一)
  11. 小程序对接腾讯云IM即时聊天
  12. 关于 attiny 85 http://digistump.com/package_digistump_index.json下载错误
  13. 测试记录2:APM32对比HK32
  14. 后台传给小程序的时间对象如何转为“YYYY/MM/DD“格式渲染
  15. 哪类人适合学软件测试?零基础能学测试吗?
  16. 【一牛鸣】大盘将持续震荡9.13
  17. 天梯赛座位 分配分数 20作者 陈越单位 浙江大学
  18. 智能管家App kotlin版——开发索引
  19. c 语言程序设计复习,C语言程序设计复习题
  20. 无线获能 — 系最适合低功耗及无源物联网能量收集技术

热门文章

  1. ssm教师教学评价系统(ssm教学评价系统教师ssm学生评教系统)JSP网上评教系统jsp评教系统
  2. Tapestry中listener监听方法传递参数的方式
  3. EdrawMax v12.0.2跨平台图表软件
  4. 黑苹果系统补丁 MacOS Unlocker for VMware 3.0 下载和解锁安装macOS X 10.14图文教程
  5. 那些年的草根站长,都被时代淘汰了吗?
  6. 《Android移动应用开发》 复习题(一)
  7. 《Python 编程从入门到实践》 ———— Python学习笔记完结篇
  8. data.getData()返回的Uri
  9. 如何在数字化领域脱颖而出?TOGAF®认证为你的职业成长赋能
  10. VAssistX使用总结