ABAP-數據歸檔


https://blogs.sap.com/2020/06/29/sap-archiving-step-by-step-guide-for-beginners/

https://blogs.sap.com/2016/09/28/step-by-step-archiving-of-material-documents/

http://www.itpub.net/thread-1922626-1-1.html

 

歸檔項目一般分為幾步:

1. 數據統計分析,涉及tcode:

DB02( 可以拉出系統top100的表和index )

TAANA(指定表/指定字段統計數據量,按需求維度做分析)

2. 歸檔之前的全局配置

FILE:配置邏輯路徑/物理路徑的mapping,歸檔文件的命名規則;

2. 歸檔對象的確認

DB15(歸檔對象和表的對應關系)

AOBJ(使用系統的歸檔對象) 配置歸檔的表,歸檔文件的大小,歸檔的變式等等;

*******************************************************************************************************************************************************************************

歸檔核心的就兩步:寫歸檔文件 + 刪除數據庫表中的內容。

但是歸檔之后用戶會有查詢的需求,所以還需要一個讀歸檔文件的動作。

如果歸檔文件特別大(幾十G甚至上T),遍歷歸檔文件查詢是不可接受的,就會引出歸檔索引表的需求(SARJ:archive info structure)。

如果失誤將不能歸檔的數據歸檔了,那么還有一個歸檔文件恢復重載至數據庫的需求。

*******************************************************************************************************************************************************************************

當我們新建歸檔對象的時候,就可以針對上述的需求,制定相應的歸檔相關動作:

ZARCHIVE_WRITE 

ZARCHIVE_DELETE

ZARCHIVE_READ

ZARCHIVE_RELOAD

ZARCHIVE_CONSTRUCT_INDEX(對應SARI->status->fill structures的這個動作,用於並行)

ZARCHIVE_DECONSTRUCT_INDEX(對應SARI->status->empty structures的這個動作,用於並行)

*******************************************************************************************************************************************************************************

 

針對特定的歸檔對象,還會有單獨的配置,比如:

FI_DOCUMNT的指定科目的保留周期,相關二級索引表的保留周期等;

MM_MATBEL的指定工廠的保留周期;

……

3. 歸檔執行

SARA中的write和delete動作

4. 歸檔后

SARA->Management中查看某次歸檔session的狀態等;

AS_AFB可以查看歸檔文件中的內容;

SARE中的歸檔信息查詢(權限控制表AIND_STR9);

數據庫在線重整(或離線重整);

 

*******************************************************************************************************************************************************************************

 

TCODE:

AOBJ

SARA 

ACLA

本文檔主要講解 SAP 中數據的歸檔,先介紹幾個在 SAP 中歸檔需用到的幾個功能及其設置,
然后再實例講解一個自己 ADD-ON 表的數據的歸檔完整過程。
TCODE: AOBJ
該功能用於設置數據歸檔所對應的 Archiving Object。以下以 FI_DOCUMENT 為例。
Archiving Object 包括以下幾部分:
Structure definition
Tables from Which You Only Delete Entries
Maintain network graphic
Customizing Settings
Archiving Classes Used
Read Programs
Customizing transactions
Info Tables for Archive Files
Exit routine assignment in generation
一個 Archiving Object 是一系列相互關聯的業務數據依照某標准,定期從當前系統中進行抽
取,歸檔和刪除。
一個 Archiving Object 必須包含歸檔和刪除程序,其它的程序如重載、報表、預處理、過賬
處理都是可選的。
在 SAP 系統中, FI 憑證分布在多個不同的表中,例如 BSEG, BKPF 等。在數據歸檔時,所
有屬於該數據對象的表記錄均被寫入歸檔文件,然后再刪除數據庫中的數據。
結構定義( Struction Definition): Archiving Object 中的 Struction Definition 用於描述在進行
數據歸檔時,哪些表里的數據將會被處理。
Record No:顯示順序。
Parent segment:第一行記錄該字段應為空。
Segment:歸檔層次中的子 Segment。
Structure:如果輸入一個結構名稱,系統將使用這個結構進行轉換,
客戶化定制( Customizing Setting):
技術設置,例如文件大小,提交數量,刪除程序變式,連接存儲系統。
用戶也可以在 TCODE: SARA 中維護這些技術設置。
使用的歸檔類( Archiving Classed Used):
使得關聯到業務對象的子對象在歸檔時一起考慮並歸檔。
例如:會計憑證的歸檔包括了相關的 SAPSCRIPT 文本。
歸檔類通過 TCODE: ACLA 進行管理。

