1) Find the violate constraint rows in your Oracle DB.
As we known, "enable validate", "enable" for new values, "validate" for old values to make constraints work. If you Oracle DB default option is enable and novalidate, then you want to modify to enable and validate so that make all data confirm some constraints . Unfortunatly, may you find some data real violate constraints, however, you could not find where it is. So following method could help you. It is not a big deal, I just write it down to a shell script. 1@@@@ Here, I write a shell scirpt to make it work [oracle@station78 ~]$ cat ./check_violate_constraint_rows.sh #!/bin/sh #please intput $1 table_name, $2 constraint_name read -p "Please input table name (like hr.employees): " tab read -p "Please input constraint name(like chk_xxx): " cons sqlplus / as sysdba<< EOF > violate_constraint_rows.txt DROP TABLE exceptions PURGE; @\$ORACLE_HOME/rdbms/admin/utlexpt1.sql ALTER TABLE $tab ENABLE VALIDATE CONSTRAINT $cons EXCEPTIONS INTO EXCEPTIONS; SELECT * FROM $tab WHERE ROWID IN (SELECT row_id FROM exceptions); EOF echo " " echo "You could check the output file violate_constraint_rows.txt !!! " echo "Find the violate constraint rows, and do something." echo " " @@@Usage Example [oracle@station78 ~]$ ./check_violate_constraint_rows.sh Please input table name (like hr.employees): test.t_trainsupport_executions Please input constraint name(like chk_xxx): CHK_TRAINSUPPORT_EXEC_CUSTFAC You could check the output file violate_constraint_rows.txt !!! Find the violate constraint rows, and do something. [oracle@station78 ~]$ cat violate_constraint_rows.txt SQL*Plus: Release 10.2.0.1.0 - Production on Mon Dec 31 15:15:05 2012 Copyright (c) 1982, 2005, Oracle. All rights reserved. Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production With the Partitioning, OLAP and Data Mining options SYS@ocm> Table dropped. SYS@ocm> Table created. SYS@ocm> Table altered. SYS@ocm> no rows selected SYS@ocm> Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - 64bit Production With the Partitioning, OLAP and Data Mining options 2@@@@ Here I write a sql script to make it work. SYS@ocm> !cat x.sql DROP TABLE exceptions PURGE; @\$ORACLE_HOME/rdbms/admin/utlexpt1.sql ALTER TABLE &&table_name ENABLE VALIDATE CONSTRAINT &constraint_name EXCEPTIONS INTO EXCEPTIONS; SELECT * FROM &table_name WHERE ROWID IN (SELECT row_id FROM exceptions); @@@Usage Example: SYS@ocm> @x.sql Table dropped. Table created. Enter value for table_name: test.t_trainsupport_executions old 1: ALTER TABLE &&table_name new 1: ALTER TABLE test.t_trainsupport_executions Enter value for constraint_name: CHK_TRAINSUPPORT_EXEC_CUSTFAC old 2: ENABLE VALIDATE CONSTRAINT &constraint_name new 2: ENABLE VALIDATE CONSTRAINT CHK_TRAINSUPPORT_EXEC_CUSTFAC Table altered. old 1: SELECT * FROM &table_name WHERE ROWID IN (SELECT row_id FROM exceptions) new 1: SELECT * FROM test.t_trainsupport_executions WHERE ROWID IN (SELECT row_id FROM exceptions) no rows selected