在實際的EBS二次開發中,我們經常會碰到需要在各個環境之間移植二次開發的程式對象以及資料定義,如在EBS二次開發中并發請求的定義會涉及到:可執行、并發程式、值集、請求組等的定義,定義需要從開發環境、測試環境、UAT環境一直到正式環境,開發人員完成一個并發請求開發後,同樣的定義需要在多個環境中手工完成,勢必導緻中間出現錯誤,導緻浪費很多時間來進行檢查,無形中增加了工作量;而更多的時候系統管理人員和開發人員是分離的,開發人員和系統管理人員之間還需要進行任務的交接,進一步增加了程式移植工作的難度和工作量。
而FNDLOAD則是為了移植EBS資料定義而誕生的工具,它可以移植定義在AOL中的資料定義,如我們常見的并發程式、值集、預置檔案等等,嚴格來說它可以實作任意兩個Oracle資料庫之間資料的移植,有了這個工具,我們就無需在多個環境中重複進行手工定義了。
在Oracle EBS環境下,和FNDLOAD工具類似的移植工具随處可見,并被廣泛應用,如用來移植BI Publisher報表模闆定義的XDOLoader工具;工作流定義移植工具WFLOAD;資料庫對象移植工具ODF和XDF.
04年在做一個項目的時候,我簡單寫過一個通過FNDLOAD工具在多個EBS環境間移植程式定義的文檔,其中主要描述了如何使用FNDLOAD将AOL子產品中的資料從一個環境移植到另一個環境,下面将從如何掌握并應用FNDLOAD這個工具的角度補充說明。
一、FNDLOAD介紹
資料移植的目的無非是将一個EBS系統下資料庫中的某個表中的資料按照條件篩選出來後傳到另外EBS系統下資料庫中對應的表中。FNNDLOAD的根本原理就是将資料從源資料庫中下載下傳到資料檔案中,然後再通過FNDLOAD将資料檔案上傳到目标資料庫中。
由于兩個資料庫系統不能保證是連接配接的,無法采用Oracle的DBLink技術,是以FNDLOAD采用了資料檔案作為兩個系統間傳遞的中介,而為了完成資料的下載下傳和上傳,FNDLOAD引入了控制檔案(lct):用來定義移植那張表中的資料列,并分DOWNLOAD和UPLOAD模式定義資料抽取和更新的邏輯,DOWNLOAD用在源資料庫環境下,UPLOAD應用于目标資料庫環境下。
控制檔案是FNDLOAD工具的核心,下面我們來分析一下并發請求移植的控制檔案($FND_TOP/patch/115/import/afcpprog.lct)的部分内容:
控制檔案由4部分組成:
1. 實體(entity):說明控制檔案是用來移植什麼的,如上面的是 PROGRAM,一個控制檔案中可以有多個實體,實體可以實作嵌套,實體和後面的section對應,一般一個實體對應一個資料庫表
2. 段(section):定義實體的資料結構,定義了移植時資料的結構和類型,但不會包含内部的ID,如使用APPLICATION_SHOURT_NAME代替APPLICATION_ID,一般和實體對應的資料庫表的定義一緻,如例子中的EXECUTABLE和PROGRAM段,運作FNDLOAD指令時需要指定段名
3. 下載下傳(download):定義了下載下傳資料時所使用的SQL語句,SQL語句中以冒号(:)打頭的變量是FNDLOAD的變量,在運作指令時可傳入參數的值來顯示資料的提取,如:APPLICATION_SHORT_NAME既是限制并發請求所屬的應用
上載(upload):定義了上載資料時所執行的SQL語句或者PLSQL代碼,如fnd_concurrent_programs_pkg.TRANSLATE_ROW和fnd_concurrent_programs_pkg.LOAD_ROW方法
FNDLOAD指令工具的文法
FNDLOAD apps/appspwd 0 Y mode configfile datafile entity [ param ... ]
1. Mode:有 DOWNLOAD和UPLOAD
2. Configfile:就是FNDLOAD用來控制上傳和下載下傳的控制檔案(lct)
3. Datafile:是生成的資料檔案
4. Entity:是要多控制檔案中的哪部分資料移植(資料可以嵌套,如并發請求包括了引用的值集)
5. Param:是用來控制資料移植的參數,可以多個
下面是FNDLOAD的流程描述圖

