Constraint Error ORA-02298 beim Enablen eines Constraints protokollieren

Ist ein Constraint im Status „DISABLED“ kann der Constration mit „alter table enable constraint <name>“ wieder aktiviert werden.
Haben sich aber inzwischen Fehler in den Daten eingeschlichen läßt sich der Constraint nicht mehr einschalten.
Fehler:

ORA-02298: cannot validate(string.string) - parent KEYS NOT found

Lösung:

Error Log Tabelle auf Constaint Level verwenden:

Anlegen der Error Log Tabelle mit dem Hilfescript
$ORACLE_HOME/dbhome_1/rdbms/admin/utlexcpt.sql oder $ORACLE_HOME/dbhome_1/rdbms/admin/utlexpt1.sql ( je nach DB Version beide vorhanden)

CREATE TABLE exceptions(row_id       rowid,
                        owner        varchar2(30),
                        TABLE_NAME   varchar2(30),
                        CONSTRAINT   varchar2(30)
)
/

Auf dem Constaint die Exception Tabelle aktivieren ( Keyword EXCEPTIONS INTO <NAME_DER_EXCEPTION_TABELLE> ) und damit den Constaint aktiveren

ALTER TABLE PRODUKTE ENABLE CONSTRAINT FK_LAGERORT_PRODUKT EXCEPTIONS INTO EXCEPTIONS;

Die Tabelle auswerten:

SELECT row_id FROM exceptions WHERE CONSTRAINT='FK_LAGERORT_PRODUKT';
 
row_id
--------
xxxxxxxxxxxxxxxxxx

Mit Hilfe der Row_id kann nun der entsprechende „fehlerbehaftete“ Datensatz ermittelt werden.

Workaround "enable novalidate"

Alternativ mit „alter table t enable novalidate constraint abc;“ damit wenigsten in Zukunft die Daten zusammenpassen müssen.