前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >在Oracle中,什么是坏块?坏块可以分为哪几类?

在Oracle中,什么是坏块?坏块可以分为哪几类?

作者头像
AiDBA宝典
发布2023-08-09 14:15:21
4290
发布2023-08-09 14:15:21
举报
文章被收录于专栏:小麦苗的DB宝专栏
题目部分

在Oracle中,什么是坏块?坏块可以分为哪几类?

答案部分

Oracle数据文件的坏块可以分为物理坏块(Physical Block Corruptions)和逻辑坏块(Logical Block Corruptions)。坏块通常是通过Oracle的ORA-01578错误报告出来的,详细的损坏描述会在告警日志中打印出来,“oerr ora”对该错误的解释如下所示:

代码语言:javascript
复制
[root@rhel6lhr ~]# oerr ora 1578
01578, 00000, "ORACLE data block corrupted (file # %s, block # %s)"
// *Cause:  The data block indicated was corrupted, mostly due to software
//          errors.
// *Action: Try to restore the segment containing the block indicated. This
//          may involve dropping the segment and recreating it. If there
//          is a trace file, report the errors in it to your ORACLE
//          representative.

可能的报错如下所示:

代码语言:javascript
复制
ORA-01578: ORACLE data block corrupted (file # 11, block # 110)
ORA-01110: data file 6: '/u01/app/oracle/oradata/orcl/tbs01.dbf'

在以上示例中,绝对文件号(AFN,Absolute File Number)为11,块号(Block Number)为110。

使用如下的SQL可以获取相对文件号RFN(RFN,Relative File Number):

代码语言:javascript
复制
SELECT DBMS_UTILITY.DATA_BLOCK_ADDRESS_FILE(&&RDBA) RFN,
       DBMS_UTILITY.DATA_BLOCK_ADDRESS_BLOCK(&&RDBA) BL
FROM DUAL;

其中,RDBA(Relative Data Block Address)表示相对数据块地址。

使用如下的SQL可以获取绝对文件号AFN:

代码语言:javascript
复制
SELECT FILE_ID AFN, RELATIVE_FNO, TABLESPACE_NAME
FROM DBA_DATA_FILES
WHERE RELATIVE_FNO=&RFN;

物理坏块指的是块格式本身已经损坏,块内的数据没有任何意义。物理坏块一般是由于内存问题、OS问题、I/O子系统问题或硬件引起的,逻辑坏块一般是由Oracle Bug等原因引起的。物理块损坏也可以称为介质块损坏(Media Corrupt Block)。物理坏块可以分为以下几类:

① 坏头(Bad header):数据块头(Cache Header)被无效值损坏

② 块有裂缝/不完整(Fractured/Incompleted Block):数据块头和块尾不匹配,其trace文件内容如下所示:

代码语言:javascript
复制
Corrupt block relative dba: 0x0380e573 (file 14, block 58739)
Fractured block found during buffer read
Data in bad block -
type: 6 format: 2 rdba: 0x0380e573
last change scn: 0x0288.8e5a2f78 seq: 0x1 flg: 0x04
consistency value in tail: 0x00780601
check value in block header: 0x8739, computed block checksum: 0x2f00
spare1: 0x0, spare2: 0x0, spare3: 0x0
***
Reread of rdba: 0x0380e573 (file 14, block 58739) found same corrupted data

③ 块的块校验和(checksum)无效,其trace内容如下所示:

代码语言:javascript
复制
Corrupt block relative dba: 0x0380a58f (file 14, block 42383)
Bad check value found during buffer read
Data in bad block -
type: 6 format: 2 rdba: 0x0380a58f
last change scn: 0x0288.7784c5ee seq: 0x1 flg: 0x06
consistency value in tail: 0xc5ee0601
check value in block header: 0x68a7, computed block checksum: 0x2f00
spare1: 0x0, spare2: 0x0, spare3: 0x0
***
Reread of rdba: 0x0380a58f (file 14, block 42383) found same corrupted data

④ 块的位置错误(Block Misplaced):检验和正确,但是正在被读取的数据块的内容属于另外一个块

代码语言:javascript
复制
Corrupt block relative dba: 0x0d805a89 (file 54, block 23177)
Bad header found during buffer read
Data in bad block -
type: 6 format: 2 rdba: 0x0d805b08 ----> Block is different than expected 0x0d805a89
last change scn: 0x0692.86dc08e3 seq: 0x1 flg: 0x04
consistency value in tail: 0x08e30601
check value in block header: 0x2a6e, computed block checksum: 0x0
spare1: 0x0, spare2: 0x0, spare3: 0x0
***

⑤ 归零的块(Zeroed out blocks):可参考Note 1545366.1。

逻辑坏块指的是块内的数据在逻辑上存在问题,比如说索引块的索引值没有按顺序排列导致的逻辑坏块。逻辑坏块通常包含一个正确的checksum和结构,但是块头以下的部分(块的内容)被损坏,可能引起不同的ORA-600错误。逻辑损坏详细的损坏信息通常不打印在alert告警日志中,但是DBV将报告逻辑损坏的块。

逻辑坏块可以分为以下几类:

① 行被不存在的事务锁定--ORA-600[4512]等

② 使用的空间大小不等于块的大小

③ avsp bad

④ 其它

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DB宝 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档