NOVALIDATE session environment option
Use the NOVALIDATE environment option to specify whether a foreign-key or check constraint that the ALTER TABLE ADD CONSTRAINT statement creates, or that has its constraint mode reset by the SET CONSTRAINTS statement, are in NOVALIDATE mode by default. The NOVALIDATE setting has no effect, however, on ADD CONSTRAINT or SET CONSTRAINT operations that specify DISABLED mode.
Usage
Enabling this session environment variable can prevent referential-integrity checking of the foreign-key constraint or checking the condition of the check constraint during these subsequent SQL statements:
- ALTER TABLE ADD CONSTRAINT
- SET CONSTRAINTS ENABLED
- SET CONSTRAINTS FILTERING
Bypassing validation during these data definition language (DDL) operations can improve the performance of the database server in contexts where there is no reason to expect integrity or check condition violations, or where validation of constraints can be postponed until after the tables are relocated to another database.
'1'
orON
- You do not need to explicitly include the NOVALIDATE keyword to bypass validation of the ENABLED or FILTERING constraint while either of those DDL statements is running.
'0'
orOFF
- This restore the default behavior of those DDL statements, so that the database server automatically checks the table for constraint violations during the ALTER TABLE or SET CONSTRAINTS operation that created or enabled the constraint.
While you are creating ENABLED or FILTERING constraints with the ALTER TABLE ADD CONSTRAINT statement, or changing the mode of a constraint to ENABLED or FILTERING with the SET CONSTRAINTS statement, the NOVALIDATE option prevents the database server from checking for constraint violations while the ALTER TABLE or SET CONSTRAINTS statement is running. That can save significant time in moving large tables.
SET ENVIRONMENT NOVALIDATE '1';
It has these subsequent effects during the following DDL operations on foreign-key or check constraints in the database to which the current session is connected:
- SET CONSTRAINTS options of the SET Database Object Mode statements for constraints change the default or explicit constraint mode to include NOVALIDATE, unless DISABLED is specified as the constraint mode.
- Constraints that the ALTER TABLE ADD CONSTRAINT statement specifies with no explicit mode are created in ENABLED NOVALIDATE mode by default.
- Constraints that the ALTER TABLE ADD CONSTRAINT statement specifies in ENABLED or in FILTERING mode are also in NOVALIDATE mode by default.
SET ENVIRONMENT NOVALIDATE OFF;
For subsequent SET CONSTRAINTS or ALTER TABLE ADD CONSTRAINT statements that omit the
NOVALIDATE
keyword from the object mode of a constraint, the database server
validates the referential integrity or check conditions of the table by performing a full-table scan
or an index scan. For tables with a million rows, for example, the cost of this validation is
substantial.
Suspending constraint-checking during SET CONSTRAINTS or ALTER TABLE ADD CONSTRAINT statements by enabling the NOVALIDATE session environment option can be efficient for tables that have been populated by OLTP operations that enforced the same constraints. After moving those tables to another database or to a data warehouse with their constraints dropped or disabled, you can use the SET ENVIRONMENT NOVALIDATE ON statement to avoid the overhead of checking for violations while the constraints are being restored.
Examples of setting NOVALIDATE
Like all
SQL keywords, the ON
and OFF
settings
are case insensitive.
Double ( " ) and single ( ' ) quotation
marks are both valid as delimiters for the "1"
and "0"
settings,
but both delimiters of a numeric setting must be the same.
NOVALIDATE
a default keyword in subsequent DDL operations
setting the mode of constraints within the scope of this session environment option, use any of the
following statements:
SET ENVIRONMENT NOVALIDATE '1'; SET ENVIRONMENT NOVALIDATE ON; SET ENVIRONMENT NOVALIDATE "1"; SET ENVIRONMENT NOVALIDATE on;
NOVALIDATE
keyword in SQL operations that create or reset the mode of a
constraint without checking:
SET ENVIRONMENT NOVALIDATE '0'; SET ENVIRONMENT NOVALIDATE OFF; SET ENVIRONMENT NOVALIDATE "0"; SET ENVIRONMENT NOVALIDATE off;