教学文章
Technology Exchange
热门课程
400电话

免费咨询热线
400-090-9964

教学文章

oracle数据块一致性检查的4种方法

时间:2017-07-12 来源:

  什么是数据块一致性?

  每一个数据块头部都有一个“校验和”字段

  当数据块被写回磁盘前,Oracle会重新计算这个校验和

  并记录到这个字段,最终写回磁盘

  下次数据块被读入内存时,Oracle会重新计算数据块的校验和

  并与校验和字段中的值相比较

  如果有差异,Oracle就会抛出ORA-1578

  也就是,整个校验过程:

  写回时,计算并保存

  读入时,计算并比较

  通过校验和字段进行检查叫物理一致性检查,其侧重于硬件故障,并不关心内容正确与否

  而逻辑一致性检查便是接手这任务,如:记录和索引是否对应;记录是否被不存在的事务锁定等

  db_block_checksum:物理一致性检查

  当值为true时,Oracle除了会对所有表空间的数据块进行校验和检查,还会对redo log块做校验和

  如果置之为false,则只会对system表空间的数据块进行校验

  Oracle建议开启这个参数

  db_block_checking:逻辑一致性检查

  当值为false时,只会对system表空间做逻辑一致性检查

  对性能影响比较大,需DBA自己权衡

  4种工具校验

  ① DBV

  可以对数据文件物理和逻辑进行一致性检查

  但不会检查表和索引的匹配性

  具体参见我之前的博客:

  Oracle 工具dbv的使用介绍

  ② analyze

  同样执行物理和逻辑一致性检查

  能够检查表和索引的匹配性

  若是检查出问题,则会将问题放在USER_DUMP_DEST的trc文件内

  analyze检查对象一致性语法:

  analyze table table_name validate structure cascade online(offline)

  注释:

  ⑴ cascade:可确认每条记录都有相应的索引

  ⑵ online :在线一致性检查,只是不会收集对象统计信息

  ⑶ offline:可收集对象统计信息,只是表会被锁住

  ⑷ 当检查分区表的记录是否在正确分区时,可把检查出来的记录的rowid放在特殊的表invalid_rows中

  这之前需要运行:$ORACLE_HOME/rdbms/admin/utlvalid.sql脚本

  对应的语法:

  analyze table table_name validate structure into invalid_rows;

  由于这个命令也比较重要,我会专门写一个博客介绍!

  ③ RMAN

  使用rman备份时,是先把数据块读到rman的读缓冲区,然后再拷贝到rman的写缓冲区,最后再从写缓冲区写到物理介质上

  在从读缓冲区到写缓冲区的拷贝过程中,rman会对数据块进行一致性检查

  语法:

  backup check logical validate;

  注释:

  这个命令只进行一致性检查,并不进行备份

  检查结果放在v$database_block_corruption

  logical:进行逻辑一致性检查

  validate:进行物理一致性检查

  例子:

  backup check logical validate datafile 1;

  除了可以检查数据文件,rman还可以检查已经备份的文件

  语法:

  restore validate

  例子:

  检查数据库备份

  restore validate database;

  检查备份的控制文件

  restore validate controlfile to '/u01/....';

  检查归档日志文件

  restore validate archivelog from sequence x until sequence y;

  ④ dbms_repair

  发现、标识并修改数据文件中的坏块

  但使用这个包的同时会带来数据丢失、表和索引返回数据不一致,完整性约束破坏等其他问题

  因此,dbms_repair只是在没有备份的情况下使用的一种手段,这种方式一般都会造成数据的丢失

  dbms_repair包的工作原理比较简单,是将检查到的坏块标注出来,使随后的dml操作跳过该块

  同时,dbms_repair包还提供了用于保存索引中包含的标注为坏块中的键值,以及修复freelist和segment bitmap的过程

版权所有@北京神脑资讯技术有限公司(CUUG,中国UNIX用户协会) Copyright ALL Rights Reserved 京ICP备11008061号-1

CUUG旗下网站:www.cuug.com.cn www.cuug.com oracle.cuug.com bbs.cuug.com www.cuug.net

电话:010-59426307 010-59426319 邮政编码:100089

地址:北京市海淀区北清路164号28-38号院