- Este tópico contém 11 respostas, 4 vozes e foi atualizado pela última vez 15 anos, 2 meses atrás por
leandrolbs.
-
AutorPosts
-
12 de janeiro de 2011 às 5:35 pm #97661
leandrolbs
ParticipantePessoal, 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!!!!! =/
12 de janeiro de 2011 às 5:48 pm #97663CleitonHanzen
ParticipanteSim….
Isso se chama export inconsistente….
😆
12 de janeiro de 2011 às 5:56 pm #97664burga
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:2154589480563712 de janeiro de 2011 às 7:16 pm #97666leandrolbs
ParticipanteMinha 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 ?
12 de janeiro de 2011 às 7:36 pm #97668Regis Araujo
ParticipanteOla 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..!
12 de janeiro de 2011 às 7:56 pm #97670leandrolbs
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 ?
12 de janeiro de 2011 às 10:02 pm #97674CleitonHanzen
ParticipanteOpá….
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
12 de janeiro de 2011 às 10:10 pm #97675leandrolbs
Participantesim, 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.
12 de janeiro de 2011 às 11:53 pm #97681Regis Araujo
ParticipanteOla 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
13 de janeiro de 2011 às 2:38 pm #97687leandrolbs
Participanteobrigado 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?
13 de janeiro de 2011 às 4:07 pm #97691burga
ParticipantePra tirar esta dúvida, ao final da importação faça uma consulta na DBA_CONSTRAINTS. Lá você poderá ver uma coluna chamada VALIDATED… 😉
13 de janeiro de 2011 às 4:14 pm #97692leandrolbs
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
-
AutorPosts
- Você deve fazer login para responder a este tópico.