zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    八、JVM视角浅理解并发和锁
    七、JVM类加载机制
    六、JVM命令和工具
    五、jvm垃圾回收3(几种垃圾收集器)
    四、JVM垃圾回收2(垃圾收集算法)
    jvm引用类型
    三、JVM垃圾回收1(如何寻找垃圾?)
    【原创】Android 对话框的使用
    【原创】CMD常用命令:解决实际问题
    【原创】开机出现grub rescue,修复办法
  • 原文地址:https://www.cnblogs.com/ricoo/p/15424725.html
Copyright © 2011-2022 走看看