вторник, 25 декабря 2018 г.

Архивировать и удалять старые журналы и логи загрузок

https://wiki.scn.sap.com/wiki/display/BI/Archiving+Request+Information+in+BW

отсюда https://wiki.scn.sap.com/wiki/display/BI/BW+Archiving (а это отсюда https://wiki.scn.sap.com/wiki/display/BI/Reduce+BW+Request+Administration+Tables)

Если статья потеряется, основное:
транзакции AOBJ (for the archiving object 'BWREQARCH') и RSREQARCH.
В первой найдём нужные программы для планирования задания.


Это очень нужная тема, после 3-5 лет система начинает сильно тормозить и скрипеть, если забывать на контроль за этими журналами.

четверг, 13 декабря 2018 г.

Бэкапим таблицу TVARVC

Уже второй раз на моей практике умудряются эту таблицу ушатать.

Делаем программу, планируем ежедневно.

*&---------------------------------------------------------------------*
*& Report  ZPSB_BW_TVARVC_BACKUP
*&
*&---------------------------------------------------------------------*
*& Handmate TVARVC backup
*&
*&---------------------------------------------------------------------*
REPORT  zpsb_bw_tvarvc_backup.
*&---------------------------------------------------------------------*
DATA:
      l_sydate            TYPE d,
      lt_tvarvc           TYPE TABLE OF tvarvc,
      lo_struct_descr     TYPE REF TO cl_abap_structdescr,
       lt_struct_fields   TYPE cl_abap_structdescr=>component_table,
      l_string            TYPE string,
      lt_ztvarvc_backup   TYPE TABLE OF ztvarvc_backup,
      ls_ztvarvc_backup   LIKE LINE OF lt_ztvarvc_backup.

FIELD-SYMBOLS:
                <fs_struct_fields>  LIKE LINE OF lt_struct_fields,
                <comp>              TYPE ANY,
                <fs_tvarvc>         LIKE LINE OF lt_tvarvc.

CONSTANTS:
    l_nl(1)   TYPE VALUE cl_abap_char_utilities=>newline,
    l_tab(1)  TYPE VALUE cl_abap_char_utilities=>horizontal_tab.
*&---------------------------------------------------------------------*
BREAK-POINT ID break.

*& История за последние полтора месяца
l_sydate sy-datum 45.
DELETE FROM ztvarvc_backup WHERE sy_date < l_sydate.

SELECT
    *
  FROM tvarvc
  INTO TABLE lt_tvarvc.

*& Header
TRY.
    lo_struct_descr ?= cl_abap_typedescr=>describe_by_name'TVARVC' ).
    lt_struct_fields lo_struct_descr->get_components).

    LOOP AT lt_struct_fields ASSIGNING <fs_struct_fields>.
      CONCATENATE l_string <fs_struct_fields>-name l_tab INTO l_string.
    ENDLOOP.

    CONCATENATE l_string l_nl INTO l_string.
  CATCH cx_root.
ENDTRY.

*& Body
LOOP AT lt_tvarvc ASSIGNING <fs_tvarvc>.
  IF lt_struct_fields IS NOT INITIAL.
    LOOP AT lt_struct_fields ASSIGNING <fs_struct_fields>.
      ASSIGN COMPONENT <fs_struct_fields>-name OF STRUCTURE <fs_tvarvc> TO <comp>.
      CONCATENATE l_string <comp> l_tab INTO l_string.
    ENDLOOP.

    CONCATENATE l_string l_nl INTO l_string.
  ENDIF.
ENDLOOP.

ls_ztvarvc_backup-sy_date     sy-datum.
ls_ztvarvc_backup-table_value l_string.

MODIFY ztvarvc_backup FROM ls_ztvarvc_backup.

WRITE l_string.
*&---------------------------------------------------------------------*

понедельник, 10 декабря 2018 г.

Получить значения из последнего журнала загрузки в ДСО

*"----------------------------------------------------------------------
  types:
    begin of ty_paccount,
      /bic/paccount type /bic/oipaccount,
    end of ty_paccount.

  data:
        l_dsoname           type rsbktgtnm,
        l_odsrnr            type rsrequid,
        lt_paccount         type hashed table of ty_paccount
          with unique default key,
        l_idx               like sy-tabix,
        l_odsobject         type rsdodsobject,
        l_changelog_tabname type tabname.

  field-symbols:
                 <fs_paccount> like line of lt_paccount.
*"----------------------------------------------------------------------
  break-point id break.
*"  Get DSO name and last activated request
  l_dsoname   i_r_request->get_tgt).
  l_odsobject l_dsoname.

  select single
      odsrnr
    from rsstatmanpart
    into l_odsrnr
   where dta eq l_dsoname
     and dta_type eq `ODSO`
     and odsrnrsid eq select
                          maxodsrnrsid as odsrnrsid
                          from rsstatmanpart
                         where dta eq l_dsoname
                           and dta_type eq `ODSO`
                        ).

  read table l_t_range with key
       fieldname 'F1'.
  l_idx sy-tabix.

  if l_odsrnr is not initial.
    call method cl_rsd_odso=>get_tablnm
      exporting
        i_odsobject l_odsobject
        i_tabt      "Changelog
      importing
        e_tablnm    l_changelog_tabname.

    select distinct
        /bic/paccount
      into table lt_paccount
      from (l_changelog_tabname)
     where request eq l_odsrnr.

    loop at lt_paccount assigning <fs_paccount>.
      l_t_range-iobjnm    'F1'.
      l_t_range-fieldname 'F1'.
      l_t_range-sign      'I'.
      l_t_range-option    'EQ'.
      l_t_range-low       <fs_paccount>-/bic/paccount.

      if l_idx <> 0.
        modify l_t_range index l_idx.
      else.
        append l_t_range.
      endif.
    endloop.
  endif.

  p_subrc 0.
*-----------------------------------------------------------------------


понедельник, 3 декабря 2018 г.

ORA-01654: unable to extend index на таблицу DDPRS

Очень старая система, данная таблица забита парой десятком лямов логов. При переносе или активации объекта - дамп, при попытке вставки записей в эту таблицу.

Очищать её можно программой RADPROTB. 
https://www.erptraining9.com/sap-bw-cleanup-of-dictionary-logs-ddprs/