Eu criei uma visão materializada entre um sistema primário (Oracle 18c) e um sistema externo (Oracle 19c):
create materialized view primary_system.workorder_mv
build immediate
refresh force
on demand
start with sysdate next sysdate + (30/(60*60*24))
as
select
cast(workorderid as number(38,0)) as objectid,
wonum,
status,
--other fields
longitudex,
latitudey
from
external_system.workorder_vw@gistomax --view in external system that is served up by dblink (gistomax)
--the view looks like this: select * from workorder where isgis=1
create materialized view log on external_system.workorder with rowid;
Os documentos dizem que as visualizações materializadas devem ser limpas automaticamente:
O Oracle rastreia automaticamente quais linhas em um log de exibição materializada foram usadas durante as atualizações de exibições materializadas e limpa essas linhas do log para que o log não cresça indefinidamente. Como várias visualizações materializadas simples podem usar o mesmo log de visualização materializada, as linhas já usadas para atualizar uma visualização materializada ainda podem ser necessárias para atualizar outra visualização materializada. O Oracle não exclui linhas do log até que todas as visualizações materializadas as tenham usado.
- Não tenho outras visualizações materializadas que façam referência aos logs de MV.
- Aqui estão as propriedades do log MV (Toad) .
- Aqui está o que
all_registered_mviews
parece. - O MV foi sincronizado com sucesso. Se eu criar ou atualizar registros na tabela WORKORDER no sistema externo, os registros serão sincronizados com o sistema primário no agendamento de 30 segundos.
Pergunta:
Até agora, os dados de log do MV não parecem estar limpando automaticamente:
Por que os logs de MV não são limpos automaticamente assim que os registros são sincronizados?
Tente basear seu MV diretamente na tabela de origem e não em uma visualização intermediária. Inclua sua condição "isgis=1" na consulta MV.