Pular para o conteúdo
  • Este tópico contém 11 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 2 meses atrás por leandrolbs.
Visualizando 12 posts - 1 até 12 (de 12 do total)
  • Autor
    Posts
  • #97661
    leandrolbs
    Participante

      Pessoal, boa tarde.
      Seguinte, efetuei um export dos dados, como era muita informação e tinha usuários pendurados as tabelas filhos com ordem alfab. maior que a mãe ficaram com registros novos e a “mãe” sem o registro pois já havia exportado.

      Exemplo:

      Tá exportando …

      ==================
      tabela 1 155465 linhas (mãe).
      tabela 2 32465 linhas
      […].
      tabela 40 564654 linhas (neste momento, o usuário inseriu uma nova linha na tabela1).
      tabela 41 155466 linhas (filho).
      ====================

      Certo, isso é normal tratando de um export com usuarios online, porem na importação, os erros vieram no log, erros do tipo, registro mãe não encontrado..etc dando o alerta que não conseguiu ativar as chaves (FK enable).

      Depois disto, eu entrei no banco, e consultei as chaves desabilitadas, e o resultado foi 0.
      Depois disto, desabilitei a chave, e habilitei novamente… e não consegui, pois o erro voltou a aparecer..

      Pergunta: alguem já passou por essa situação?.

      Meu procedimento, foi desabilitar todas as chaves, e habilitar novamente… as que não habilitaram eu efetuei as correções.

      BUG!!!!! =/

      #97663
      CleitonHanzen
      Participante

        Sim….

        Isso se chama export inconsistente….

        😆

        #97664
        burga
        Participante

          É, como o Cleiton disse, não é BUG…

          Dê uma olhada aqui (como o Ishii, vamos orar ao Mestre Kyte) 😆 :
          http://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:21545894805637

          #97666
          leandrolbs
          Participante

            Minha pergunta não ficou clara,

            a pergunta tá… se o registro mãe não existe, como posso ativar e deixar enabled um constr. (FK) ?. Se o export ficar sem a consistent=y isso ocorre por falta deste param ?

            #97668
            Avatar photoRegis Araujo
            Participante

              Ola Leandro..!!

              Então.. vc vai ter que habilitar as constraints com o ENABLE CONSTRAINTS NOVALIDATE, onde desta maneira, o oracle não valida as informações já contidas nas tabelas filhas com as tabelas pais.. sendo que qualquer alteração deste momento para frente passará pela “validação” da constraint..!!

              Bom, se eu entendi bem.. é esta sua duvida..!

              Abraços..!

              #97670
              leandrolbs
              Participante

                é uma base pra teste de desempenho as informações não são de interesse, eu desabilitei todas as chaves do banco, e ative elas novamente (ficou desativo as com erro).

                Pelo ultimo post, o Oracle cria (IMP) as chaves então com novalide ?

                #97674
                CleitonHanzen
                Participante

                  Opá….

                  As constraints são criadas no import como estavam no momento do export…

                  Por padrão as constraints são criadas como ENABLE VALIDATE…..ou seja, tanto os dados existentes na tabela (ENABLE), quanto os novos dados (VALIDATE) serão checados pela constraint….

                  Para evitar furos na aplicação (por mais que seja em teste), eu recomendo que você faça 1 das 2 coisas:

                  • Resolva os problemas individuais de cada tabela e habilite as constraints
                  • Faça outro export (com consistent=y) e refaça o import

                  []s

                  #97675
                  leandrolbs
                  Participante

                    sim, ela cria do jeito que vc exporta. mais como disse deu problema.. com esse problema ocorrendo, ele passa ela pra novalidate? Pois ela tá ativa normal… se eu desativar e ativar tenho o erro mencionado.

                    #97681
                    Avatar photoRegis Araujo
                    Participante

                      Ola Leandro..!

                      Vamos aos passos..!!

                      1º – O IMPDP do Oracle ao ser executado, realiza os comandos “DDL” no momento da importação, ou seja, ele cria as tabelas e suas CONSTRAINTS, tanto PK quanto as FK´s (como VALIDATE), somente após ter realizado estes procedimentos o oracle vai começar a fazer “INSERTS” em todas as tabelas, ou seja, importar os dados realmente..!

                      Quando o “INSERT” (impot) dos dados de uma das tabelas da erro de CONSTRAINT, o ORACLE simplemente faz “ROLLBACK” dos dados que iriam ser inseridos naquela tabela, deixando a mesma sem linhas..

                      2º – Se vc desabilitar as constraints e habilita-las, vc não vai ter erro, pois as tabelas que apresentaram erro de FK´s estarão vazias e as constraints irão ser habilitadas normalmente…

                      Agora vamos aos passos que vc pode fazer para que não apresente erros..!! Já que este seu banco é apenas de TESTE..

                      1º – Realize o IMPDP com a opção CONTENT=METADATA_ONLY, isto vai fazer o seu import CRIAR (importar) todos os objetos do backup, mas não vai IMPORTAR as LINHAS..!! Somente será importado a estrutura do banco..!!

                      2º – Desabilite todas as FK´s do usuário específico do import..!

                      3º – Realize o IMPDP novamente mas agora com a opção CONTENT=DATA_ONLY, isto vai fazer o import APENAS DAS LINHAS das tabelas e como suas FK´s estão desabilitadas, o oracle não vai checar integridade entre tabelas PAIS e FILHAS..

                      4º – Agora vc vai HABILITAR suas FK´s mas com a opção “ENABLE CONSTRAINTS NOVALIDATE”, isto vai fazer com que suas constraints sejam HABILITADAS sem que o ORACLE valide a integridade dos dados que já existem.. ele somente vai verificar a integridade dos dados futuros..!!!

                      Bom, espero que tenha lhe ajudado..!!

                      Abraços

                      #97687
                      leandrolbs
                      Participante

                        obrigado pela dica… mais o que quero saber é simples.

                        1º exportei

                        2º Importei, neste momento alguns dados não ficaram válidos pois os registros “mãe” não foram exportados pois foram cadastrados junto ao export. Com os dados não válidos, o IMP apresentou erros de que não possível habilitar as chaves, mas não deixou de inserir TODAS as linhas.

                        3º Conectei no banco, e fui no script da Tabela filho, e ao olhar a FK ela estava HABILITADA normalmente, ou seja o erro apresentado no import não estava script conforme o log do imp.

                        4º Por curiosidade eu desabilitei essa FK, e habilitei novamente, com isso o erro apresentado no log imp apresentou tambem no teste.

                        ponto final,

                        minha duvida é quando eu importo com o IMP, e o registro mãe não é encontrado a FK é criada com NOVALIDETE?

                        #97691
                        burga
                        Participante

                          Pra tirar esta dúvida, ao final da importação faça uma consulta na DBA_CONSTRAINTS. Lá você poderá ver uma coluna chamada VALIDATED… 😉

                          #97692
                          leandrolbs
                          Participante


                            SELECT A.*
                            FROM SYS.ALL_CONSTRAINTS A
                            WHERE A.OWNER = 'OWNER'
                            AND A.CONSTRAINT_NAME NOT LIKE 'SYS%'
                            AND ((A.STATUS = 'DISABLED') or (A.VALIDATED != 'VALIDATED'))
                            ORDER BY DECODE(A.CONSTRAINT_TYPE, 'P', 1, 'R', 2, 'C', 3);

                            Ok Burga, minha duvida é se é um padrão, pois ficou realmente como NOTVALIDATE

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