SAP Knowledge Base Article - Preview

2724472 - SCU3 | Automatic checks and solution for most frequent issues in table logging

Symptom

You observe issues in connection with table logging


Read more...

Environment

This KBA applies for all SAP Products based on NetWeaver and S4H
Released for software component SAP_BASIS 740 as of patch SAPKB74019 and higher releases

Keywords

*&---------------------------------------------------------------------*
*& Report ZSLA_SCU3_CHECK_06
*&---------------------------------------------------------------------*
*& Automatic checks for most frequent issues in component BC-CUS-TOL-ALO
*&---------------------------------------------------------------------*
REPORT ZSLA_SCU3_CHECK_06.
PARAMETERS OBJECT TYPE OB_OBJECT.
PERFORM CHECK_LOGGING_SERVERS.
PERFORM CHECK_LOGGING_R3TRANS.
PERFORM CHECK_LOGGING_OBJECTS.
PERFORM CHECK_SIZE_DBTABLOG.
*&---------------------------------------------------------------------*
*&      Form  CHECK_LOGGING_SYSTEM
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHECK_LOGGING_SERVERS .
FIELD-SYMBOLS: <fs_system> TYPE alsystems.
DATA alsystems_TABLE TYPE STANDARD TABLE OF alsystems.
DATA lt_servers       TYPE TABLE OF msxxlist.
DATA lt_servers_row LIKE msxxlist.
DATA servername type string.
DATA par_name TYPE string VALUE 'rec/client'.
DATA par_value TYPE string.
DATA notice_par_value TYPE string.
DATA rc TYPE i.
DATA lt_servers_ipv6  TYPE TABLE OF msxxlist_v6.
DATA komma VALUE ','.
DATA BEGIN OF mandanten OCCURS 20.
DATA mdt LIKE t000-mandt.
DATA END OF mandanten.
DATA BEGIN OF mandant.
DATA mdt LIKE t000-mandt.
DATA END OF mandant.

CALL FUNCTION 'TH_SERVER_LIST'
 TABLES
   LIST                  = lt_servers
   LIST_IPV6             = lt_servers_ipv6
 EXCEPTIONS
   NO_SERVER_LIST        = 1
   OTHERS                = 2
          .
IF sy-subrc <> 0.
    Write 'An error has occured in TH_SERVER_LIST'.
  NEW-LINE.
  WRITE 'The program has cancelled'.
  EXIT.
ENDIF.

LOOP AT lt_servers INTO lt_servers_row.
  servername = lt_servers_row-NAME.
  CALL METHOD CL_SPFL_PROFILE_PARAMETER=>GET_VALUE
    EXPORTING
      SERVER_NAME = servername
      NAME        = par_name
    IMPORTING
      VALUE       = par_value
    RECEIVING
      RC          = RC
      .
  IF RC <> 0.
   Write 'An error has occured in CL_SPFL_PROFILE_PARAMETER=>GET_VALUE'.
   NEW-LINE.
   WRITE 'The program has cancelled'.
   EXIT.
  ENDIF.
  WRITE 'Check for profile parameter rec/client'.
  NEW-LINE.
"  WRITE: servername, par_name, par_value.
"  NEW-LINE.
  IF par_value = 'OFF'.
   WRITE: 'Logging is off in all clients for server', servername.
   NEW-LINE.
   WRITE 'Please read and use the manual instruction of SAP note 2437986 - SCU3 | How to enable logging in the system'.
   NEW-LINE.
  ELSEIF par_value = 'ALL'.
*   WRITE: 'Logging is on in all clients for server', servername.
   WRITE: 'Note that in the case of ''ALL'.
   WRITE: ',changes are recorded in the log file for all test clients'.
   WRITE: '(including SAP client 000) for an upgrade'.
  ELSEIF par_value CN '0123456789,'.
   WRITE 'Profile parameter rec/client is not specified correctly:'.
   WRITE PAR_VALUE.
   NEW-LINE.
   WRITE: 'Only these characters are allowed ''0123456789,'''.
   NEW-LINE.
  ELSE.
   SPLIT par_value AT komma INTO TABLE mandanten.
   LOOP AT mandanten INTO mandant
    WHERE mdt = sy-mandt.
    IF SY-SUBRC <> 0.
     WRITE: 'Logging is off for the logon client for server', servername.
     NEW-LINE.
     WRITE 'Please read and use the manual instruction of SAP note 2437986 - SCU3 | How to enable logging in the system'.
    ELSE.
     WRITE: 'No issue is dedected'.
     NEW-LINE.
    ENDIF.
   ENDLOOP.
  ENDIF.
  IF SY-TABIX > 1.
   IF notice_par_value <> par_value.
    WRITE 'Not all application servers have the same value for profile parameter rec/client'.
   ENDIF.
  ENDIF.
  notice_par_value = par_value.
