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

简介: 整理自:http://www.orapub.cn/posts/3296.htmlhttp://oracleseeker.com/2009/09/29/about_xml_object_description_file_xdf_of_oracle_database...

整理自:http://www.orapub.cn/posts/3296.html

http://oracleseeker.com/2009/09/29/about_xml_object_description_file_xdf_of_oracle_database_objects_migration_tool/

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那样需要控制文件而已。

Xdf_flow_chart

但是在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的方式记录了对象的信息,和目标系统没有任何关系,这样使数据库对象的移植变得灵活简单并高效。



相关文章
|
5天前
|
SQL 存储 Oracle
Oracle的PL/SQL定义变量和常量:数据的稳定与灵动
【4月更文挑战第19天】在Oracle PL/SQL中,变量和常量扮演着数据存储的关键角色。变量是可变的“魔术盒”,用于存储程序运行时的动态数据,通过`DECLARE`定义,可在循环和条件判断中体现其灵活性。常量则是不可变的“固定牌”,一旦设定值便保持不变,用`CONSTANT`声明,提供程序稳定性和易维护性。通过 `%TYPE`、`NOT NULL`等特性,可以更高效地管理和控制变量与常量,提升代码质量。善用两者,能优化PL/SQL程序的结构和性能。
|
1月前
|
XML 前端开发 数据格式
请描述如何使用`BeautifulSoup`或其他类似的库来解析 HTML 或 XML 数据。
【2月更文挑战第22天】【2月更文挑战第67篇】请描述如何使用`BeautifulSoup`或其他类似的库来解析 HTML 或 XML 数据。
|
2月前
|
SQL Oracle 关系型数据库
Oracle 将表中的数据查出更改某一字段的值后再插入该表
Oracle 将表中的数据查出更改某一字段的值后再插入该表
32 2
|
2月前
|
存储 Oracle NoSQL
Oracle 表空间、数据文件、schema的关系
Oracle 表空间、数据文件、schema的关系
38 2
|
4天前
|
Oracle 安全 关系型数据库
Oracle数据守卫(DG):数据的“守护者”与“时光机”
【4月更文挑战第19天】Oracle Data Guard保障数据安全,通过实时维护备库实现故障切换,保证业务连续性。它使用日志传输和应用保持数据同步,如同“时光机”,借助闪回技术能恢复误操作数据。此外,它还提供数据压缩、加密和故障转移等功能,提升数据库安全性与性能。作为数据管理员,理解并善用Data Guard是确保企业数据安全的关键。
|
4天前
|
存储 NoSQL Oracle
Oracle 12c的内存列存储:数据的“闪电侠”
【4月更文挑战第19天】Oracle 12c的内存列存储以超高速度革新数据处理,结合列存储与内存技术,实现快速查询与压缩。它支持向量化查询和并行处理,提升效率,但需合理配置以平衡系统资源。作为数据管理员,应善用此功能,适应业务需求和技术发展。
|
4天前
|
存储 Oracle 关系型数据库
Oracle 12c的多重索引:数据的“多维导航仪”
【4月更文挑战第19天】Oracle 12c的多重索引提升数据查询效率,如同多维导航仪。在同一表上创建针对不同列的多个索引,加速检索过程。虽然过多索引会增加存储和维护成本,但合理选择和使用索引策略,结合位图、函数索引等高级特性,能优化查询,应对复杂场景。数据管理员应善用这些工具,根据需求进行索引管理,支持企业数据分析。
|
4天前
|
存储 Oracle 数据管理
Oracle 12c的自动数据优化(ADO)与热图:数据管理的“瘦身”与“透视”艺术
【4月更文挑战第19天】Oracle 12c的ADO和热图技术革新数据管理。ADO智能清理无用数据,优化存储,提升查询速度,实现数据&quot;瘦身&quot;;热图则以直观的视觉表示展示数据分布和状态,助力识别性能瓶颈,犹如数据的&quot;透视&quot;工具。这两项技术结合,强化数据管理,为企业业务发展保驾护航。
|
4天前
|
SQL Oracle 关系型数据库
Oracle的PL/SQL游标属性:数据的“导航仪”与“仪表盘”
【4月更文挑战第19天】Oracle PL/SQL游标属性如同车辆的导航仪和仪表盘,提供丰富信息和控制。 `%FOUND`和`%NOTFOUND`指示数据读取状态,`%ROWCOUNT`记录处理行数,`%ISOPEN`显示游标状态。还有`%BULK_ROWCOUNT`和`%BULK_EXCEPTIONS`增强处理灵活性。通过实例展示了如何在数据处理中利用这些属性监控和控制流程,提高效率和准确性。掌握游标属性是提升数据处理能力的关键。
|
5天前
|
SQL Oracle 安全
Oracle的PL/SQL循环语句:数据的“旋转木马”与“无限之旅”
【4月更文挑战第19天】Oracle PL/SQL中的循环语句(LOOP、EXIT WHEN、FOR、WHILE)是处理数据的关键工具,用于批量操作、报表生成和复杂业务逻辑。LOOP提供无限循环,可通过EXIT WHEN设定退出条件;FOR循环适用于固定次数迭代,WHILE循环基于条件判断执行。有效使用循环能提高效率,但需注意避免无限循环和优化大数据处理性能。掌握循环语句,将使数据处理更加高效和便捷。

相关课程

更多

推荐镜像

更多