讀取程序( Read Program):
輸入的這些讀取程序,在使用 TCODE: SARA 時,這些程序可以被調用來讀取歸檔數
據。
客戶化事務( Customizing transactions):
在客戶化訂制中,可以輸入相關歸檔數據的一些標准,這些標准在歸檔時將被考慮。
數據歸檔的主要標准有業務數據在數據庫中的停留時間和主數據的刪除標志。
停留時間是指數據在歸檔和刪除前在數據庫中保留的時間長度。
本例將使用三個表,對應結構如下圖所示

表 ZARCHDEPART

表 ZARCHLINE

表 ZARCHSTAFF

以下操作使用 TCODE:AOBJ 進行設置

一、創建一個 Archiving Object,如下圖,其中的寫、刪除、讀取程序將在后面講述。

二、設置 Archiving Object 的 Structure definition

三、設置 Customizing Settings

四、設置 Read Programs


以下將詳細講述一下數據歸檔時,寫數據程序和刪除數據程序的程序邏輯。
寫數據邏輯:
.Archive_open_for_write
.Do
.Archive_new_object
.Archive_put_record
.TEXT_ARCHIVE_OBJECT
.Archive_save_object
.Enddo
.Archive_write_statistics
.Archive_close_file
Archive_open_for_write:作用是在內存中准備一個容器,該功能確保和所有的 archiving
classes 的通訊。
Archive_put_record:寫入數據至之前准備的容器中。
Archive_save_object:從容器中取出數據
Archive_close_file:釋放所有資源,如果設置了刪除程序“自動開始”標志,則開始刪除程
序。
以下為 ZDEPTARCHW 程序代碼:

字數太多,請參考: http://www.ikanter.com/html/Knowledge/ABAP/2015/0522/37.html
以下為 ZDEPTARCHD 程序代碼:

  1 *&---------------------------------------------------------------------*
  2 *& Report ZDEPTARCHD
  3 *&
  4 *&---------------------------------------------------------------------*
  5 *&
  6 *&
  7 *&---------------------------------------------------------------------*
  8 REPORT ZDEPTARCHD.
  9 CONSTANTS: LC_OBJECT LIKE ARCH_OBJ-OBJECT VALUE 'ZDEPTARCH'.
 10 DATA: LV_HANDLE LIKE SY-TABIX,
 11 LV_COMMIT_CNT LIKE ARCH_USR-ARCH_COMIT,
 12 LV_OBJECT_CNT TYPE I,
 13 LV_DELCNT TYPE I,
 14 LV_CNT TYPE I.
 15 DATA: DEPART_TAB TYPE ZARCHDEPART OCCURS 0,
 16 DEPART_ITEM TYPE ZARCHDEPART,
 17 DEPART_TAB_DEL TYPE ZARCHDEPART OCCURS 0,
 18 LINE_TAB TYPE ZARCHLINE OCCURS 0,
 19 LINE_TAB_DEL TYPE ZARCHLINE OCCURS 0,
 20 STAFF_TAB TYPE ZARCHSTAFF OCCURS 0,
 21 STAFF_TAB_DEL TYPE ZARCHSTAFF OCCURS 0.
 22 DATA: LV_DOCUMENT TYPE ADMI_RUN-DOCUMENT,
 23 LV_ARCHIVE_KEY TYPE ADMI_FILES-ARCHIV_KEY,
 24 LV_OBJECTS_TO_DELETE TYPE I.
 25 SELECTION-SCREEN BEGIN OF BLOCK SB1 WITH FRAME TITLE SB1_TEXT.
 26 PARAMETERS P_DELTST LIKE ARCH_PROCESSING_OPTIONS-DELETE_TESTMODE
 27 RADIOBUTTON GROUP SB1 DEFAULT 'X'.
 28 PARAMETERS P_DELPRD LIKE ARCH_PROCESSING_OPTIONS-DELETE_PRODMODE
 29 RADIOBUTTON GROUP SB1.
 30 SELECTION-SCREEN END OF BLOCK SB1.
 31 INITIALIZATION.
 32 PERFORM STANDARD_OPT_DELETEPRG_INIT.
 33 START-OF-SELECTION.
 34 *****打開一個歸檔會話用於刪除數據
 35 CALL FUNCTION 'ARCHIVE_OPEN_FOR_DELETE'
 36 EXPORTING
 37 OBJECT = LC_OBJECT
 38 TEST_MODE = P_DELTST
 39 IMPORTING
 40 
 41 
 42 ARCHIVE_HANDLE = LV_HANDLE.
 43 *****從歸檔對象中得到客戶自定義數據
 44 CALL FUNCTION 'ARCHIVE_GET_CUSTOMIZING_DATA'
 45 EXPORTING
 46 OBJECT = LC_OBJECT
 47 IMPORTING
 48 COMMIT_COUNT_FOR_DELETE_PRG = LV_COMMIT_CNT.
 49 *****得到所有要刪除的對象
 50 CALL FUNCTION 'ARCHIVE_GET_INFORMATION'
 51 EXPORTING
 52 ARCHIVE_HANDLE = LV_HANDLE
 53 IMPORTING
 54 ARCHIVE_DOCUMENT = LV_DOCUMENT
 55 ARCHIVE_NAME = LV_ARCHIVE_KEY.
 56 SELECT SINGLE OBJ_COUNT FROM ADMI_FILES INTO LV_OBJECTS_TO_DELETE
 57 WHERE DOCUMENT = LV_DOCUMENT
 58 AND ARCHIV_KEY = LV_ARCHIVE_KEY.
 59 *****從歸檔文件中循環取得對象的數據
 60 CLEAR LV_OBJECT_CNT.
 61 DO.
 62 CALL FUNCTION 'ARCHIVE_GET_NEXT_OBJECT'
 63 EXPORTING
 64 ARCHIVE_HANDLE = LV_HANDLE
 65 EXCEPTIONS
 66 END_OF_FILE = 01.
 67 IF SY-SUBRC = 1.
 68 EXIT.
 69 ENDIF.
 70 ADD 1 TO LV_OBJECT_CNT.
 71 REFRESH DEPART_TAB.
 72 CALL FUNCTION 'ARCHIVE_GET_TABLE'
 73 EXPORTING
 74 ARCHIVE_HANDLE = LV_HANDLE
 75 RECORD_STRUCTURE = 'ZARCHDEPART'
 76 ALL_RECORDS_OF_OBJECT = 'X'
 77 TABLES
 78 TABLE = DEPART_TAB.
 79 
 80 APPEND LINES OF DEPART_TAB TO DEPART_TAB_DEL.
 81 * REFRESH LINE_TAB.
 82 * CALL FUNCTION 'ARCHIVE_GET_TABLE'
 83 * EXPORTING
 84 * ARCHIVE_HANDLE = LV_HANDLE
 85 * RECORD_STRUCTURE = 'ZARCHLINE'
 86 * ALL_RECORDS_OF_OBJECT = 'X'
 87 * TABLES
 88 * TABLE = LINE_TAB.
 89 *
 90 * APPEND LINES OF LINE_TAB TO LINE_TAB_DEL.
 91 *
 92 * REFRESH STAFF_TAB.
 93 * CALL FUNCTION 'ARCHIVE_GET_TABLE'
 94 * EXPORTING
 95 * ARCHIVE_HANDLE = LV_HANDLE
 96 * RECORD_STRUCTURE = 'ZARCHLINE'
 97 * ALL_RECORDS_OF_OBJECT = 'X'
 98 * TABLES
 99 * TABLE = STAFF_TAB.