二、FNDLOAD使用步驟
使用FNDLOAD來移植資料的步驟如下:
1. 找到控制檔案,這是非常關鍵的一步,很多網上文章介紹使用FNDLOAD來移植AOL子產品的資料,很少提到其它内容,實際上FNDLOAD可以用來移植資料庫中的任何資料,隻是說如果Oracle沒有提供控制檔案(lct)的話,需要自己來制作控制檔案會得不償失,而随着FNDLOAD的廣泛應用,很多子產品的都提供了FNDLOAD的功能,控制檔案一般都放在各子產品下的patch/115/import/目錄下,如AOL子產品的在$FND_TOP/patch/115/import下,總帳子產品$GL_TOP/patch/115/import下;進入控制檔案目錄後具體某個控制檔案是用來進行什麼資料的移植那就隻能打開檔案看裡面的實體部分、DOWNLOAD和UPLOAD部分了
2. 檢視DOWNLOAD部分中SQL語句的參數,通過檢視SQL語句得出可以使用哪些參數來限制資料的下載下傳,如afcpprog.lct控制檔案中并發程式的限制可以通過APPLICATION_SHORT_NAME來限制,這樣就可以限制隻下載下傳某個應用下的并發,同時可以使用多個參數,參數通過key=value的方式提供,參數之間用空格隔開
3. 運作FNDLOAD指令的下載下傳模式從源系統下載下傳資料,如下載下傳并發請求:FNDLOAD apps/apps 0 Y DOWNLOAD afcpprog.lct prog.ldt PROGRAM APPLICATION_SHORT_NAME=XHU CONCURRENT_PROGRAM_NAME=XHUPOR00
4. 使用ftp工具下載下傳源系統生成的資料檔案(ldt)
5. 使用ftp工具上傳資料檔案(ldt)到目标系統
6. 運作FNDLOAD上載模式将資料從資料檔案上載到目标資料庫中,如上傳上面下載下傳的并發請求: FNDLOAD apps/apps 0 Y UPLOAD afcpprog.lct prog.ldt –
[postads200x200]
三、如何移植多語言定義資料
AOL子產品中很多資料的定義都是多語言的,如并發請求的定義,而通過FNDLOAD來進行資料的移植一次隻包括一個語言的資訊,是以如果定義存在多語言的情況,需要按照語言環境進行多次移植,即生成多個資料檔案(ldt),在控制檔案的目錄下,如$FND_TOP/patch/115/import/下存在US和ZHS這樣的語言目錄,控制檔案内容的開始指定了語言環境, 如LANGUAGE = “US”,而很多控制檔案并未分多語言版本,這個需要在運作FNDLOAD指令的時候指定語言環境,是以使用控制檔案的時候無需使用指定語言的版本,隻要在運作FNDLOAD指令的時候通過下面的指令來切換語言環境
通過上面的環境設定後再執行FNDLOAD,生成的資料檔案就是相應語言環境的定義,隻要切換不同的語言環境執行下載下傳,多次生成資料檔案就實作了多語言資料的生成;然後執行多次上載操作即可.
NLS_LANG可以通過下面的SQL查詢獲得:
四、開發員常用FNDLOAD控制檔案清單
子產品
檔案名
描述
FND
afcpprog.lct
可執行、并發程式、值集、彈性域
afcpexec.lct
可執行程式
afattach.lct
附件
afcpreqg.lct
請求組
afcprset.lct
請求集
afffload.lct
值集、關鍵性彈性域和描述性彈性域及相關安全性設定
aflvmlu.lct
Lookups
afmdmsg.lct
消息
afscprof.lct
profile options 預制檔案
afscursp.lct
Application users,User Responsibilities,Security groups,Applications,Application Responsibilities and Exclusion Functions
afsload.lct
FORM, FUNCTION, MENU, ENTRY, OBJECT, OBJECT_INSTANCE_SET, GRANT
affrmcus.lct
Form個性化定義
更多控制檔案請到各子產品的patch/115/import目錄下去查找。
附件是一些具體使用的執行個體:http://download.csdn.net/detail/changyanmanman/8245747