Esses dias peguei um caso em que o cliente tentava habilitar uma constraint, mas retornava o seguinte erro:
ALTER TABLE SCOOT.TABELA MODIFY CONSTRAINT NOME_DA_CONSTRAINT_FK ENABLE
Error at line 2ORA-02298: não é possível validar (SCOOT.NOME_DA_CONSTRAINT_FK) - chaves mães não localizadas
Para investigarmos qual a inconsistência que impede a constraint de ser habilitada, vamos utilizar a função EXCEPTIONS, que foi criada no meu caso no schema SYS.
@?/rdbms/admin/utlexcpt.sql Table created.
O próximo passo é emitir novamente o comando de habilitação da constraint, incluindo a clausula EXCEPTIONS INTO SYS.EXCEPTIOS
ALTER TABLE SCOOT.TABELAENABLE CONSTRAINT NOME_DA_CONSTRAINT_FK EXCEPTIONS INTO SYS.EXCEPTIONS;
Consultando a view dba_cons_columns, descobrimos as colunas envolvidas na constraint;
select column_name from dba_cons_columns where constraint_name='NOME_DA_CONSTRAINT_FK';
COLUMN_NAME -------------------------------------------------------------------------------- NR_ATENDIMENTO DT_ATENDIMENTO
Agora, utilizando as colunas retornadas nesse select, fazemos um join naa tabelas exceptions e scoot.tabela para verificarmos o registro que impede a habilitação da constraint;
select NR_ATENDIMENTO, DT_ATENDIMENTO from scoot.TABELA a, sys.EXCEPTIONS b where a.rowid=b.row_id;
NR_ATENDIMENTO DT_ATENDIMENTO -------------- -------------- 635325 27-JUL-11
Pronto, temos o registro que está faltando na tabela mãe. Para finalizar, precisamos saber qual a tabela referenciada na constraint e assim inserir o registro faltante ou remover o que está a mais na tabela filha.
select table_name from dba_constraints where constraint_name='DIAMEDI_PK';
Autor: Bruno Zehetmeyr bruno.zehe
Bacharel em Ciência da Computação pela UNORP-SP, Pós-graduado em Administração de Sistemas de Informação pela UFLA-MG e pós-graduado em Administração de Banco de Dados Oracle pela VERIS-SP. Analista DBA na Teiko Soluções em TI e professor universitário no Centro Universitário de Brusque – UBIFEBE. Certificado OCP 10g e OCP 11g, OCE Linux. Residente em Blumenau-SC.