100 *
101 * APPEND LINES OF STAFF_TAB TO STAFF_TAB_DEL.
102 IF LV_OBJECT_CNT = LV_COMMIT_CNT.
103 PERFORM DELETE_FROM_TABLE USING LV_HANDLE
104 P_DELTST
105 LV_OBJECT_CNT
106 DEPART_TAB_DEL.
107 DESCRIBE TABLE DEPART_TAB_DEL LINES LV_CNT.
108 ADD LV_OBJECT_CNT TO LV_DELCNT.
109 CLEAR LV_OBJECT_CNT.
110 REFRESH DEPART_TAB_DEL.
111 ENDIF.
112 ENDDO.
113 IF LV_OBJECT_CNT >= 1.
114 PERFORM DELETE_FROM_TABLE USING LV_HANDLE
115 P_DELTST
116 LV_OBJECT_CNT
117 DEPART_TAB_DEL.
118 ADD LV_OBJECT_CNT TO LV_DELCNT.
119 CLEAR LV_OBJECT_CNT.
120 
121 ENDIF.
122 *****創建統計列表
123 CALL FUNCTION 'ARCHIVE_WRITE_STATISTICS'
124 EXPORTING
125 ARCHIVE_HANDLE = LV_HANDLE
126 STATISTICS_ONLY_PER_FILE = 'X'.
127 *****關閉歸檔會話
128 CALL FUNCTION 'ARCHIVE_CLOSE_FILE'
129 EXPORTING
130 ARCHIVE_HANDLE = LV_HANDLE.
131 *******************************************************
132 FORM DELETE_FROM_TABLE USING VALUE(P_HANDLE) LIKE SY-TABIX
133 VALUE(P_TESTMODE) LIKE P_DELTST
134 VALUE(P_OBJECT_CNT) LIKE SY-DBCNT
135 VALUE(PT_DEPART_TAB_DEL) LIKE
136 DEPART_TAB_DEL.
137 DATA: LS_STAT_ITAB TYPE ARCH_STAT,
138 LT_STAT_ITAB TYPE TABLE OF ARCH_STAT,
139 LT_DEPART_AUX TYPE TABLE OF ZARCHDEPART,
140 LV_DBCNT TYPE SY-DBCNT.
141 REFRESH LT_STAT_ITAB.
142 IF P_TESTMODE IS INITIAL.
143 *****如果在生產模式中則刪除數據
144 DELETE ZARCHDEPART FROM TABLE PT_DEPART_TAB_DEL.
145 LV_DBCNT = SY-DBCNT.
146 LOOP AT PT_DEPART_TAB_DEL INTO DEPART_ITEM.
147 DELETE FROM ZARCHLINE WHERE DEPARTMENT = DEPART_ITEM-DEPARTMENT.
148 DELETE FROM ZARCHSTAFF WHERE DEPARTMENT = DEPART_ITEM-DEPARTMENT.
149 ENDLOOP.
150 ELSE.
151 *****如果是測試模式則從數據庫中選擇數據
152 SELECT * FROM ZARCHDEPART INTO TABLE LT_DEPART_AUX
153 FOR ALL ENTRIES IN PT_DEPART_TAB_DEL
154 WHERE DEPARTMENT = PT_DEPART_TAB_DEL-DEPARTMENT.
155 LV_DBCNT = SY-DBCNT.
156 ENDIF.
157 LS_STAT_ITAB-TABNAME = ' '.
158 LS_STAT_ITAB-COUNT = P_OBJECT_CNT.
159 MSN:jsfeiyu@163.com 鄭泉
160 APPEND LS_STAT_ITAB TO LT_STAT_ITAB.
161 LS_STAT_ITAB-TABNAME = 'ZARCHDEPART'.
162 LS_STAT_ITAB-COUNT = LV_DBCNT.
163 APPEND LS_STAT_ITAB TO LT_STAT_ITAB.
164 *****在每個COMMIT WORK之前提供統計數據
165 CALL FUNCTION 'ARCHIVE_GIVE_STATISTICS'
166 EXPORTING
167 ARCHIVE_HANDLE = P_HANDLE
168 TABLES
169 TABLE = LT_STAT_ITAB.
170 COMMIT WORK.
171 ENDFORM. " DELETE_FROM_TABLE
172 *******************************************************
173 FORM STANDARD_OPT_DELETEPRG_INIT.
174 PERFORM STANDARD_OPT_INIT.
175 ENDFORM. "STANDARD_OPT_DELETEPRG_INIT
176 *&---------------------------------------------------------------------*
177 *& Form STANDARD_OPT_INIT
178 *&---------------------------------------------------------------------*
179 * text
180 *----------------------------------------------------------------------*
181 FORM STANDARD_OPT_INIT.
182 DATA: LW_DD04V LIKE DD04V.
183 CALL FUNCTION 'DDIF_DTEL_GET'
184 EXPORTING
185 NAME = 'ARCH_PROCESSING_OPTIONS_TEXT'
186 LANGU = SY-LANGU
187 IMPORTING
188 DD04V_WA = LW_DD04V.
189 SB1_TEXT = LW_DD04V-SCRTEXT_L.
190 ENDFORM. "STANDARD_OPT_INIT
191 讀取歸檔數據邏輯
192 。 Archive_open_for_read
193 。 Archive_get_next_object
194 。 Archive_get_next_record
195 。 Archive_close_file
View Code

 

