Oracle EBS二次開發中,每每會建立不少數據庫對象,如表、同義詞、視圖等,這些數據庫對象是二次開發配置管理內容很重要的一部分,一般狀況下咱們會使用腳本文件來記錄這些數據庫對象的建立、變動和維護,隨着開發的進行須要對這些對象的腳本進行版本管理;更重要的是將這些數據庫對象從開發環境移植到其它環境的時候面臨着諸多的問題:java
- 數據庫對象自己並無實現版本管理
- 須要安裝人員執行多個數據庫對象腳本
- 安裝人員必須瞭解必定的數據庫知識才能執行腳本
- 腳本的安裝的方式容易出錯,若是設計的腳本和目標系統有所出入,頗有可能致使更新出錯或帶來災難
- 須要分別爲多個目標系統定製安裝腳本,工做量很是大
- 腳本的格式沒有統一的標準
做爲開發人員很但願有一個工具來完成數據庫對象在兩個數據庫之間的移植,而無需咱們爲了避免同的數據庫維護不一樣的對象腳本,避免上面所描述的問題,下面咱們來看看Oracle爲咱們所提供的解決方案: XDF(XML Object Description File)工具。數據庫
XDF工具的原理和FNDLOAD是同樣的,一樣是從源系統中獲取須要移植對象的元數據信息後生成數據文件(.xdf),而後在目標系統中使用數據文件根據目標系統的狀況生成相應的操做來新增或者修改數據庫對象。服務器
目前版本的Xdf(EBS R12.1.1)能夠完成如下數據庫對象的移植:oracle
- Table
- Index
- View
- Sequence
- Synonym
- Mview
- Mviewlog
1、ODF(Object Description File)介紹app
在講解XDF工具以前咱們必須先了解一下它的前身ODF(Object Description File),ODF是在11i以前Oracle爲EBS系統提供的數據庫對象移植工具,它有兩個組件組成:工具
1. ODF Generator(adodfgen):用來從源系統中生成數據庫對象的描述信息文件(.odf),如生成PO_HEADERS_ALL這個表的定義信息。可是這個工具做爲Oracle內部使用歷來沒有對外公開過,導致咱們沒法使用這個工具,咱們所可以獲得的odf數據文件都是Oracle做爲補丁類型提供給咱們的,所以對於咱們二次開發移植來講根本沒法使用ODF這個工具。post
2. ODF Comparison(adodfcmp):用來在目標系統中經過對比odf數據文件和目標系統數據庫中對象來生成並執行相應命令,odf文件中包括了數據庫對象全部的信息,若是它發現目標系統中不存在這個對象的時候就建立它;若是目標系統中已經存在這個對象並版本低於odf文件中描述的對象就修改對象的定義。這個工具在不少補丁或者Oracle解決問題的時候會用來進行odf數據文件的對比操做。spa
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 目錄下
2、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的方式記錄了對象的信息,和目標系統沒有任何關係,這樣使數據庫對象的移植變得靈活簡單並高效。