一次坏块的处理过程(二)

二、后续处理

上面的步骤解决了坏块对数据库的潜在影响,但是此时v$database_block_corruption的信息是还没有清除的,需要清除,需要再运行RMAN,如果没有坏块已经修复,才会从v$database_block_corruption删除对应记录。
但是在大部分情况下,即使删除了原来的对象,数据块的状态让人是标识损坏的,但是不影响一般的数据库操作,可以忽略。如果你看不顺眼或者担心它影响RMAN的备份,可以用以下方法格式化这个数据块,只有被正常格式化后,数据块状态才会恢复正常。
[@more@]

1. 首先创建一个新表

create table s (n number,c varchar2(4000)) nologging tablespace dwdata_1m;

注意表空间要指定在坏块所在的表空间上(v$database_block_corruption可查询到)

2. 确保目标数据块在free list上,并查询其大小
SQL> Select BYTES from dba_free_space where file_id=2 and 502554 between block_id and block_id + blocks -1;

BYTES
----------
1048576


3. 手工扩展

BEGIN
FOR I IN 1 .. 100000000
LOOP
EXECUTE IMMEDIATE 'alter table s allocate extent(size 1048576 datafile ''+DATA/dwrac/datafile/dwdata_1m01.dbf'')';
END LOOP;
END;

在这一步执行的同时,不断地查新dba_free_space,直至确认该数据块已经不在dba_free_space中了,之后就可以把上一步操作的循环中断。

SQL> Select * from dba_free_space where file_id= 2 and 502554 between block_id and block_id + blocks -1;

TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO
-------------------------------- ---------- ---------- ---------- ---------- ------------

4. 下一步就是要写里写入数据了

BEGIN
FOR i IN 1..1000000000 LOOP
INSERT /*+ APPEND */ INTO s select i, lpad('REFORMAT',3092, 'R') from dual connect by rownum<=10000;
commit ;
END LOOP;
END;
/

注意:必须要写入数据,数据块才能被重新格式化,才能修复块的状态。

5. 在写入数据的同时,不断用dbv检测坏块情况

--指定start和end参数,提高效率
[oracle@dwdb02 admin]$ dbv file="+DATA/dwrac/datafile/dwdata_1m01.dbf" start=502554 end=502554 userid=admin/sdoadmin123 blocksize=16384

DBVERIFY: Release 10.2.0.5.0 - Production on Thu Feb 17 15:56:53 2011

Copyright (c) 1982, 2007, Oracle. All rights reserved.

DBVERIFY - Verification starting : FILE = +DATA/dwrac/datafile/dwdata_1m01.dbf


DBVERIFY - Verification complete

Total Pages Examined : 714581
Total Pages Processed (Data) : 610675
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 100202
Total Pages Failing (Index): 0
Total Pages Processed (Other): 3704
Total Pages Processed (Seg) : 0
Total Pages Failing (Seg) : 0
Total Pages Empty : 0
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Highest block SCN : 0 (0.0)

如果Total Pages Marked Corrupt=0,则表示数据块已经修复了。此时就可以取消上一步的数据insert操作。

6. 用rman重新validate一次

RMAN> backup check logical validate datafile 2;

Starting backup at 17-FEB-11
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backupset
channel ORA_DISK_1: specifying datafile(s) in backupset
input datafile fno=00508 name=+DATA/dwrac/datafile/dwdata_1m01.dbf
channel ORA_DISK_1: backup set complete, elapsed time: 00:20:45
Finished backup at 17-FEB-11

正常的话,这一步完了以后,v$database_block_corruption里对应的坏块记录就应该被删除了。

SQL> select * from v$database_block_corruption t where file#=2 and block#=502554;

FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTION_TYPE
---------- ---------- ---------- ------------------ ---------------


重复上面的步骤直至v$database_block_corruption不包括任何数据。

以上只是坏块的处理过程,但是坏块产生的原因仍然不明朗,需进一步挖掘,但是从这些例子也可以看出备份的重要性!

参考文档:
Master Note for Handling Oracle Database Corruption Issues [ID 1088018.1]
How to Format Corrupted Block Not Part of Any Segment [ID 336133.1]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/231499/viewspace-1046126/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/231499/viewspace-1046126/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nor flash是一种非易失性存储器,常常用于嵌入式系统和小型设备中。虽然nor flash具有较高的可靠性,但在长时间使用过程中,仍然可能会出现坏块(Bad Blocks)的情况。 坏块是指nor flash中出现无法正常读写的存储区域。这可能是因为电子元件的老化、磨损、电压波动或其他因素导致的。处理坏块的方法可以分为硬件层面和软件层面。 在硬件处理方面,制造商通常采用了一些技术来检测和处理坏块。其中包括使用校验和或ECC(Error Correction Code)来检测和纠正数据错误,或使用冗余存储器颗粒来替换坏块。这样的处理方式能够保证nor flash的正常使用,但是可能会导致存储容量的损失。 在软件处理方面,系统开发者可以通过在文件系统中实现坏块管理功能来处理坏块。这通常包括使用坏块表(Bad Block Table)来记录坏块的位置,并在写入数据时避开坏块,以免数据丢失。当发现新的坏块时,它们可以被标记,在后续的读写操作中避免使用。 另外,系统开发者还可以通过监测nor flash的擦除和编程操作是否成功来进一步处理坏块。如果连续多次擦除或编程操作失败,那么很可能是由于坏块引起的。在这种情况下,可以尝试使用其他可用的块来替换坏块,从而继续正常使用nor flash。 总之,nor flash的坏块处理需要在硬件和软件层面上进行综合处理。通过制造商的硬件修复技术和系统开发者的软件坏块管理,可以保证nor flash的性能和可靠性,延长其寿命。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值