SAP幫助文檔上提到:當一個buffered資料庫表被修改時,其buffer也會自動被更新,包括其他應用伺服器執行個體上針對該表的buffer也會以異步的方式自動被更新。
Buffer表被修改的記錄會被寫入一個中央日志表DDLOG. Buffer的異步更新就是應用伺服器定期地檢視該表是否存在新的記錄而實作的。
我處于好奇,想在SE16裡檢視DDLOG的記錄長什麼樣,發現notebook這個字段的類型為LRAW:
為了做測試,我選擇了一個buffer表,CRMC_PROC_TYPE, 往裡面寫入了一些資料:
然後SE16,找不到我剛才插入的記錄,記載在這張表的什麼地方了:
我當然可以用SELECT * 把包括notebook字段在内的所有資料都讀取到ABAP内表裡,但是我不知道如何解析類型為LRAW的字段,是以讀出來也沒用。
我國有句古話:毒蛇出沒之處,七步之内必有解藥。同樣,DDLOG這張表存儲的資料,如果沒有對應的讀取API,那麼這些資料也毫無存在的價值。
是以對DDLOG執行where used list操作,必定可以找到讀取該表的API.
果然找到了一些有用的函數和類:
一些和這個DDLOG資料庫表有關的操作和工具:
ABAP資料庫表buffer同步監控工具RSDBBUF3
解析DDLOG-NOTEBOOK字段的函數:SBUF_SEL_DDLOG_RECS
用法如下:
DATA: lt_sync_tab TYPE sync_tab_t,
lv_tstamp_from TYPE ddlog-timestamp,
lv_tstamp_to TYPE ddlog-timestamp.
lv_tstamp_from = '20160621061955'.
lv_tstamp_to = '20160623000000'.
CALL FUNCTION 'SBUF_SEL_DDLOG_RECS'
EXPORTING
from_time = lv_tstamp_from
to_time = lv_tstamp_to
max_cnt = 10000
keep_db2_tstmp = 'X'
CHANGING
sync_tab = lt_sync_tab.
SORT lt_sync_tab BY tabname.
使用這個函數,就能查到我之前修改資料庫表CRMC_PROC_TYPE後自動寫入表DDLOG的記錄了。