Replicação entre servidores
Como ajustar divergências em ESTATISTICAS_DOCUMENTOS_PRODUTOS
RTREPLICATOR.FAQ-144175
Para erros tipo:
ERROR: duplicate key value violates unique constraint "uk_esdopr_estabelecimento_produto_oper_data" Detalhe:
Key (estabelecimento_id, produto_id, tipo_operacao, natureza_operacao_id, data_emissao)=(172368297349, 54452505, S, 560, 2022-10-31) already exists.
Fazer o seguinte:
Identificar o registro que está com problema usando os dados da UK passada.
Executar o SQL abaixo replicando para obter as informações que deverão ser refeitas.
select prod.produto
, estb.nome_estabelecimento
, q.data_emissao
, q.tipo_operacao
, naop.natureza_operacao
, espe.especie
from (
select *
from ESTATISTICAS_DOCUMENTOS_PRODUTOS edp
where
(estabelecimento_id, produto_id, data_emissao, tipo_operacao, natureza_operacao_id, especie_id)= (49569348, 43764981, '2024-07-02', 'S', 560, 6625257)
) q
join produtos prod on prod.id = q.produto_id
join estabelecimentos estb on estb.id = q.estabelecimento_id
join naturezas_operacoes naop on naop.id = q.natureza_operacao_id
join especies espe on espe.id = q.especie_id
;
Após alguns segundos, executar novamente para garantir excluir registros que foram liberados nos erros de replicação.
Depois acessar a interface CAD_ESTATISTICAS_DOCUMENTOS_PRODUTOS e executar a operação [b:Atualizar estatísticas] para reconstruir essa estatística.
OPÇÂO 2
- Acessar a base de originou este comando (Ex: M.4)
- Executar o script a seguir, informando o ID do registro com erro na primeira linha:
set info off;
set id 172629462850;
display s.tipo_operacao
, naop.natureza_operacao
, s.data_emissao
, p.produto
, e.nome_estabelecimento
from ESTATISTICAS_DOCUMENTOS_PRODUTOS s
join produtos p on p.id = s.produto_id
join naturezas_operacoes naop on naop.id = s.natureza_operacao_id
join estabelecimentos e on e.id = s.estabelecimento_id
where s.id = ${id};
set heading off;
select 'update DML_LOGS'
|| ' set queue = ''D'''
|| ' where queue = ''E'''
|| ' and origin_table_name = ''ESTATISTICAS_DOCUMENTOS_PRODUTOS'''
|| ' and error_message like ''%duplicate%)=(' || estabelecimento_id
|| ', ' || produto_id
|| ', ' || tipo_operacao
|| ', ' || natureza_operacao_id
|| ', ' || data_emissao
|| ') already exists.'';' as cmd
from ESTATISTICAS_DOCUMENTOS_PRODUTOS
where id = ${id};
select 'delete from ESTATISTICAS_DOCUMENTOS_PRODUTOS'
|| ' where estabelecimento_id = ' || estabelecimento_id
|| ' and produto_id = ' || produto_id
|| ' and tipo_operacao = ''' || tipo_operacao || ''''
|| ' and natureza_operacao_id = ' || natureza_operacao_id
|| ' and data_emissao = ''' || data_emissao || ''';' as cmd
from ESTATISTICAS_DOCUMENTOS_PRODUTOS
where id = ${id};
- Executar (replicando) as 2 primeiras linhas geradas. Exemplo:
update DML_LOGS set queue = 'D' where queue = 'E' and origin_table_name = 'ESTATISTICAS_DOCUMENTOS_PRODUTOS' and error_message like '%duplicate%)=(172368297349, 54452505, S, 560, 2022-10-31) already exists.';
delete from ESTATISTICAS_DOCUMENTOS_PRODUTOS where estabelecimento_id = 172368297349 and produto_id = 54452505 and tipo_operacao = 'S' and natureza_operacao_id = 560 and data_emissao = '2022-10-31';
- Acessar a interface CAD_ESTATISTICAS_DOCUMENTOS_PRODUTOS e executar o comando [b:Atualizar estatísticas]
- Informar os dados apresentados na terceira parte do script acima.
Ver também: