RE:Diferencia entre NOVALIDATE y DISABLE
DISABLE, es para desactivar una constraint, y NOVALIDATE es una opcion del DISABLE o el ENABLE que no te comprueba tanto en el ENABLE como en el DISABLE que la constraints se cumpla.
La opcion por defecto en DISABLE es NOVALIDATE y en el ENABLE es VALIDATE.
EJ:
Si tengo una constraint que me impide que el campo A tenga valores nulos, mientras este enabled no me dejara introducir los nulos en A.
Si hago un DISABLE con la opcion VALIDATE, comprobara que la no tenga ningun valor nulo, si lo tiene no me dejara. Si la opcion es NOVALIDATE no comprueba nada.
Bien, ahora ya la tengo DISABLE, e introduzco un valor nulo en A. Si la quiero poner ENABLE, solo lo podre hacer con la opcion NOVALIDATE, ya que de esta forma aunque A tenga un valor nulo, no lo comprueba, y a partir del momento en que la pongo enable, volvera a no dejarme introducir un nuevo valor en A que sea nulo, sin importarle el contenido anterior. Si la opcion es VALIDATE, no me dejara activar la constraint porque A tiene un valor nulo.
Supongamos que lo he activado con novalidate, con lo que A ya tiene un valor nulo. Si ahora intento desactivarla, con DISABLE VALIDATE, no me dejara porque A tenia un valor nulo de antes, por lo que solo pordre desactivarla con DIABLE NOVALIDATE.
Espero haberme explicado bien.
Un saludo