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_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
以下为 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.
以下执行 SARA 进行数据归档过程:
先看各表中存有的数据:
执行 SARA
选择 Write 按钮选择维护一个变式,设置开始时间,设置打印参数,然后执行.
选择 SARA 界面中的 DELETE 按钮,并分别设置归档选择,执行时间和打印设置,并执行。
以上操作执行完后,在数据库中已不存在我们刚开始看到的这些数据了。
执行 SARA 界面中的 READ 按钮,读取归档的数据。如下图所示。
字数太多请参考: http://www.ikanter.com/html/Knowledge/ABAP/2015/0522/37.html