天天看點

Oracle EBS資料定義移植工具:Xdf(XML Object Description File)

整理自: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二次開發中,往往會建立很多資料庫對象,如表、同義詞、視圖等,這些資料庫對象是二次開發配置管理内容很重要的一部分,通常情況下我們會使用腳本檔案來記錄這些資料庫對象的建立、變更和維護,随着開發的進行需要對這些對象的腳本進行版本管理;更重要的是将這些資料庫對象從開發環境移植到其它環境的時候面臨着諸多的問題:

資料庫對象本身并沒有實作版本管理

需要安裝人員執行多個資料庫對象腳本

安裝人員必須了解一定的資料庫知識才能執行腳本

腳本的安裝的方式容易出錯,如果設計的腳本和目标系統有所出入,很有可能導緻更新出錯或帶來災難

需要分别為多個目标系統定制安裝腳本,工作量非常大

腳本的格式沒有統一的标準

作為開發人員很希望有一個工具來完成資料庫對象在兩個資料庫之間的移植,而無需我們為了不同的資料庫維護不同的對象腳本,避免上面所描述的問題,下面我們來看看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來實作

文法如下:

關鍵的幾個參數:

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

指令正常執行後會看到如下的日志資訊輸出:

從上面的日志資訊中可以看到表、表上的索引、表的序列(按照<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使用文法:

schema_name:對象所屬模式的名稱

schema_pwd:對象所屬模式的密碼

object_type:對比的對象類型,有table, mview, mviewlog, index, view, sequence, synonym

xdf_filename:對象描述檔案的名稱

其它參數可以直接在指令行中輸入java oracle.apps.fnd.odf2.FndXdfCmp後列印出來看

将xhu.xhu_blog_article_2201表的資料檔案傳到目标系統下,使用appl作業系統使用者登入到EBS中間伺服器,運作如下的指令來将xhu.xhu_blog_article_2201表移植到新的環境中:

使用Xdf移植的資料庫表會自動注冊到EBS裡面,即注冊到FND_TABLES表中,成功執行後可以登入資料庫檢視資料庫對象的情況,

3,Xdf使用步驟

一般二次開發過程中都需要從開發環境将資料庫對象移植到其它環境,或者标準化開發完成的程式安裝到客戶環境中,使用Xdf工具的步驟:

在開發環境中設計好資料庫對象

使用描述對象生成工具FndXdfGen生成資料庫對象的描述檔案(.xdf)

将對象描述檔案傳到目标環境下或者打包發給相關人員

運作對象對比工具FndXdfCmp來在目标資料庫中生成對象或修改對象

這樣一來移植工作就完成了,通過Xdf工具來進行資料庫對象的移植,整個移植的核心紐帶則轉移到了對象描述檔案(.xdf)上面,而這個檔案隻是以XML的方式記錄了對象的資訊,和目标系統沒有任何關系,這樣使資料庫對象的移植變得靈活簡單并高效。