- Este tópico contém 8 respostas, 3 vozes e foi atualizado pela última vez 14 anos, 6 meses atrás por
Sousa04.
-
AutorPosts
-
8 de junho de 2011 às 12:14 am #99528
Sousa04
ParticipanteOlá pessoal estou tendo umas dificuldades com uma view materializada
não consigo fazer o refresh nela. Sugestões são bem aceitas.
Ela informa o problema de integridade mas não achei nenhum registro filho que não tenha na tabela pai e não estou encontrando uma forma de contornar o problema
alguém pode dar uma força ai?SQL> execute dbms_mview.refresh(‘TB_ATRIBUTO’,’F’)
BEGIN dbms_mview.refresh(‘TB_ATRIBUTO’,’F’); END;*
ERROR at line 1:
ORA-12034: materialized view log on “ASEG3″.”TB_ATRIBUTO” younger than last refresh
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2251
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2457
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2426
ORA-06512: at line 1SQL> execute dbms_mview.refresh(‘TB_ATRIBUTO’,’?’)
BEGIN dbms_mview.refresh(‘TB_ATRIBUTO’,’?’); END;*
ERROR at line 1:
ORA-12008: error in materialized view refresh path
ORA-02292: integrity constraint (ABAPS.FK_ATRIBUTO_INFRACAOATRIBUTO) violated – child record found
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2251
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2457
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2426
ORA-06512: at line 1SQL> execute dbms_mview.refresh(‘TB_ATRIBUTO’,’C’)
BEGIN dbms_mview.refresh(‘TB_ATRIBUTO’,’C’); END;*
ERROR at line 1:
ORA-12008: error in materialized view refresh path
ORA-02292: integrity constraint (ABAPS.FK_ATRIBUTO_INFRACAOATRIBUTO) violated – child record found
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2251
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2457
ORA-06512: at “SYS.DBMS_SNAPSHOT”, line 2426
ORA-06512: at line 1SQL> select owner,table_name,column_name from dba_cons_columns where constraint_name=’FK_ATRIBUTO_INFRACAOATRIBUTO’;
OWNER TABLE_NAME COLUMN_NAME
————— —————————— ————————————————————
ABAPS TB_INFRACAOATRIBUTO CD_OBJETO
ABAPS TB_INFRACAOATRIBUTO CD_SISTEMA
ABAPS TB_INFRACAOATRIBUTO CD_CAMPOSQL> SELECT * FROM ABAPS.TB_INFRACAOATRIBUTO B WHERE NOT EXISTS (SELECT C.CD_OBJETO,C.CD_SISTEMA,C.CD_CAMPO FROM MVADMIN.TB_ATRIBUTO C
2 WHERE B.CD_OBJETO=C.CD_OBJETO
3 AND B.CD_SISTEMA=C.CD_SISTEMA
4 AND B.CD_CAMPO=C.CD_CAMPO);no rows selected
SQL> SELECT * FROM ABAPS.TB_INFRACAOATRIBUTO B WHERE NOT EXISTS (SELECT C.CD_OBJETO,C.CD_SISTEMA,C.CD_CAMPO FROM TB_ATRIBUTO@APF13P.DPF.GOV.BR C
2 WHERE B.CD_OBJETO=C.CD_OBJETO
3 AND B.CD_SISTEMA=C.CD_SISTEMA
4 AND B.CD_CAMPO=C.CD_CAMPO);no rows selected
SQL> SELECT COUNT(CD_OBJETO) FROM TB_ATRIBUTO@APF13P.DPF.GOV.BR;
COUNT(CD_OBJETO)
—————-
1530SQL> SELECT COUNT(CD_OBJETO) FROM MVADMIN.TB_ATRIBUTO;
COUNT(CD_OBJETO)
—————-
1530SQL> SELECT COUNT(CD_OBJETO) FROM ABAPS.TB_INFRACAOATRIBUTO;
COUNT(CD_OBJETO)
—————-
457SQL> SELECT B.CD_SISTEMA FROM ABAPS.TB_INFRACAOATRIBUTO B WHERE NOT EXISTS (SELECT C.CD_SISTEMA FROM MVADMIN.TB_ATRIBUTO C WHERE B.CD_SISTEMA=C.CD_SISTEMA);
no rows selected
SQL> SELECT B.CD_OBJETO FROM ABAPS.TB_INFRACAOATRIBUTO B WHERE NOT EXISTS (SELECT C.CD_OBJETO FROM MVADMIN.TB_ATRIBUTO C WHERE B.CD_OBJETO=C.CD_OBJETO);
no rows selected
SQL> SELECT B.CD_CAMPO FROM ABAPS.TB_INFRACAOATRIBUTO B WHERE NOT EXISTS (SELECT C.CD_CAMPO FROM MVADMIN.TB_ATRIBUTO C WHERE B.CD_CAMPO=C.CD_CAMPO);
no rows selected
8 de junho de 2011 às 3:26 am #99530CleitonHanzen
ParticipanteOpá…
Desabilita a constraint que está dando exceção, faz o complete e repete a query que retorna os registros inexistentes… 🙂
O mais “correto” no uso de MVIEWS é adicionar as tabelas “pais” na replicação, isso para que se evite esse tipo de problema.
8 de junho de 2011 às 5:37 am #99531Sousa04
Participantepensei em fazer isso, mas fazendo isso conseguirei habilitar a constraint depois do refresh?
8 de junho de 2011 às 3:51 pm #99534CleitonHanzen
ParticipanteOpá…
Aí é que tá o ponto da replicação da tabela “pai”. Se na base replicada vc não conseguir habilitar a constraint, significa que os dados da tabela “pai” também foram modificados e se, for pra manter a integridade, deverá ser replicados todos os dados dependentes também.
8 de junho de 2011 às 10:18 pm #99548Sousa04
ParticipanteCleiton
o engraçado é que eu estou jogando esse query para a tabela que a view faz referência, e mesmo assim não me retorna registros
SELECT * FROM ABAPS.TB_INFRACAOATRIBUTO B WHERE NOT EXISTS (SELECT C.CD_OBJETO,C.CD_SISTEMA,C.CD_CAMPO FROM TB_ATRIBUTO@APF13P.DPF.GOV.BR C
2 WHERE B.CD_OBJETO=C.CD_OBJETO
3 AND B.CD_SISTEMA=C.CD_SISTEMA
4 AND B.CD_CAMPO=C.CD_CAMPO);outro ponto é
será que tem alguma forma menos radical (desabilitar as constraints) para isso?8 de junho de 2011 às 10:59 pm #99550CleitonHanzen
ParticipanteOpá….
O fato de desabilitar a constraint, é que durante o refresh COMPLETE, “implicitamente” o Oracle faz um “truncate table” da tabela da MVIEW e caso exista constraint apontando, realmente vai dar erro… 🙁
O que nós aqui na empresa fazemos, é não apontar FK´s diretamente para a tabela da MVIEW, mas sim criar uma trigger em cima desta tabela da MVIEW e a trigger é que faz as “ações” (delete, update, insert) necessárias na tabela “oficial” (por assim dizer)…
8 de junho de 2011 às 11:57 pm #99551vieri
ParticipanteWITH ROW ID
WITH PRIMARY KEYverifique qual dessas clausulas suas mviews estão utilizando!!
9 de junho de 2011 às 12:43 am #99553Sousa04
Participanteopá vieri
é WITH PRIMARY KEY
14 de junho de 2011 às 12:19 am #99596Sousa04
Participantesó para registro aqui pessoal
consegui dar um fim nessa agonia.
Dropei a view e recriei novamente.
Observação, executei essa atividade com o fiofó na mão.
Está atualizando normalmente agora.
Vlw ae pelas dicas. -
AutorPosts
- Você deve fazer login para responder a este tópico.