ENDLOOP.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CHECK_LOGGING_R3TRANS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHECK_LOGGING_R3TRANS .
data  system                 like tmscsys-sysnam .
data  verbose.
data: ls_tp_params           type stms_tp_params,
      ls_tp_param            type stms_tp_param.

data: lv_domain              type tmsdomnam.
data: gv_system              like tmscsys-sysnam.
data: gv_alertid             type stms_tp_param-alert-id.
data: gv_cur_fld(30)         type c.
data: gt_tpparam             like tpparams       occurs 0.
data  gt_tpparam_row         like tpparams.
data: gt_tpparam_save        like tpparams       occurs 0.
DEFINE ALT_ANALYSE_ALERT.
  CALL FUNCTION 'TMS_ALT_ANALYSE_ALERT'
       EXPORTING
            IV_ALERT_ID      = &1
       EXCEPTIONS
            ALERT            = 1.
  IF SY-SUBRC <> 0.
    SY-SUBRC = 1. "ToDo
  ENDIF.
END-OF-DEFINITION.

SYSTEM = SY-SYSID.
* get domain name
  call function 'TMS_CFG_GET_DOMAIN_NAME'
       exporting
            iv_system        = system
       importing
            ev_domain_name   = lv_domain.

* read TPPARAM
  call function 'TMS_MGR_READ_TPPARAM'
       exporting
            iv_system        = system
            iv_domain        = lv_domain
            iv_monitor       = 'X'
            iv_verbose       = verbose
       importing
            es_tp_params     = ls_tp_params
       exceptions
            others           = 99.
WRITE '----------------------------------------------------------------------------------------------------------------------'.
WRITE '----------------------------------------------------------------------------------------------------------------------'.
NEW-LINE.
  if sy-subrc <> 0.
   Write 'An error has occured in TMS_MGR_READ_TPPARAM'.
   NEW-LINE.
   WRITE 'The program has cancelled'.
   EXIT.
  endif.
  WRITE 'Check for tp Parameter RECCLIENT'.
  NEW-LINE.
* fill global variables
  loop at ls_tp_params into ls_tp_param.
    gv_system    = ls_tp_param-system-sysnam.
    gt_tpparam[] = ls_tp_param-param.
    LOOP AT gt_tpparam INTO gt_tpparam_row WHERE NAME = 'RECCLIENT'.
    IF SY-SUBRC <> 0.
     WRITE 'tp Parameter  RECCLIENT is not defined'.
     NEW-LINE.
     WRITE 'Please read and use manual instruction of'.
     WRITE 'SAP note 1834956 - SCU3 | How to enable logging for importing to the system via tp (or R3trans)'.
    ELSEIF SY-SUBRC = 0.
     IF gt_tpparam_row-VALUE IS INITIAL.
      WRITE 'Logging via tp or R3trans is off'.
      NEW-LINE.
      WRITE 'Please read and use manual instruction of'.
      WRITE 'SAP note 1834956 - SCU3 | How to enable logging for importing to the system via tp (or R3trans)'.
     ELSEIF gt_tpparam_row-VALUE = 'ALL'.
      WRITE 'Logging via tp or R3trans is on'.
     ENDIF.
    ENDIF.
    ENDLOOP.
    exit.
  endloop.
  gt_tpparam_save = gt_tpparam.
  gv_alertid = ls_tp_param-alert-id.

* analyse alert
  alt_analyse_alert          ls_tp_param-alert-id.

ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CHECK_LOGGING_OBJECTS
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHECK_LOGGING_OBJECTS .
DATA TADIR_row LIKE TADIR.
DATA VCLSTRUC_TABLE TYPE STANDARD TABLE OF VCLSTRUC.
DATA VCLSTRUC_ROW LIKE VCLSTRUC.
DATA DD27S_TABLE TYPE STANDARD TABLE OF DD27S.
DATA DD27S_ROW LIKE DD27S.
DATA LOG_DATA_CHANGES LIKE DD09L-PROTOKOLL.
WRITE '----------------------------------------------------------------------------------------------------------------------'.
WRITE '----------------------------------------------------------------------------------------------------------------------'.
WRITE 'Check logging for maintenance objects'.
NEW-LINE.
SELECT SINGLE * FROM tadir INTO TADIR_ROW
 WHERE PGMID = 'R3TR'
 AND OBJECT IN ('VCLS', 'VIEW', 'TABL')
 AND OBJ_NAME EQ OBJECT.

