Examine the following statement that is used to modify the primary key constraint on the SALES
table:
SQL> ALTER TABLE SALES MODIFY CONSTRAINT pk DISABLE VALIDATE;
Which three statements are true regarding the above command? (Choose three.)
A.
The constraint remains valid.
B.
The index on the constraint is dropped.
C.
It allows the loading of data into the table using SQL *Loader.
D.
New data conforms to the constraint, but existing data is not checked.
E.
It allows the data manipulation on the table using INSERT/UPDATE/DELETE SQL statements.
Constraint States (continued)
DISABLE NOVALIDATE:New as well as existing data may not conform to the constraint
because it is not checked. This is often used when the data is from an already validated source
and the table is read-only, so no new data is being entered into the table. NOVALIDATE is used in
data warehousing situations where the data has already been cleaned up. No validation is
needed, thereby saving time.
DISABLE VALIDATE:If a constraint is in this state, modification of the constrained columns is not
allowed because it would be inconsistent to validate the existing data and then allow unchecked
data to enter the table. This is often used when existing data must be validated but not modified
and when the index is not otherwise needed for performance.
ENABLE NOVALIDATE:New data conforms to the constraint, but existing data is in an unknown
state. This is frequently used when it is known that clean and conforming data exists in the table
so there is no need for validation. However, new violations are not allowed to enter the system.
ENABLE VALIDATE:Both new and existing data conform to the constraint. This is the typical and
default state of a constraint.
More useful info:
DISABLE VALIDATE disables the constraint and drops the index on the constraint, but keeps the constraint valid. This feature is most useful in data warehousing situations, because it lets you load large amounts of data while also saving space by not having an index. This setting lets you load data from a nonpartitioned table into a partitioned table using the exchange_partition_subpart clause of the ALTER TABLE statement or using SQL*Loader. All other modifications to the table (inserts, updates, and deletes) by other SQL statements are disallowed