天天看點

SAP abap與資料庫

以下為個人在平常中整理出來的,abap與資料之間的關系,有新認識之後,再繼續補充。

2013/11/05:

1.sap 資料庫表的主索引是:資料庫表的主鍵,他的好處是可以提升讀取資料庫表的速度,但是會增加更新資料庫表的時間。特别在建立次級索引的時候,一定要使用經常使用的字段進行設定。

2.sap中常用資料庫類型:透明表(transparent table),共享表(pooled table),簇表(cluster table)。

透明表是和DB層的physical table相對應的表,而後兩者是不對應到DB表的;然後多個簇表(cluster table)或者共享表(pooled table),組成一個table cluster或者table pool,tablecluster和table pool是實體層的DB.

注:簇表是邏輯上關聯的幾個表,在定義的時候配置設定給一個表簇、比如BSEG.

3.更新模式(DB和BDC)

   3-1.異步模式           在這個模式下,DIALOG程式和UPDATE程式各自運作。DIALOG程式寫請求到LOG TABLE,用一個COMMIT WORK來關閉LUW。UPDATE程式被COMMIT觸發并開始運作來處理這些請求,DIALOG程式繼續運作,不會等待UPDATE程式結束。UPDATE程式在特殊的UPDATE WORK PROCESS中運作。           當資料庫更新花費比較長的時間,使用者DIALOG需要較少的響應時間,異步更新顯得比較重要。在DIALOG進行中,異步更新是标準的技術,意思就是DIALOG程式一般會采取異步更新方式。 可以用VBLOG這個簇表來實作LOG TABLE,或者用透明表VBHDR,VBMOD,VBDATA,VBERROR來替代它。      3-2.同步模式           可以用COMMIT WORK AND WAIT語句來觸發一個同步更新,DIALOG程式要等待UPDATE程式結束再進行下一步的處理。           如果後續處理或者DIALOG程式的結束需要依靠更新的結果,這個時候要用同步模式。可以用SY-SUBRC來檢查同步更新的執行情況,在程式等待UPDATE程式執行的過程中,DIALOG程式的DIALOG WORK PROCESS被釋放,當更新結束之後,系統重新為DIALOG程式配置設定一個新的空閑的DIALOG WORK PROCESS做下一步的處理。      3-3.本地模式           使用SET UPDATE TASK LOCAL語句來使用UPDATE MODULE在本地執行,同樣的用COMMIT WORK來關閉SAP LUW,更新會在同一個DIALOG WORK PROCESS中進行,DIALOG程式等待更新完成(同步)。當LOCAL UPDATE完成之後,會送出一個顯示的DB COMMIT,DIALOG程式也得以繼續執行。             如果更新執行有錯誤,并且其中一個UPDATE MODULE發出一個終止程式的MESSAGE,系統會執行一個自動的DB ROLLBACK來丢棄這個SAP LUW所有的改變,并且DIALOG程式會終止,并彈出一個程式終止資訊。           LOCAL UPDATE模式中,更新請求不會寫到VBLOG表中,而是在MAIN MEMORY中,因為沒有IO的通路,其速度要比同步和異步模式的快一點。LOCAL UPDATE隻适合批量模式。           SET UPDATE TASK LOCAL工作到遇到COMMIT WORK語句,意思就是COMMIT WORK執行之後,SET UPDATE TASK LOCAL不再有效。

4.UPDATE MODULE的類型(V1&V2)

簡單而言,V1的更新類型比V2的級别要高, 是以V1比V2要先執行,同時V1包含同步,異步,本地的更新方式,V2隻能執行異步更新。   FUNCTION MODULE的processing type有三種,NORMAL FUCNTION MODULE,REMOTE-CAPABLE MODULE和UPDATE MODULE。每種下面又包含4種分類,立即啟動,立即啟動(不可重新開機),延遲啟動,collective run.前2種屬于V1類型,後兩種屬于V2類型。   UPDATE MODULE的類型決定了其處理的模式。所有的DIALOG程式裡的V1請求都會在單獨的DB LUW裡執行。隻有當V1執行成功之後才會處理V2請求,V2也會在單獨的LUWS裡執行。   V2類型的UPDATE MODULE處理的DB CHANGES一般都是緊接着V1的CHANGES(MAIN CHANGES)之後進行的。   V1類型的UPDATE MODULE分可重新啟動或不可重新啟動的兩種。V2類型的當發生錯誤的時候總是可以重新啟動,再次處理。   V2類型的COLLECTIVE RUN是SAP内部使用。相應的V2請求并不是在V1執行之後直接執行,而僅僅是在程式RSM13005被調用之後才執行。   V1請求都是由V1類型的UPDATE MODULE來建立的,對于同步異步模式來說,V1類型的UPDATE MODULE都會把請求建立到VBLOG這個TABLE,對于本地更新模式來說,V1請求是在MAIN MEMORY中建立的。V2類型的請求總是建立到VBLOG表中。   V1請求都會在一個V1類型的UPDATE WORK PROCESS(UPD)作為一個單獨的DB LUW來處理。如果V1更新成功,系統會删除V1的請求和所有在V1更新任務上的鎖,并設定一個DB COMMIT,然後觸發V2更新。   V2請求也是在一個V2類型的UPDATE WORK PROCESS(UPD2)作為一個單獨的DB LUW來處理。如果SAP系統沒有設定V2類型的UPDATE WORK PROCESS,則V2請求會在一個V1類型的UPDATE WORK PROCESS裡進行處理。如果V2請求處理成功,将會從VBLOG删除相關的請求,并設定一個DB COMMIT。V2請求一般都會運作在沒有鎖的情況下,因為這些鎖在V1完成之後就被删除掉了。是以,V2更新總是運作在沒有SAP LOCKS的情況下。   如果V1 UPDATE MODULE用一個終止消息終止了V1更新,那麼V1更新任務上的鎖講被删除,資料庫将ROLLBACK,一個E-MAIL會發送給建立這個LUW的使用者,并且V1請求在VBLOG表中被标記為不正确。V2更新也就不會被觸發。   當然如果V2 UPDATE MODULE終止了V2更新,同樣的,資料庫ROLLBACK,屬于這個SAP LUW的V2更新都不會執行,V2請求在VBLOG表中被标記為不正确。   DIALOG程式用_SCOPE = 2建立的鎖會被傳遞到V1更新任務中,在V1更新的結束,不管V1更新是否成功或者終止,都會把這些鎖自動删除。是以,在DIALOG程式中不能顯式的删除這些鎖(太早),或者在UPDATE MODULE裡删除(沒必要)。