Recuperação Dados Problema Trigger SDI Hana Enterprise [Data Architect Journal #1📜]

Bem Vindo! | Welcome!
By Felipe Lamounier, Minas Gerais, Brasil🇧🇷 – powered by 🙂My Easy B.I.


📑 Table of Contents:

  1. Contexto
  2. Definição do Problema e Objetivo
  3. Estratégia de Recuperação Dados Perdidos
    1. Registros Deletados (“Registros Fantasmas”)
    2. Registros Existentes Não Atualizados (Update)
    3. Registros Não criados (Insert)
  4. Notes
    1. Código para fazer seleção dinâmica buscando todos os campo da Tabela, com exceção da Chave

Contexto

  • Hana Enterprise XSA com SDI para replicação em tempo real de tabelas do SAP ECC para um banco Hana sidecar, sem camada de aplicação (ABAP)
  • Em um determinado dia, o espaço (storage) para log de alteração no Hana Enterprise estourou, e as replicações do ECC não foram gravadas, embora para o ECC fossem consideradas entregues. Isso causou perda de dados.
  • A perda de dados inclui registros criados, modificados e deletados, ou seja, uma janela de dados desatualizados
  • São mais de 300 tabelas replicadas e não é viável reiniciar novamente todas as tabelas pois o ambiente não consegue fazer cargas Full com tabelas de mais de 5 milhões de registros, o que são a maioria.

Definição do Problema e Objetivo

  • Problema: Perda de dados replicados entre ECC e Hana Enterprise XSA
  • Objetivo: Recuperação dos dados no Hana Enterprise XSA sem necessidade de reiniciar a replicação da tabela, via Script de Insert e Atualização, preenchendo as tabelas com os dados originais da fonte (ECC).
  • Script executado no Hana Enterprise, conectando via Virtual Table no ECC (dblink)
  • Perda de Dados envolve Dados Criados e/ou Atualizados e outro ponto importante que são os dados Deletados ( Deleção lógica onde _CHANGE_TYPE = D).
  • Quando um registro é deletado na Fonte (ECC) e não é replicado no destino (Hana Enterprise XSA), cria-se um “Registro Fantasma” no destino, pois o registro não existe mais na fonte e o destino não sabe da eliminação.
replicação sdi de tabelas ecc para o hana enterprise. desenho esquemático mostrando inserçao, deleção e modificação de registros
Janela de perda de dados na replicação

Estratégia de Recuperação Dados Perdidos

A estratégia de fazer o Script visa ser uma estratégia que será transparente para os sistemas que consome dados do Hana Enterprise XSA, como o Data Lake.

Desta forma não preciso mobilizar Engenheiros de Dados para recarregar centenas de tabelas novamente, tendo que “costurar” arquivos CSV nos diretórios do ADF (Azure Data Factory)

A ordem da estratégia para recuperação dos registros perdidos devem seguir a ordem:

  1. Registros Deletados
  2. Registros Existentes Não Atualizados que já existiam no Hana Enterprise, porém não foram atualizados
  3. Registros criados e/ou atualizados que não foram criados no Hana Enterprise

Registros Deletados (“Registros Fantasmas”)

desenho esquemático recuperação de dados sdi no hana enterprise
Estratégia Recuperação Dados Deletados (Registros Fantasmas)
  • Criar Virtual Table (dblink) no ECC para cada tabela em Questão
  • Executar o script abaixo dentro do Hana Enterprise
    • _CHANGE_TYPE = D
    • _CHANGE_TIME = data/hora atual
UPDATE "BASE_CORP_REP"."T_VTTK"
SET 
    _change_type = 'D',
    _CHANGE_TIME = '2025-06-09 18:00:00.000000000'
WHERE TKNUM IN (
    SELECT t.TKNUM
    FROM (
        SELECT TKNUM
        FROM "BASE_CORP_REP"."T_VTTK"
        WHERE _change_type <> 'D'
    ) AS t
    LEFT JOIN "BASE_CORP_REP"."VT_VTTK_P00" AS p
      ON t.TKNUM = p.TKNUM
    WHERE p.TKNUM IS NULL
);
Legenda:

T_VTTK é dentro do Hana Enterprise

VT_VTTK_P00 é a tabela virtual (dblink) que está no ECC


Registros Existentes Não Atualizados (Update)

desenho esquemático para gerar script de update para registros de dados perdidos no SDI

Selecionar na tabela fonte (ECC) todos os registros atualizados no dia específico (campo AEDAT) e fazer Update na tabela correspondente no Hana Enterprise, somente para os campos atualizados

Código para Conferência se existe registros nesta condição:
select p.VBELN, t.VBELN, p.POSNR, t.POSNR, p.AEDAT, t.AEDAT, t._change_type, t._change_time FROM BASE_CORP_REP.VT_VBAP_P00 AS P 
inner join "BASE_CORP_REP"."T_VBAP" as T on
    P.MANDT = T.MANDT
    AND P.VBELN = T.VBELN
    AND P.POSNR = T.POSNR
    AND P.AEDAT <> T.AEDAT
	AND P.AEDAT BETWEEN '20250603' AND '20250606'; 
Código (script) para Update:
UPDATE BASE_CORP_REP.T_VBAP T
SET
  T.MATNR = P.MATNR,
  T.MATWA           = P.MATWA,
  T.PMATN           = P.PMATN,
  T.CHARG           = P.CHARG,
  T.MATKL           = P.MATKL,
  T.ARKTX           = P.ARKTX,

  T.ZZ_NRO_LANCES   = P.ZZ_NRO_LANCES,
  T.ZZ_METRAGEM     = P.ZZ_METRAGEM,
  T.ZZ_CODACOND     = P.ZZ_CODACOND,
  T.ZZ_TRANSP_CE    = P.ZZ_TRANSP_CE,
  T.ZZ_DATA_ETA     = P.ZZ_DATA_ETA,
  T.ZZ_NRO_LANCE_AC = P.ZZ_NRO_LANCE_AC,
  T.ZZ_METRAGEM_TOT = P.ZZ_METRAGEM_TOT,
  T.ZZ_PERC_TOL_INF = P.ZZ_PERC_TOL_INF,
  T.ZZ_PERC_TOL_SUP = P.ZZ_PERC_TOL_SUP,
  T._CHANGE_TYPE    = 'A',
  T._CHANGE_TIME    = '2025-06-16 21:00:00.000000000'
FROM BASE_CORP_REP.T_VBAP AS T
INNER JOIN BASE_CORP_REP.VT_VBAP_P00 AS P
on
  T.MANDT  = P.MANDT AND
  T.VBELN  = P.VBELN AND
  T.POSNR  = P.POSNR AND
  P.AEDAT <> T.AEDAT AND
  P.AEDAT BETWEEN '20250603' AND '20250606';

Registros Não criados (Insert)

Há também os casos onde o registro foi criado na data da perda dos dados e depois não houve modificação e portanto esse registros não foram criados no Hana Enterprise XSA e precisamos fazer o Insert

Desenho esquemático recuperar registros perdidos no SDI hana Enterprise, mostrando como sair do ECC e ir no hana enterprise via left join com filtro
Código Script pra Insert
-- condição insert
SELECT 
  P.MANDT, 
  P.VBELN, 
  P.POSNR 
FROM 
  BASE_CORP_REP.VT_VBAP_P00 P
WHERE 
  P.ERDAT BETWEEN '20250603' AND '20250606'
  AND NOT EXISTS (
    SELECT 1 
    FROM BASE_CORP_REP.T_VBAP T 
    WHERE 
      T.MANDT = P.MANDT 
      AND T.VBELN = P.VBELN 
      AND T.POSNR = P.POSNR
  );
-- insert
INSERT INTO BASE_CORP_REP.T_VBAP (
  MANDT, VBELN, POSNR,
  MATNR, MATWA, PMATN, CHARG, MATKL, ARKTX, PSTYV, POSAR, LFREL, FKREL, UEPOS, GRPOS, ABGRU, PRODH, ZWERT, ZMENG, ZIEME,
  UMZIZ, UMZIN, MEINS, SMENG, ABLFZ, ABDAT, ABSFZ, POSEX, KDMAT, KBVER, KEVER, VKGRU, VKAUS, GRKOR, FMENG, UEBTK, UEBTO,
  UNTTO, FAKSP, ATPKZ, RKFKF, SPART, GSBER, NETWR, WAERK, ANTLF, KZTLF, CHSPL, KWMENG, LSMENG, KBMENG, KLMENG, VRKME,
  UMVKZ, UMVKN, BRGEW, NTGEW, GEWEI, VOLUM, VOLEH, VBELV, POSNV, VGBEL, VGPOS, VOREF, ZZ_PERC_TOL_SUP,
  _CHANGE_TYPE, _CHANGE_TIME
)
SELECT
  P.MANDT, P.VBELN, P.POSNR,
  P.MATNR, P.MATWA, P.PMATN, P.CHARG, P.MATKL, P.ARKTX, P.PSTYV, P.POSAR, P.LFREL, P.FKREL, P.UEPOS, P.GRPOS, P.ABGRU, P.PRODH, P.ZWERT, P.ZMENG, P.ZIEME,
  P.UMZIZ, P.UMZIN, P.MEINS, P.SMENG, P.ABLFZ, P.ABDAT, P.ABSFZ, P.POSEX, P.KDMAT, P.KBVER, P.KEVER, P.VKGRU, P.VKAUS, P.GRKOR, P.FMENG, P.UEBTK, P.UEBTO,
  P.UNTTO, P.FAKSP, P.ATPKZ, P.RKFKF, P.SPART, P.GSBER, P.NETWR, P.WAERK, P.ANTLF, P.KZTLF, P.CHSPL, P.KWMENG, P.LSMENG, P.KBMENG, P.KLMENG, P.VRKME,
  P.UMVKZ, P.UMVKN, P.BRGEW, P.NTGEW, P.GEWEI, P.VOLUM, P.VOLEH, P.VBELV, P.POSNV, P.VGBEL, P.VGPOS, P.VOREF, P.ZZ_PERC_TOL_SUP,
  'A' AS _CHANGE_TYPE,
  TO_TIMESTAMP('2025-06-16 21:00:00.000000000') AS _CHANGE_TIME
FROM BASE_CORP_REP.VT_VBAP_P00 P
WHERE 
  P.ERDAT BETWEEN '20250603' AND '20250606'
  AND NOT EXISTS (
    SELECT 1
    FROM BASE_CORP_REP.T_VBAP T
    WHERE 
      T.MANDT = P.MANDT
      AND T.VBELN = P.VBELN
      AND T.POSNR = P.POSNR
  );
 
 
-- conferir
select * from  BASE_CORP_REP.T_VBAP  T
where 
  t.MANDT = '310' and
  t.VBELN = '0201522344'  and
  t.POSNR = '000010'
select mandt, vbeln, posnr from  BASE_CORP_REP.VT_VBAP_p00 P 
where p.MANDT = '310' and p.VBELN = '0201522344' and p.POSNR = '000010'

Notes

Código para fazer seleção dinâmica buscando todos os campo da Tabela, com exceção da Chave

SELECT
  'P."' || FIELDNAME || '" = T."' || FIELDNAME || '"' AS update_line
FROM sapabap1.DD03L
WHERE

  tabname = 'VBAP'
AND KEYFLAG <> 'X'
  ORDER BY POSITION

Keywords: Perda de dados no Hana Enterprise; SDI hana enterprise xsa recuperação de dados; Recuperação de Dados no Hana Enterprise: Estratégias e Soluções; Problemas de Replicação no Hana: Como Evitar a Perda de Dados; Estratégias Eficazes para Manter Integridade de Dados no Hana;


Junte-se a 970 outros assinantes

Deixe um comentário