我是靠谱客的博主 听话台灯,最近开发中收集的这篇文章主要介绍oracle 数据库 有坏快,ORACLE数据库坏块的处理 (处理无对象坏快的方法),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

数据库坏块的情况有很多,这里主要介绍如何处理不属于任何数据对象的数据文件坏块情况。

有两种解决办法

方法1:可以将发生坏块的数据文件,其所属表空间里的所有数据对象移动到别的表空间。然后将现有的数据文件删除并重建。该方法的缺点是很明显的,对7*24小时运行系统的正常业务处理有很大影响。

方法2:参考资料Metalink: Note#336133.1 How to Format Corrupted Block Not Part of Any Segment

详细的处理细节如下:

1,首先确认数据库告警日志里的报错信息如下:

Corrupt block relative dba: 0×0ccf26df (file 51, block 992991)

Fractured block found during backing up datafile

Data in bad block -

type: 6 format: 2 rdba: 0×0ccf26df

last change scn: 0×0428.1d038e69 seq: 0×1 flg: 0×04

consistency value in tail: 0xa2560601

check value in block header: 0×7170, computed block checksum: 0×2c3f

spare1: 0×0, spare2: 0×0, spare3: 0×0

***

Reread of blocknum=992991, file=/dev/rd03lv32_03. found same corrupt data

找出坏块的位置是51号文件的第992991个数据块。

2.利用dba_extents视图确认该坏块属于的数据对象:

SQL> select * from dba_extents where file_id=51 and &block between block_id and block_id+blocks;

Enter value for block: 992991

old 1: select * from dba_extents where file_id=51 and &block between block_id and block_id+blocks

new 1: select * from dba_extents where file_id=51 and 992991 between block_id and block_id+blocks

no rows selected

该坏块不属于任何的数据对象。

3.检查该数据文件的可用空间

SQL> select tablespace_name,file_id,sum(bytes/1024/1024) Mb from dba_free_space

2 where file_id=51 group by tablespace_name,file_id;

TABLESPACE_NAME FILE_ID MB

————————– ———- ———-

DATA100 51 1560

坏块的表空间上创建一张临时表,并做如下处理:

创建一张表:

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

并手工分配给该表以发生坏块的数据文件的全部可用空间:

alter table s allocate extent (DATAFILE ‘/dev/rd03lv32_03′ SIZE 1560M);

此处1560Mb就是前文中检查的51号文件的所有可用空间。

向该表中插入100行数据:

BEGIN

FOR i IN 1..100 LOOP

INSERT INTO s VALUES(i,’x');

END LOOP;

END;

/

然后对其进行循环插入,直到前文中所述的坏块被使用。

BEGIN

FOR i IN 1..1000000000 LOOP

INSERT INTO s select * from s;

END LOOP;

END;

/

再次确认无数据坏块:

再次使用dbv检查该数据文件,确认无坏块。

dbv file=’/dev/rd03lv32_03′ blocksize=8192

删除操作中创建的表:

DROP TABLE s;

处理完毕。

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

最后

以上就是听话台灯为你收集整理的oracle 数据库 有坏快,ORACLE数据库坏块的处理 (处理无对象坏快的方法)的全部内容,希望文章能够帮你解决oracle 数据库 有坏快,ORACLE数据库坏块的处理 (处理无对象坏快的方法)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(43)

评论列表共有 0 条评论

立即
投稿
返回
顶部