IF SY-SUBRC = 0.
IF TADIR_ROW-OBJECT = 'VCLS'.
SELECT * FROM VCLSTRUC APPENDING TABLE VCLSTRUC_TABLE
 WHERE VCLNAME = OBJECT.
IF SY-SUBRC = 0.
 WRITE: 'View cluster:', OBJECT.
 NEW-LINE.
 LOOP AT VCLSTRUC_TABLE INTO VCLSTRUC_ROW.
  WRITE: ' Maintenance View', VCLSTRUC_ROW-OBJECT.
  NEW-LINE.
  SELECT * FROM DD27S APPENDING TABLE DD27S_TABLE
  WHERE VIEWNAME = VCLSTRUC_ROW-OBJECT.
  SORT DD27S_TABLE BY TABNAME.
  DELETE ADJACENT DUPLICATES FROM DD27S_TABLE
  COMPARING TABNAME.
  LOOP AT DD27S_TABLE INTO DD27S_ROW.
   WRITE: ' ', DD27S_ROW-TABNAME.
   PERFORM check_l_ro USING DD27S_ROW-TABNAME LOG_DATA_CHANGES.
   IF LOG_DATA_CHANGES IS INITIAL.
    WRITE 'Logging is off in the runtime object'.
    NEW-LINE.
    WRITE 'Please read and use manual instruction of SAP note'.
    WRITE '2438058 - SCU3 | How to enable logging for a customizing table'.
   ELSEIf LOG_DATA_CHANGES = 'X'.
    WRITE 'Logging is on for this table'.
   ENDIF.
   NEW-LINE.
  ENDLOOP.
  FREE DD27S_TABLE.
 ENDLOOP.
ENDIF.
ELSEIF TADIR_ROW-OBJECT = 'VIEW'.
  WRITE: 'Maintenance View', OBJECT.
  NEW-LINE.
  SELECT * FROM DD27S APPENDING TABLE DD27S_TABLE
  WHERE VIEWNAME = OBJECT.
  SORT DD27S_TABLE BY TABNAME.
  DELETE ADJACENT DUPLICATES FROM DD27S_TABLE
  COMPARING TABNAME.
  LOOP AT DD27S_TABLE INTO DD27S_ROW.
   WRITE: DD27S_ROW-TABNAME.
   PERFORM check_l_ro USING DD27S_ROW-TABNAME LOG_DATA_CHANGES.
   IF LOG_DATA_CHANGES IS INITIAL.
    NEW-LINE.
    WRITE 'Logging is off in the runtime object'.
    NEW-LINE.
    WRITE 'Please read and use manual instruction of SAP note'.
    WRITE '2438058 - SCU3 | How to enable logging for a customizing table'.
   ELSEIf LOG_DATA_CHANGES = 'X'.
    WRITE 'Logging is on for this table'.
   ENDIF.
   NEW-LINE.
  ENDLOOP.
  FREE DD27S_TABLE.
ELSEIF TADIR_ROW-OBJECT = 'TABL' .
  WRITE: 'Transparent Table', OBJECT.
  PERFORM check_l_ro USING OBJECT LOG_DATA_CHANGES.
  IF LOG_DATA_CHANGES IS INITIAL.
   NEW-LINE.
   WRITE 'Logging is off in the runtime object'.
   NEW-LINE.
   WRITE 'Please read and use manual instruction of SAP note'.
   WRITE '2438058 - SCU3 | How to enable logging for a customizing table'.
  ELSEIf LOG_DATA_CHANGES = 'X'.
   WRITE 'Logging is on for this table'.
  ENDIF.
ENDIF.
ELSE.
 WRITE: 'OBJECT', OBJECT, 'does not exist, or is another object as'.
 WRITE 'View cluster, Maintenance View, or Transparent Table'.
 NEW-LINE.
 WRITE 'Please check your input'.
ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  check_l_ro
*&---------------------------------------------------------------------*
*       Check logging in runtime object
*----------------------------------------------------------------------*
*      -->P_TABNAME  text
*      -->P_LOG_DATA_CHANGES  text
*----------------------------------------------------------------------*
FORM check_l_ro  USING    P_TABNAME
                       P_LOG_DATA_CHANGES.
