SAP歸檔:如何選擇最全的歸檔對象

SAP歸檔項目的歸檔對象的選擇方法一般是先從技術的角度找到最大的表(TOP50或TOP100),然後確定歸檔對象,最近被challenge了一個問題,如何保證這麼選擇的歸檔對象是最全的,即保證歸檔後在線數據的完整性,所以從另一個角度去考慮這件事情,先從系統中找到有數據存在的表然後再去找這些表所在的歸檔對象,得到初步的歸檔對象列表,這個列表應該涵蓋了目前系統中所有業務所具備的歸檔對象,然後對這些歸檔對象進行進一步篩選,即可得到完整的歸檔對象列表。其中完成第一步的程序源代碼如下:

 REPORT ZGETTABLEHASENTRIES .
TYPE-POOLS: adk.
DATA: wa_segments TYPE segments_f,
      it_segments TYPE TABLE OF segments_f.
DATA: BEGIN OF wa_count,
        type(10) TYPE c,
        count    TYPE i,
      END OF wa_count,
      it_count LIKE TABLE OF wa_count,
      BEGIN OF wa_table,
        name TYPE DD02L-TABNAME,
      END OF wa_table,
      it_table LIKE TABLE OF wa_table.
DATA: it_arch_def TYPE TABLE OF arch_def,
      wa_arch_def TYPE arch_def.
DATA: it_objects TYPE ADK_CCMS_OBJECTS,
      wa_objects LIKE LINE OF it_objects.

************************************************************************
*        TYPE-POOLS
************************************************************************
* ALV specific data definitions
TYPE-POOLS:
   SLIS.
DATA:
*   IT_FIELDCAT  TYPE SLIS_T_FIELDCAT_ALV OCCURS 0 WITH HEADER LINE,
   IT_FIELDCAT  TYPE SLIS_FIELDCAT_ALV OCCURS 0 WITH HEADER LINE,
   IT_SORTINFO  TYPE SLIS_T_SORTINFO_ALV,
   IT_EVENTS    TYPE SLIS_T_EVENT,
   WA_COMMENTS  TYPE SLIS_T_LISTHEADER,
   WA_LAYOUT    TYPE SLIS_LAYOUT_ALV ,
   WA_PRINT     TYPE SLIS_PRINT_ALV,
   WA_VARIANT   TYPE DISVARIANT,
   V_REPID      TYPE SY-REPID,
   V_SAVE       VALUE  'A',
   V_RPT        TYPE  I.
SELECTION-SCREEN BEGIN OF BLOCK blk01.
  PARAMETERS: p_size TYPE i.
SELECTION-SCREEN END OF BLOCK blk01.
START-OF-SELECTION.
  PERFORM frm_get_table.
END-OF-SELECTION.
  PERFORM frm_output_alv.
*&---------------------------------------------------------------------*
*&      Form  frm_get_table
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_get_table.
  CLEAR it_arch_def.
  EXEC SQL PERFORMING frm_add_segments.
        SELECT
        owner, NVL(partition_name, segment_name), segment_type,
        tablespace_name, header_file, header_block, bytes/1024,
        blocks, extents, initial_extent/1024, next_extent/1024,
        min_extents, max_extents, pct_increase, segment_name, 0
    FROM dba_segments INTO :wa_segments
    WHERE  segment_type like :'TABLE'
  ENDEXEC.
ENDFORM.                    " frm_get_table
*&---------------------------------------------------------------------*
*&      Form  frm_add_segments
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_add_segments.
  APPEND wa_segments TO it_segments.
* count table count
  wa_count-type = 'ALL'.
  wa_count-count = 1.
  COLLECT wa_count INTO it_count.
  IF wa_segments-kbytes > 100.
    wa_count-type = '100'.
    wa_count-count = 1.
    COLLECT wa_count INTO it_count.
  ENDIF.
  IF wa_segments-kbytes > p_size.
    wa_count-type = '1000'.
    wa_count-count = 1.
    COLLECT wa_count INTO it_count.
    wa_table-name = wa_segments-sn.
    APPEND wa_table TO it_table.
    DATA: lt_objects LIKE it_objects.
    CALL FUNCTION 'ADK_CCMS_GET_OBJECTS'
      EXPORTING
        TABLE                            = wa_table-name
        DELETE_OBJECTS_ONLY              = 'X'
      TABLES
        OBJECTS                          = lt_objects
      EXCEPTIONS
        TABLE_NOT_FOUND                  = 1
        POOL_OR_CLUSTER_NOT_IN_USE       = 2
        NO_OBJECT_FOUND                  = 3
        TABLE_IS_NOT_TRANSPARENT         = 4
        OTHERS                           = 5
              .
    IF SY-SUBRC <> 0.
    ENDIF.
    APPEND LINES OF lt_objects TO it_objects.
*    SELECT * APPENDING TABLE it_arch_def
*             FROM arch_def
*            WHERE son = wa_segments-sn AND
*                  delete_flg <> 'X'.
  ENDIF.
ENDFORM.                    " frm_add_segments
*&---------------------------------------------------------------------*
*&      Form  frm_write_list
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_write_list.

ENDFORM.                    " frm_write_list
*&---------------------------------------------------------------------*
*&      Form  frm_output_alv
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM frm_output_alv.
  SORT it_objects BY object.
  DELETE ADJACENT DUPLICATES FROM it_objects COMPARING object.
  PERFORM FORM_BUILD_FIELDCAT.
* Call ABAP List Viewer (ALV)
  CALL FUNCTION 'REUSE_ALV_GRID_DISPLAY'
       EXPORTING
            i_callback_program       = V_REPID
            IT_FIELDCAT              = IT_FIELDCAT[]
       TABLES
            T_OUTTAB                 = it_objects.
ENDFORM.                    " frm_output_alv
*&---------------------------------------------------------------------*
*&      Form  FORM_BUILD_FIELDCAT
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM FORM_BUILD_FIELDCAT.
  CLEAR IT_FIELDCAT.
  IT_FIELDCAT-FIELDNAME    = 'OBJECT'.
  IT_FIELDCAT-SELTEXT_M    = TEXT-001.
  APPEND IT_FIELDCAT.
  IT_FIELDCAT-FIELDNAME    = 'OBJTEXT'.
  IT_FIELDCAT-SELTEXT_M    = TEXT-002.
  APPEND IT_FIELDCAT.

ENDFORM.                    " FORM_BUILD_FIELDCAT

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章