mysql坏块检查_Oracle-数据库坏块

在我们对数据块进行读取写入操作的时候,数据库会对要读写的数据块做一致性的检查,其中包括:数据块的类型、数据块的地址信息、

一. 什么是数据库的坏块

首先我们来大概看一下数据库块的格式和结构:

数据库的数据块有固定的格式和结构,分三层:

Cache layer

Transaction layer

Data layer

在我们对数据块进行读取写入操作的时候,数据库会对要读写的数据块做一致性的检查,其中包括:数据块的类型、数据块的地址信息、数据块的SCN号以及数据块的头部和尾部。如果发现其中有不一致的信息,那数据库就会标记这个数据块为坏块了。数据库的坏块分为两种:逻辑坏块和物理坏块

逻辑坏块(Logically Corrupt):example: the block was corrupted by an Oracle internal error but does not appear to be media corrupt

物理坏块(Media Corrupt):incorrect checksum/wrong data block address/impossible block type

二. 坏块对数据库产生的影响

如果数据库出现坏块,数据库的告警日志文件里面会存在有如下的一些报错信息:

Ora-1578以及Ora-600 and trace file in bdump directory,其中Ora-600错误的第一个参数值的范围是[2000]-[8000],不同的值代表着数据块的不同的层出现问题,具体的如下表所示:

Range block layer

Cache layer 2000 – 4000

Transaction layer 4000 – 6000

Data layer 6000 – 8000

坏块产生影响的对象可能是数据字典表、回滚段表、临时段、用户数据表和索引等。不同的对象产生坏块后的处理方法不尽相同。

三. 坏块产生的原因

oracle 调用标准C的系统函数,对数据块进行读写操作,,因此,坏块是有可能由以下几种原因产生:

? 硬件的I/O错误

? 操作系统的I/O错误或缓冲问题

? 内存或paging问题

? 磁盘修复工具

? 一个数据文件的一部分正在被覆盖

? oracle 试图访问一个未被格式化的系统块失败

? 数据文件部分溢出

? oracle 或者操作系统的bug

四. 坏块的处理方法

1. 先收集相应的关于坏块的信息,从AlertSID.log文件或者从trace文件中查找,找到例如以下的一些信息:

Ora-1578 file# (RFN) block#

Ora-1110 file# (AFN) block#

Ora-600 file# (AFN) block#

其中RFN表示的是relative_fno

AFN表示的是file_id

Select file_name,tablespace_name,file_id ,relative_fno “RFN”

From dba_data_files

Union All

Select file_name,tablespace_name,file_id, relative_fno“RFN”

From dba_temp_files;

2. 确定存在坏块的对象是什么:

SELECT tablespace_name,segment_type,owner,segment_name, partition_name

FROM dba_extents

WHERE file_id = AND between block_id AND block_id + blocks – 1;

通过上面这个查询语句就可以查出当前存在坏块的对象是什么,是什么类型的对象。需要注意的是如果是temp文件中出现坏块,是没有记录返回的。

3. 根据2中查询出来的对象类型,确定相应的处理方法

出现坏块的常见对象有:

? Sys用户下的对象

? 回滚段

? 临时段

? 索引或者分区索引

? 表

常用的处理方法有:

? 恢复数据文件

? 只恢复坏的block(9i以上版本可用)

? 通过ROWID RANGE SCAN 保存数据

? 使用DBMS_REPAIR

? 使用EVENT

4. 具体处理方法的介绍

? 恢复数据文件方法:

如果数据库是归档方式下,并且有完整的物理备份,就可以使用此方法来恢复。

步骤如下:

1) 先offline受影响的数据文件,执行以下的语句:

ALTER DATABASE DATAFILE ‘name_file’ OFFLINE;

2) 保留有坏块的数据文件,然后拷贝备份的数据文件。如果恢复的数据文件要求路径不同,执行以下的语句:

ALTER DATABASE RENAME FILE ‘old_name’ TO ‘new_name’;

3) 恢复数据文件,执行以下语句:

RECOVER DATAFILE ‘name_of_file’;

4) Online恢复后的数据文件,执行以下的语句:

ALTER DATABASE DATAFILE ‘name_of_file’ ONLINE;

? 只恢复坏的block(9i以上版本可用)

logo.gif

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值