Chinaunix首页 | 论坛 | 博客
  • 博客访问: 706127
  • 博文数量: 145
  • 博客积分: 3446
  • 博客等级: 中校
  • 技术积分: 1567
  • 用 户 组: 普通用户
  • 注册时间: 2006-08-30 13:58
文章分类

全部博文(145)

文章存档

2021年(1)

2020年(1)

2019年(1)

2018年(6)

2017年(1)

2016年(10)

2015年(12)

2014年(10)

2013年(15)

2012年(33)

2011年(21)

2010年(9)

2009年(18)

2008年(2)

2006年(5)

我的朋友

分类: Web开发

2017-03-14 17:36:07

Logging Database Tables


If logging is activated, any changes to table entries are logged in the log table .

T-code:RZ10
This also require the profile parameter  to be set accordingly. This profile parameter can have the following values:
  • ALL
Logging is cross-client.
  • clnt1, clnt2, ...
Changes are logged only in the specified clients clnt1, clnt2, ...
  • OFF
No logging.

The logs can be analyzed using the transaction "Table History" (transaction ). Logging takes place independently of updates.


If there are more than 250 characters in the table key or if a full table row has more than 16000 bytes, the table cannot be logged. The lengths of fields with the predefined types STRING, RAWSTRING, LCHR, and LRAW are counted in full here.


*&---------------------------------------------------------------------*
*& Report  ZTEST04
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT ztest05.


TYPE-POOLS stprt .

DATA: lv_tabname TYPE tabname VALUE 'ZYCHCN_TEST',
      lv_date_s  
TYPE d VALUE '20170314',
      lv_date_e  
TYPE d VALUE '20170314'.


DATA: lt_tablist     TYPE stprt_h_tablist WITH HEADER LINE,
      lt_dfies       
TYPE TABLE OF dfies,
      ls_dfies       
TYPE dfies,
      ls_head        
TYPE x030l,
      lv_tabdata_old 
TYPE logdata,
      lt_log         
TYPE stprt_log_stable_type,
      ls_log         
TYPE LINE OF stprt_log_stable_type.

DATA dyn_wa    TYPE REF TO data.
FIELD-SYMBOLS:  TYPE any,
                    
TYPE x,
                  
TYPE any,  TYPE any,
                
TYPE x,  TYPE x.

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

REFRESH lt_dfies . CLEAR ls_head .
CALL FUNCTION 'DDIF_FIELDINFO_GET'
  
EXPORTING
    tabname        
= lv_tabname
  
IMPORTING
    x030l_wa       
= ls_head
  
TABLES
    dfies_tab      
= lt_dfies
  
EXCEPTIONS
    not_found      
= 1
    internal_error 
= 2
    
OTHERS         = 3.
SORT lt_dfies BY position .

CHECK lt_dfies[] IS NOT INITIAL .

CREATE DATA dyn_wa TYPE (lv_tabname).       " 定义动态结构
ASSIGN dyn_wa->* TO .

REFRESH: lt_log,lt_tablist .

lt_tablist
-tab = lv_tabname .
INSERT TABLE lt_tablist.
CALL FUNCTION 'DBLOG_READ_TABLE'
  
EXPORTING
    from_day 
= lv_date_s
    to_day   
= lv_date_e
    obj_list 
= lt_tablist[]
  
CHANGING
    log_list 
= lt_log.

LOOP AT lt_log INTO ls_log WHERE optype <> 'U'.

  
CHECK ls_log-versno >= '01'.

  
MOVE ls_log-logdata(ls_log-dataln) TO lv_tabdata_old.
*
  
LOOP AT lt_dfies INTO ls_dfies WHERE tabname = lv_tabname.
* convert endianess
    
ASSIGN: COMPONENT ls_dfies-fieldname OF STRUCTURE  TO ,
             
TO  CASTING.

    
IF ls_log-versno >= '01' OR ls_dfies-keyflag IS INITIAL.

      
ASSIGN lv_tabdata_old+ls_dfies-offset(ls_dfies-intlen)
            
TO  CASTING.

    
ELSE.
* Old type of log: key not in data-part
      
