關於COMMIT和ROLLBACK語句的使用注意事項

qiujun發表於2007-08-30

作者:莫懷遠

1. COMMIT WORK 語句執行許多與任務的同步執行有關的功能。
ROLLBACK WORK語句“取消”任務同步執行的所有請求。
COMMIT WORK 語句進行下列處理:
• 執行所有由PERFORM ON COMMIT 請求的FORM 例程。
按優先順序的升序執行這些例程,順序由 PERFORM 語句的LEVEL 引數指定。
• 如果請求,觸發所有更新任務功能模組。
• 如果請求,觸發所有後臺任務功能模組。
• 觸發資料庫提交(依次釋放資料庫鎖定)。
• 清空反轉日誌。
反轉日誌包含應用更改前的表格快照。執行反轉時,該快照用來將表格復位到原值。
• 關閉所有開啟的資料庫游標。
• 將所有TEMSE 物件寫入永久性檔案或資料庫。
TEMSE檔案是由於效能原因在執行事務期間快取的臨時序列檔案。TEMSE檔案的示例有假離線物件或作業日誌。
• 將時間片計數器(用於訪問工作程式)復位到0。
系統中的時間片計數器限制工作程式中程式執行的時間量。如果程式常常超過時間片限制,則可以使用COMMIT WORK為程式獲得更多時間。
但是,要達此目的,必須很容易將處理分為更小單元(全部或沒有操作)。然後可以在每個單元之後插入COMMIT WORK 語句。當然處理單元邏輯上必須獨立,因為在發生錯誤時,不能取消前面的單元中所提交的更新。
ROLLBACK WORK“拋棄”當前事務的所有更新:
• 拋棄所有以前用PERFORM ON COMMIT 登入的FORM例程
• 在更新任務佇列中將所有以前請求的更新任務功能標記為錯誤
• 拋棄所有以前請求的後臺任務功能
• 從緩衝儲存中刪除所有TEMSE物件(臨時 連續檔案,如假離線物件和作業日誌)
• 觸發資料庫反轉操作(依次釋放所有資料庫鎖定)
• 關閉所有開啟的資料庫游標
2. 以下情況需使用使用COMMIT和ROLLBACK語句。
1) 透過INSERT、UPDATE和MODIFY語句對資料庫進行更新事務後。
2) 執行BAPI處理後。一般使用BAPI函式BAPI_TRANSACTION_COMMIT(內含COMMIT語句) 。
3. 如果要保證資料庫中當前所作的更改立即被確認,那麼就必須使用COMMIT WORK 語句結束LUW。COMMIT WORK 在程式程式碼中標記了 LUW(幾個作業聯絡在一起形成作業的邏輯單元) 結束並啟動更新任務。在COMMIT WORK 語句以後,對資料庫所作的所有更改都不能再取消。但是,如果在LUW 中出現了錯誤,就必須取消已經執行的部分。這意味著當前沒有任何插入的行能 永久地儲存在資料庫中。要撤銷當前LUW 對資料庫的更改,請使用ROLLBACK WORK,它將取消前一次資料庫提交後的所有更改。
4. COMMIT WORK [AND WAIT(同步)].
如果使用AND WAIT選項,那麼在程式繼續執行以前,它要等到更新任務的結束。如果更新是成功的,SY-SUBRC 就設定為0。如果 SY-SUBRC 返回一個非零值,就沒有成功的儲存所作的更改。
ROLLBACK WORK.
如果對更改的取消是成功的,SY-SUBRC 就設定為0。如果 SY-SUBRC 返回一個非零值,就沒有成功地取消所作的更改

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/90072/viewspace-967021/,如需轉載,請註明出處,否則將追究法律責任。

相關文章