db_block_checking db_block_checksum 这两个参数的理解

版权声明:本文为博主原创文章,转载请标明出处。 https://blog.csdn.net/ctypyb2002/article/details/86613481

os: centos 7.4
db: oracle 12.1.0.2

db_block_checking 是对 block 做逻辑性检查,避免内存中数据块的损坏.
db_block_checksum 是对 block 做物理性检查,用于 DBWn 和 direct loader 数据块写入到磁盘时,基于块内的所有字节计算得出一个校验值并将其写入块头.

db_block_checking

DB_BLOCK_CHECKING = { FALSE | OFF | LOW | MEDIUM | TRUE | FULL }

通过 ALTER SYSTEM 来修改

alter system set DB_BLOCK_CHECKING=FULL;

OFF or FALSE

用户表空间将不会进行 block checking ,但是 system 表空间始终是需要检查的.

LOW
当块在内存中的内容发生变化后,只做基本的块头检查.(比如,UPDATE, INSERT or DELETE,RAC 的实例间传输)

MEDIUM
除索引外的所有对象,进行 LOW 级别的检查 和完整性检查

FULL or TRUE

所有对象的 LOW + MEDIUM,进行完整性和正确性检查.

其中,设置为 FALSE 或者 TRUE 是为了兼容老版本.
根据参数值的设置不同,会增加额外的 1% ~ 10% 的代价.如果性能可以接受的话,建议设置为 FULL.

db_block_checksum

DB_BLOCK_CHECKSUM = { OFF | FALSE | TYPICAL | TRUE | FULL }

通过 ALTER SYSTEM 来修改

alter system set DB_BLOCK_CHECKSUM=FULL;

OFF or FALSE

DBWn 只在 system 表空间计算 checksums , 而在用户表空间是不会计算的.

TYPICAL or TRUE

当读入时候重新计算校验和写出时候的校验对比,如果不同则认为是块损坏
会增加额外 1% ~ 2% 的代价,oracle 强烈建议设置为 TYPICAL.

FULL

当读入时候重新计算校验和写出时候的校验对比,如果不同则认为是块损坏.
设置为FULL模式,则基于update/delete应用程序语句级别的改变发生后,校验值会被重新计算并写入.
同时对于日志块,在写入之前,同样会生产校验值并写入到块头。该参数主要是防止IO硬件和IO子系统的错误
会增加额外 4% ~ 5% 的代价

同样,设置为 FALSE 或者 TRUE 是为了兼容老版本.所以在设置时尽量不要设置为 false,true

参考:
https://docs.oracle.com/database/121/REFRN/GUID-23700E5C-6BFC-48C2-9728-EB1F93F95DD6.htm#REFRN10029
https://docs.oracle.com/database/121/REFRN/GUID-A0F72B65-BC1C-441B-824E-03ADCE66063A.htm#REFRN10030

猜你喜欢

转载自blog.csdn.net/ctypyb2002/article/details/86613481
DB