ASSIGN +ls_dfies-offset(ls_dfies-intlen)
            
TO  CASTING.
    
ENDIF.
     
= .

    
PERFORM convert_endianess USING lv_tabdata_old
                                    ls_log
-versno
                                    ls_dfies
                              
CHANGING .
  
ENDLOOP.

  
CLEAR  .

ENDLOOP.

FORM convert_endianess  USING    p_logdata TYPE logdata
                                 p_versno 
TYPE dbtablog-versno
                                 p_dfies 
TYPE dfies
                        
CHANGING p_field TYPE any.

  
DATA: f_type LIKE x031l-fieldtype.
  
CONSTANTS: type_numc      TYPE fldtype VALUE 'B0',       "UC
             type_clnt      
TYPE fldtype VALUE '98',       "UC
             type_lang      
TYPE fldtype VALUE '50',       "UC
             type_time      
TYPE fldtype VALUE 'BC',       "UC
             type_date      
TYPE fldtype VALUE '9C',       "UC
             type_char      
TYPE fldtype VALUE '28',       "UC
             type_accp      
TYPE fldtype VALUE '94',       "UC
             type_cuky      
TYPE fldtype VALUE '40',       "UC
             type_prec      
TYPE fldtype VALUE 'B4',       "UC
             type_unit      
TYPE fldtype VALUE '44',       "UC
             type_lstr      
TYPE fldtype VALUE 'E4',        "#EC *
             type_sstr      
TYPE fldtype VALUE 'EC',        "#EC *
             type_rstr      
TYPE fldtype VALUE 'E8',
             type_i4        
TYPE fldtype VALUE 'AC',        "UF160698B
             type_i2        
TYPE fldtype VALUE 'A8',
             type_f         
TYPE fldtype VALUE '88',        "UF160698E
             single_byte    
TYPE tcp00-cpbyteind VALUE '01', "#EC *
             double_byte    
TYPE tcp00-cpbyteind VALUE '02',
             quadruple_byte 
TYPE tcp00-cpbyteind VALUE '05',
             empty_entry    
LIKE dbtablog-optype VALUE '*' "UF133143/2001
             c_int4len      
TYPE i VALUE 4.
  
FIELD-SYMBOLS:  TYPE x.

* Little/big endian conversion
  
CHECK ( NOT p_versno IS INITIAL
          
OR ( p_dfies-keyflag = space
               
AND 'sIF' CS p_dfies-inttype  ) )
   
AND 'PX' NS p_dfies-inttype.
  
ASSIGN p_field TO  CASTING.
  
CASE p_dfies-inttype.
    
WHEN 'C'.
      
CASE p_dfies-datatype.
        
WHEN 'CHAR'.
          f_type 
= type_char.
        
WHEN 'LANG'.
          f_type 
= type_lang.
        
WHEN 'CLNT'.
          f_type 
= type_clnt.
        
WHEN 'CUKY'.
          f_type 
= type_cuky.
        
WHEN 'UNIT'.
          f_type 
= type_unit.
      
ENDCASE.
    
WHEN 'N'.
      
IF p_dfies-datatype = 'ACCP'.
        f_type 
= type_accp.
      
ELSE.
        f_type 
= type_numc.
      
ENDIF.
    
WHEN 'D'.
      f_type 
= type_date.
    
WHEN 'T'.
      f_type 
= type_time.
    
WHEN 's'.
      
IF p_dfies-datatype = 'PREC'.
        f_type 
= type_prec.
      
ELSE.
        f_type 
= type_i2.
      
ENDIF.
    
WHEN 'I'.
      f_type 
= type_i4.
    
WHEN 'F'.
      f_type 
= type_f.
    
WHEN 'g'.
* C-string is handled as character:
      f_type 
= type_char.
    
WHEN 'y'.
      f_type 
= type_rstr.
  
ENDCASE.
  
CALL FUNCTION 'DB_CONVERT_FIELD_TO_HOST'
    
EXPORTING
      
type        = f_type
    
CHANGING
      
field       = 
    
EXCEPTIONS
      wrong_param 
= 0
      
OTHERS      = 0.

ENDFORM.                    " convert_endianess

阅读(947) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~