WEB开发网
开发学院数据库Oracle 处理Oracle数据库中的坏块 阅读

处理Oracle数据库中的坏块

 2007-05-08 12:10:02 来源:WEB开发网   
核心提示: 也可以在数据库级别上设定,在初始化参数中加入 event="10231 trace name context forever, level 10" ,处理Oracle数据库中的坏块(4),然后重启数据库,然后从存在坏块的表中取出不存在坏块的数据,所以如果用裸设备存储的,

也可以在数据库级别上设定,在初始化参数中加入 event="10231 trace name context forever, level 10" ,然后重启数据库。

然后从存在坏块的表中取出不存在坏块的数据,执行以下的语句CREATE TABLE salvage_emp AS SELECT * FROM corrupt_table;

最后rename生成的corrupt_table为原来表的名字,并重建表上的索引和限制。

使用dbms_repair包进行恢复

使用dbms_repair标记有坏块的表,在做全表扫描的时候跳过坏块,执行以下的语句Execute DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('','');

然后使用exp工具或者createtable as select的方法取出没有坏块数据,然后重建表,表上的索引和限制。

五 坏块的预先发现的方法

1. 如果要检测数据库中所有的表,可以利用exp工具导出整个数据库可以检测坏块。不过这个工具有一些缺陷,对以下情况的坏块是检测不出来的:

HWM以上的坏块是不会发现的;索引中存在的坏块是不会发现的;数据字典中的坏块是不会发现的

2. 如果只是对数据库中比较重要的表进行坏块检查,可以使用ANALYZE TABLE tablename VALIDATE STRUCTURE CASCADE 的方法来检测坏块,它执行坏块的检查,但是不会标记坏块为corrupt,检测的结果保存在USER_DUMP_DEST目录下的用户trace文件中。

3. 使用Oracle的专门工具dbv来检查坏块,具体的语法如下:

关键字 说明 (默认)

----------------------------------------------------

FILE 要验证的文件 (无)

START 起始块 (文件的第一个块)

END 结束块 (文件的最后一个块)

BLOCKSIZE 逻辑块大小 (2048)

LOGFILE 输出日志 (无)

FEEDBACK 显示进度 (0)

PARFILE 参数文件 (无)

USERID 用户名/口令 (无)

SEGMENT_ID 段 ID (tsn.relfile.block) (无)

例如:

Dbv file=system01.dbf blocksize=8192

DBVERIFY Release 9.2.0.5.0 - Production on 星期六 11月 27 15 29 13 2004

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

DBVERIFY - 验证正在开始 FILE = system01.dbf

DBVERIFY - 验证完成

检查的页总数 32000

处理的页总数(数据) 13261

失败的页总数(数据) 0

处理的页总数(索引) 2184

失败的页总数(索引) 0

处理的页总数(其它) 1369

处理的总页数 (段) 0

失败的总页数 (段) 0

空的页总数 15186

标记为损坏的总页数 0

汇入的页总数 0

注:因为dbv要求file后面跟的必须是一个文件扩展名,所以如果用裸设备存储的,就必须使用ln链接裸设备到一个文件,然后再用dbv对这个链接文件进行检查。

上一页  1 2 3 4 

Tags:处理 Oracle 数据库

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接