DB_BLOCK_CHECKSUM
Property | Description |
---|---|
Parameter type | String |
Syntax | DB_BLOCK_CHECKSUM = { OFF | FALSE | TYPICAL | TRUE | FULL } |
Default value | TYPICAL |
Modifiable | ALTER SESSION , ALTER SYSTEM |
Basic | No |
DB_BLOCK_CHECKSUM
determines whether DBW
n
and the direct loader will calculate a checksum (a number calculated from all the bytes stored in the block) and store it in the cache header of every data block when writing it to disk. Checksums are verified when a block is read - only if this parameter is TYPICAL
or FULL
and the last write of the block stored a checksum. In FULL
mode, Oracle also verifies the checksum before a change application from update/delete statements and recomputes it after the change is applied. In addition, Oracle gives every log block a checksum before writing it to the current log.
Starting with Oracle Database 11g, most of the log block checksum is done by the generating foreground processes, while the LGWR performs the rest of the work, for better CPU and cache efficiency. Prior to Oracle Database 11g, the LGWR solely performed the log block checksum.
If this parameter is set to OFF
, DBW
n
calculates checksums only for the SYSTEM
tablespace, but not for user tablespaces. In addition, no log checksum is performed when this parameter is set to OFF
.
Checksums allow Oracle to detect corruption caused by underlying disks, storage systems, or I/O systems. If set to FULL
, DB_BLOCK_CHECKSUM
also catches in-memory corruptions and stops them from making it to the disk. Turning on this feature in TYPICAL
mode causes only an additional 1% to 2% overhead. In the FULL
mode it causes 4% to 5% overhead. Oracle recommends that you set DB_BLOCK_CHECKSUM
to TYPICAL
.
For backward compatibility the use of TRUE
(implying TYPICAL
) and FALSE
(implying OFF
) values is preserved.
#######################################################################
#######################################################################
DB_BLOCK_CHECKING
Property | Description |
---|---|
Parameter type | String |
Syntax | DB_BLOCK_CHECKING = { FALSE | OFF | LOW | MEDIUM | TRUE | FULL } |
Default value | FALSE |
Modifiable | ALTER SYSTEM |
Basic | No |
DB_BLOCK_CHECKING
specifies whether or not Oracle performs block checking for database blocks.
Values:
-
OFF
orFALSE
No block checking is performed for blocks in user tablespaces. However, semantic block checking for
SYSTEM
tablespace blocks is always turned on. -
LOW
Basic block header checks are performed after block contents change in memory (for example, after
UPDATE
orINSERT
statements, on-disk reads, or inter-instance block transfers in Oracle RAC). -
MEDIUM
All
LOW
checks and full semantic checks are performed for all objects except indexes (whose contents can be reconstructed by a drop+rebuild on encountering a corruption). -
FULL
orTRUE
All
LOW
andMEDIUM
checks and full semantic checks are performed for all objects.
Oracle checks a block by going through the data in the block, making sure it is logically self-consistent. Block checking can often prevent memory and data corruption. Block checking typically causes 1% to 10% overhead, depending on workload and the parameter value. Specific DML overhead may be higher. The more updates or inserts in a workload, the more expensive it is to turn on block checking. You should set DB_BLOCK_CHECKING
to FULL
if the performance overhead is acceptable.
For backward compatibility, the use of FALSE
(implying OFF
) and TRUE
(implying FULL
) is preserved.