Erros de habilitação de constraints

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';
%name Erros de habilitação de constraints

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.