在實際的EBS二次開發中,我們經常會碰到需要在各個環境之間移植二次開發的程序對象以及數據定義,如在EBS二次開發中并發請求的定義會涉及到:可執行、并發程序、值集、請求組等的定義,定義需要從開發環境、測試環境、UAT環境一直到正式環境,開發人員完成一個并發請求開發后,同樣的定義需要在多個環境中手工完成,勢必導致中間出現錯誤,導致浪費很多時間來進行檢查,無形中增加了工作量;而更多的時候系統管理人員和開發人員是分離的,開發人員和系統管理人員之間還需要進行任務的交接,進一步增加了程序移植工作的難度和工作量。
而FNDLOAD則是為了移植EBS數據定義而誕生的工具,它可以移植定義在AOL中的數據定義,如我們常見的并發程序、值集、預置文件等等,嚴格來說它可以實現任意兩個Oracle數據庫之間數據的移植,有了這個工具,我們就無需在多個環境中重復進行手工定義了。
在Oracle EBS環境下,和FNDLOAD工具類似的移植工具隨處可見,并被廣泛應用,如用來移植BI Publisher報表模板定義的XDOLoader工具;工作流定義移植工具WFLOAD;數據庫對象移植工具ODF和XDF.
?
一、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命令工具的語法?
1.?Mode:有 DOWNLOAD和UPLOAD
2.?Configfile:就是FNDLOAD用來控制上傳和下載的控制文件(lct)
3.?Datafile:是生成的數據文件
4.?Entity:是要多控制文件中的哪部分數據移植(數據可以嵌套,如并發請求包括了引用的值集)
5.?Param:是用來控制數據移植的參數,可以多個
?
二、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 –
三、如何移植多語言定義數據
AOL模塊中很多數據的定義都是多語言的,如并發請求的定義,而通過FNDLOAD來進行數據的移植一次只包括一個語言的信息,因此如果定義存在多語言的情況,需要按照語言環境進行多次移植,即生成多個數據文件(ldt),在控制文件的目錄下,如$FND_TOP/patch/115/import/下存在US和ZHS這樣的語言目錄,控制文件內容的開始指定了語言環境, 如LANGUAGE = “US”,而很多控制文件并未分多語言版本,這個需要在運行FNDLOAD命令的時候指定語言環境,所以使用控制文件的時候無需使用指定語言的版本,只要在運行FNDLOAD命令的時候通過下面的命令來切換語言環境
1 2 3 4 5 6 7 | --中文 NLS_LANG= "AMERICAN_AMERICA.AL32UTF8" export NLS_LANG--英文 NLS_LANG= "SIMPLIFIED CHINESE_CHINA.AL32UTF8" export NLS_LANG |
通過上面的環境設置后再執行FNDLOAD,生成的數據文件就是相應語言環境的定義,只要切換不同的語言環境執行下載,多次生成數據文件就實現了多語言數據的生成;然后執行多次上載操作即可.
NLS_LANG可以通過下面的SQL查詢獲得:
1 2 3 4 | SELECT '"' || nls_language || '_' || nls_territory || '.' || VALUE || '"' nls_langFROM fnd_languages, v$nls_parametersWHERE language_code IN ('US', 'ZHS')AND parameter = 'NLS_CHARACTERSET'; |
四、開發員常用FNDLOAD控制文件列表
模塊 | 文件名 | 描述 |
FND | afcpprog.lct | 可執行、并發程序、值集、彈性域 |
FND | afcpexec.lct | 可執行程序 |
FND | afattach.lct | 附件 |
FND | afcpreqg.lct | 請求組 |
FND | afcprset.lct | 請求集 |
FND | afffload.lct | 值集、關鍵性彈性域和描述性彈性域及相關安全性設置 |
FND | aflvmlu.lct | Lookups |
FND | afmdmsg.lct | 消息 |
FND | afscprof.lct | profile options 預制文件 |
FND | afscursp.lct | Application users,User Responsibilities,Security groups,Applications,Application Responsibilities and Exclusion Functions |
FND | afsload.lct | FORM, FUNCTION, MENU, ENTRY, OBJECT, OBJECT_INSTANCE_SET, GRANT |
FND | affrmcus.lct | Form個性化定義 |
?
更多控制文件請到各模塊的patch/115/import目錄下去查找。