Como posso garantir que uma Visualização Materializada Oracle seja criada como uma visualização materializada "Gravável" e não como uma Visualização "Atualizável"? Eu nunca quero que essas exibições enviem dados de volta à origem e quero uma atualização completa para substituir qualquer coisa que eu altere.
O problema de origem é que um dos bancos de dados remotos não pode suportar logs de exibição materializados, mas as tabelas têm colunas de carimbo de data/hora modificadas pela última vez. Portanto, gostaria de tentar mantê-los atualizados com as instruções Merge filtrando nessa coluna e, ocasionalmente, fazer atualizações normais de replicação se ocorrer algum problema.
eu tenteiCREATE MATERIALIZED VIEW Test.SomeTable_MVW TABLESPACE SOME_DATA BUILD DEFERRED REFRESH COMPLETE FOR UPDATE AS (SELECT ... FROM SomeTable@OverThere);
Mas recebi o erro:
12013. 00000 - "updatable materialized view must be simple enough and have a materialized view log on its master table to do fast refresh"
*Cause: The updatable materialized view query contained a JOIN, SUBQUERY,
UNION, CONNECT BY, ORDER BY, or GROUP BY clause, or the master
table did not have a materialized view log.
*Action: Make the materialized view simpler. If a join is really needed,
make multiple simple materialized views then put a view on top of
them. Make sure a materialized view log is created for the master
table.
Há apenas uma tabela remota. Não entendo por que esse erro contém, or the master table did not have a materialized view log
pois é assim que você obtém uma visualização materializada gravável. Pena que não há uma cláusula "FOR WRITEABLE" para quando você sabe que não deseja enviar dados de volta. E o REFRESH COMPLETE deve indicar que não quero empurrar os dados de volta.