data: l_header type x030l.
data flagbyte(8).
l_header-tabname = p_tabname.
call 'DB_RD_NTABHDR' id 'NTABHDR' field l_header.
 if sy-subrc <> 0.
  Write: 'An error has occured, while reading the runtime object.'.
  EXIT.
 endif.
perform cnv_flag using l_header-flagbyte changing flagbyte.
  IF flagbyte+7(1) = 1.
    P_LOG_DATA_CHANGES = 'X'.
  ENDIF.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CNV_FLAG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*      -->P_L_HEADER_FLAGBYTE  text
*      <--P_FLAGBYTE  text
*----------------------------------------------------------------------*
FORM CNV_FLAG  USING    FLAGBYTE
               CHANGING char8.
  data: iflg type i,
        cnt type i value 128,
        pos type i,
        ch8(8).
  iflg = FLAGBYTE.
  ch8 = '00000000'.
  do 8 times.
    if iflg >= cnt.
      write '1' to ch8+pos(1).
      iflg = iflg - cnt.
    endif.
    cnt = cnt / 2.
    pos = pos + 1.
  enddo.
  char8 = ch8.
ENDFORM.
*&---------------------------------------------------------------------*
*&      Form  CHECK_SIZE_DBTABLOG
*&---------------------------------------------------------------------*
*       text
*----------------------------------------------------------------------*
*  -->  p1        text
*  <--  p2        text
*----------------------------------------------------------------------*
FORM CHECK_SIZE_DBTABLOG .
DATA: BEGIN OF count_line,
        TABNAME TYPE DBTABLOG-TABNAME,
        count  TYPE i,
      END OF count_line,
      DBTABLOG_TAB TYPE TABLE OF DBTABLOG.
DATA COUNT_LINE_TABLE LIKE STANDARD TABLE OF count_line.
DATA: dbcur1 TYPE cursor.

OPEN CURSOR @dbcur1 FOR
  SELECT TABNAME, count(*) AS count
         FROM DBTABLOG
         GROUP BY TABNAME.
DO.
  FETCH NEXT CURSOR @dbcur1 INTO @count_line.
  IF sy-subrc <> 0.
    CLOSE CURSOR @dbcur1.
    EXIT.
  ENDIF.
APPEND count_line to COUNT_LINE_TABLE.
ENDDO.
NEW-LINE.
WRITE '----------------------------------------------------------------------------------------------------------------------'.
WRITE '----------------------------------------------------------------------------------------------------------------------'.
WRITE 'Check for frequently changed objects'.
NEW-LINE.
WRITE 'The following tables contains more then 100.000 rows in table DBTABLOG'.
NEW-LINE.
SORT COUNT_LINE_TABLE BY count DESCENDING.
LOOP AT COUNT_LINE_TABLE INTO count_line
 WHERE count > 100000.
 WRITE count_line-TABNAME.
 WRITE count_line-count.
 NEW-LINE.
ENDLOOP.
NEW-LINE.
NEW-LINE.
WRITE 'Please read and use manual instruction of'.
WRITE 'SAP note 2335014  DBTABLOG | Reduce size'.
ENDFORM. Keine Protokolle im gewählten Zeitraum gefunden.
Parameter name
rec/client
RECCLIENT
Protokollierung Tabellen Änderungen Tabellenänderungen Änderungsprotokolle RSVTPROT SCU3
Table changes are not logged
recording of Customizing changes
Profile Parameter Maintenance
Evaluation of change logs
Table logging is not currently active
in your system.
Do you want to analyze the logs anyway?
Auswertung von Änderungsprotokollen
In Ihrem System ist die Tabellenprotokollierung gegenwärtig
nicht aktiv.
Möchten Sie trotzdem Protokolle auswerten?
fehlen
missing
logs
Protokolle
Activate/Deactivate table auditing ,  Tabellenhistorie
Möchten Sie die Auswertung trotzdem fortsetzen?
Status              überarbeitet
None of these tables is currently logged.
Continue Analysis?
Protokolle auswerten
Auswertung von Änderungsprotokollen
Zur Zeit wird keine der betroffenen Tabellen
protokolliert.
Möchten Sie die Auswertung trotzdem fortsetzen?
Aktivieren
Activity logs , KBA , BC-CUS-TOL-ALO , Activity Log , BC-CUS-TOL-TME , View Maintenance Tool , BC-CUS-TOL-IMG , Implementation Guide , Problem

About this page

This is a preview of a SAP Knowledge Base Article. Click more to access the full version on SAP ONE Support launchpad (Login required).

Search for additional results

Visit SAP Support Portal's SAP Notes and KBA Search.