什么是数据块一致性?

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

当数据块被写回磁盘前,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的过程

oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html

转载于:https://blog.51cto.com/19880614/1309481

oracle数据块一致性检查的4种方法相关推荐

  1. 关于 RMAN 备份 数据块 一致性的讨论

    今天和 杭州恒生 的一个朋友讨论一个RMAN 在备份时数据块一致性的问题. 关于RMAN 的备份原理参考blog: RMAN 系列(一)---- RMAN 体系结构概述 http://blog.csd ...

  2. Oracle数据块损坏的恢复实例

    测试环境:11.2.0.4 1.构建数据块损坏的测试环境 2.有备份:常规恢复坏块 3.无备份:跳过坏块 1.构建数据块损坏的测试环境 1.1 创建测试表 --Create Table t_test ...

  3. oracle数据块格式小结

    Oracle数据块可分为三层  更细化 Cache layer--20字节,包含DBA.块类型.块格式.SCN:数据块被读取时进行完整性检查,确保没有损坏或fracture,即块更新信息只有部分被写入 ...

  4. oracle数据块损坏后的修复方法

    关于oracle数据块损坏的解决方法,相关链接网址在: http://blog.csdn.net/dlinger/archive/2004/08/24/83911.aspx http://www.it ...

  5. Oracle的逻辑结构(表空间、段、区间、块)——Oracle数据块(一)

    Oracle 的逻辑结构 ( 表空间.段.区间.块 ) --块 Oracle 存储数据的最小单位是数据块.Oracle 管理 数据库 数据文件的存储空间被称为数据块,一个数据块是数据库使用的最小数据单 ...

  6. Oracle数据块原理深入剖析

    数据块(Oracle Data Blocks),本文简称为"块",是Oracle最小的存储单位,Oracle数据存放在"块"中.一个块占用一定的磁盘空间.特别注 ...

  7. ORA-01578: ORACLE 数据块损坏 之奇妙处理 DBV

    下午接到研发人员报告: ORA-01578: ORACLE 数据块损坏 根据网上诸多仁兄的处理方案,具体采用下面检查: ORA-01578: ORACLE 数据块损坏 (文件号 6, 块号 20) O ...

  8. oracle itl解析,oracle数据块dump文件中ITL详解

    oracle数据块dump文件中ITL详解 dump出Oracle block后,可以看到事物槽,包含有事物槽号(ITL),XID,UBA,FLAG,LCK,SCN. 本文主要讨论FLAG标记的规则, ...

  9. 用Semisynchronous Replication半同步,mk-table-checksum数据同步一致性检查,监控主从同步运行状态的脚本等方式加强SQL性能和数据审核...

    一,为A组在X单独另建一个MYSQL服务器(MYSQL B),A组平时更新的数据库为MYSQL B.待MYSQL B的数据审核准确无误后.发布给现在布置在X上的MYSQL服务器(MYSQL A).并进 ...

最新文章

  1. Confluence 6 生产环境备份策略
  2. 高 NPS 背后的专业服务体系是如何炼成的?
  3. 设置(TableViewController)通用框架
  4. web框架django初探
  5. Linq 数据库操作(增删改查)
  6. SaaS 中 6 种常见 UI 入职模式
  7. 上海教育系统计算机职称考试报名,2008年第二季度上海市教育系统职称计算机考试报名的通知...
  8. SQL数据库不用SQL语句能显示全表的内容_Sql性能优化看这一篇就够了
  9. 用 C# 做人脸检测(基于EmguCV)
  10. 【图像分割】基于K-means聚类算法图像分割【含Matlab源码 1476期】
  11. 手把手教你学51单片机_第 一、二章
  12. 猫眼IPO后,在线票务平台或抛弃补贴战,未来看电影又贵了?
  13. 第1章 Dev C++的使用
  14. 生信学习-二代测序知乎专栏总结[转]
  15. Jmeter的Html报告汉化及解析
  16. 微信小程序开发多少钱?微信小程序开发费用
  17. 最近感冒恢复中,读了《平凡的世界》,写点感受。
  18. 【skLearn 回归模型】岭回归 <linear_model.Ridge>
  19. 计算机图形学与opengl C++版 学习笔记 第5章 纹理贴图
  20. MySQL——数据类型

热门文章

  1. C语言丨小 学 数 学(一):高精度加法
  2. 请求url处理java_【脚本写作】Java: HttpURLConnection请求处理
  3. endnote无法同步原因_endnote不能同步(endnote retrieving references)的解决方法
  4. mysql第四步安装失败_MySQL8.0版本的安装以及解决安装后MySQL服务无法启动的问题...
  5. java 泛型 类型形参(Type Parameters) 类型
  6. java 泛型 类型实参(type argument)
  7. Flask cookie API(response.set_cookie,request.cookies)
  8. MySQL 8.0.16安装(win64)
  9. Torchtext 教程
  10. it项目经理成长手记 mobi_步入IT行业的心路历程