The db_block_checksum parameter is used to
performs block checks for all data blocks making sure that all
data in the block is consistent.
The db_block_checksum, works with db_block_checking and
db_ultra_safe.
Originally, the db_block_checksum
parameter allowed the DBWR (database writer) and sqlldr.exe
program to do a checksum when writing data to disk.
WARNING: While
the Oracle documentation says that
db_block_checksum=true
only adds a 1 to 10% overhead depending on concurrency of
DML, we have seen cases where
db_block_checksum=true
made the updates run 6x slower.
In 11g and beyond, the checks are moved from background to
foreground processes (IN RAM), creating less overhead then using
db_block_checksum against disk. Hence turning-on
block checking will add CPU overhead.
- Setting db_block_checksum=FULL will
notify Oracle to verify the checksum as it is being
transferred from one memory construct to another (i.e. user
session to buffer cache). This improves Oracle's capability
of identifying block corruptions and is particularly useful
when propagating blocks to standby databases, but adds CPU
overhead.
- Setting the db_block_checksum=TRUE
notifies the database writer process (DBWR) to calculate a
value based on the number of bytes in the block and store
that value in the cache header of every data block when
writing it to disk. This calculated number is called a
checksum. Checksums are verified when the block is read and
is used by Oracle to detect corruption caused by the various
components of disk storage systems.
Note that the
db_block_checksum parameter can be changed with an
alter system command:
alter system set
db_block_checksum=true scope=both;
For additional information on handling
corruption, see the
BC expert notes on corruption and see MOSC Note 1088018.1 -
Handling Oracle Database Corruption Issues.