Pular para o conteúdo
Visualizando 9 posts - 1 até 9 (de 9 do total)
  • Autor
    Posts
  • #99528
    Sousa04
    Participante

      Olá 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 1

      SQL> 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 1

      SQL> 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 1

      SQL> 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_CAMPO

      SQL> 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)
      —————-
      1530

      SQL> SELECT COUNT(CD_OBJETO) FROM MVADMIN.TB_ATRIBUTO;

      COUNT(CD_OBJETO)
      —————-
      1530

      SQL> SELECT COUNT(CD_OBJETO) FROM ABAPS.TB_INFRACAOATRIBUTO;

      COUNT(CD_OBJETO)
      —————-
      457

      SQL> 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

      #99530
      CleitonHanzen
      Participante

        Opá…

        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.

        #99531
        Sousa04
        Participante

          pensei em fazer isso, mas fazendo isso conseguirei habilitar a constraint depois do refresh?

          #99534
          CleitonHanzen
          Participante

            Opá…

            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.

            #99548
            Sousa04
            Participante

              Cleiton

              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?

              #99550
              CleitonHanzen
              Participante

                Opá….

                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)…

                #99551
                vieri
                Participante

                  WITH ROW ID
                  WITH PRIMARY KEY

                  verifique qual dessas clausulas suas mviews estão utilizando!!

                  #99553
                  Sousa04
                  Participante

                    opá vieri

                    é WITH PRIMARY KEY

                    #99596
                    Sousa04
                    Participante

                      só 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.

                    Visualizando 9 posts - 1 até 9 (de 9 do total)
                    • Você deve fazer login para responder a este tópico.