以下為 ZDEPTARCHR 程序代碼:

  1 *&---------------------------------------------------------------------*
  2 *& Report ZDEPTARCHR
  3 *&
  4 *&---------------------------------------------------------------------*
  5 *&
  6 *&
  7 *&---------------------------------------------------------------------*
  8 REPORT ZDEPTARCHR.
  9 TABLES:ZARCHDEPART,ZARCHLINE,ZARCHSTAFF.
 10 SELECT-OPTIONS:S_DEPART FOR ZARCHDEPART-DEPARTMENT.
 11 *****變量定義
 12 DATA: DEPART_TAB TYPE TABLE OF ZARCHDEPART,
 13 DEPART_TAB_TMP TYPE TABLE OF ZARCHDEPART,
 14 LINE_TAB TYPE TABLE OF ZARCHLINE,
 15 LINE_TAB_TMP TYPE TABLE OF ZARCHLINE,
 16 STAFF_TAB TYPE TABLE OF ZARCHSTAFF,
 17 STAFF_TAB_TMP TYPE TABLE OF ZARCHSTAFF.
 18 DATA: LV_HANDLE LIKE SY-TABIX.
 19 FIELD-SYMBOLS: <LS_DEPART> TYPE ZARCHDEPART,
 20 <LS_LINE> TYPE ZARCHLINE,
 21 <LS_STAFF> TYPE ZARCHSTAFF.
 22 START-OF-SELECTION.
 23 *****打開相關的歸檔文件
 24 CALL FUNCTION 'ARCHIVE_OPEN_FOR_READ'
 25 EXPORTING
 26 OBJECT = 'ZDEPTARCH'
 27 IMPORTING
 28 ARCHIVE_HANDLE = LV_HANDLE
 29 EXCEPTIONS
 30 OTHERS = 1.
 31 IF sy-subrc <> 0.
 32 MESSAGE ID sy-msgid TYPE 'I' NUMBER sy-msgno
 33 WITH sy-msgv1 sy-msgv2 sy-msgv3 sy-msgv4.
 34 
 35 EXIT.
 36 ENDIF.
 37 *****從歸檔文件中循環,得到文件對象
 38 DO.
 39 CALL FUNCTION 'ARCHIVE_GET_NEXT_OBJECT'
 40 EXPORTING
 41 ARCHIVE_HANDLE = LV_HANDLE
 42 EXCEPTIONS
 43 END_OF_FILE = 1.
 44 IF SY-SUBRC <> 0.
 45 EXIT.
 46 ENDIF.
 47 *****從數據容器中得到數據 ZARCHDEPART
 48 CALL FUNCTION 'ARCHIVE_GET_TABLE'
 49 EXPORTING
 50 ARCHIVE_HANDLE = LV_HANDLE
 51 RECORD_STRUCTURE = 'ZARCHDEPART'
 52 ALL_RECORDS_OF_OBJECT = 'X'
 53 TABLES
 54 TABLE = DEPART_TAB_TMP
 55 EXCEPTIONS
 56 END_OF_OBJECT = 0.
 57 LOOP AT DEPART_TAB_TMP ASSIGNING <LS_DEPART>
 58 WHERE DEPARTMENT IN S_DEPART.
 59 APPEND <LS_DEPART> TO DEPART_TAB.
 60 ENDLOOP.
 61 REFRESH DEPART_TAB_TMP.
 62 *****從數據容器中得到數據 ZARCHLINE
 63 CALL FUNCTION 'ARCHIVE_GET_TABLE'
 64 EXPORTING
 65 ARCHIVE_HANDLE = LV_HANDLE
 66 RECORD_STRUCTURE = 'ZARCHLINE'
 67 ALL_RECORDS_OF_OBJECT = 'X'
 68 TABLES
 69 TABLE = LINE_TAB_TMP
 70 EXCEPTIONS
 71 END_OF_OBJECT = 0.
 72 LOOP AT LINE_TAB_TMP ASSIGNING <LS_LINE>
 73 WHERE DEPARTMENT IN S_DEPART.
 74 
 75 APPEND <LS_LINE> TO LINE_TAB.
 76 ENDLOOP.
 77 REFRESH LINE_TAB_TMP.
 78 *****從數據容器中得到數據 ZARCHSTAFF
 79 CALL FUNCTION 'ARCHIVE_GET_TABLE'
 80 EXPORTING
 81 ARCHIVE_HANDLE = LV_HANDLE
 82 RECORD_STRUCTURE = 'ZARCHSTAFF'
 83 ALL_RECORDS_OF_OBJECT = 'X'
 84 TABLES
 85 TABLE = STAFF_TAB_TMP
 86 EXCEPTIONS
 87 END_OF_OBJECT = 0.
 88 LOOP AT STAFF_TAB_TMP ASSIGNING <LS_STAFF>
 89 WHERE DEPARTMENT IN S_DEPART.
 90 APPEND <LS_STAFF> TO STAFF_TAB.
 91 ENDLOOP.
 92 REFRESH STAFF_TAB_TMP.
 93 ENDDO.
 94 LOOP AT DEPART_TAB ASSIGNING <LS_DEPART>.
 95 WRITE: / 'DEPARTMENT :', <LS_DEPART>-DEPARTMENT.
 96 LOOP AT LINE_TAB ASSIGNING <LS_LINE> WHERE DEPARTMENT =
 97 <LS_DEPART>-DEPARTMENT.
 98 WRITE: /' LINE :',<LS_LINE>-LINE.
 99 LOOP AT STAFF_TAB ASSIGNING <LS_STAFF> WHERE DEPARTMENT =
100 <LS_DEPART>-DEPARTMENT AND LINE = <LS_LINE>-LINE.
101 WRITE: /' STAFF :',<LS_STAFF>-STAFF.
102 ENDLOOP.
103 ENDLOOP.
104 SKIP.
105 ENDLOOP.
106 *****關閉歸檔視圖
107 CALL FUNCTION 'ARCHIVE_CLOSE_FILE'
108 EXPORTING
109 ARCHIVE_HANDLE = LV_HANDLE.
View Code

 

 

以下執行 SARA 進行數據歸檔過程:
先看各表中存有的數據:

執行 SARA

選擇 Write 按鈕選擇維護一個變式,設置開始時間,設置打印參數,然后執行.

選擇 SARA 界面中的 DELETE 按鈕,並分別設置歸檔選擇,執行時間和打印設置,並執行。

 

以上操作執行完后,在數據庫中已不存在我們剛開始看到的這些數據了。
執行 SARA 界面中的 READ 按鈕,讀取歸檔的數據。如下圖所示。

 

字數太多請參考: http://www.ikanter.com/html/Knowledge/ABAP/2015/0522/37.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM