网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > 数据库 > Oracle教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
数据库:数据库教程,数据库技巧,Oracle教程,MySQL教程,Sybase教程,Access教程,DB2教程,数据库安全,数据库文摘
本月文章推荐
.Oracle数据库exp imp按用户导出导.
.如何增加Oracle连接数.
.DBA 应遵循的 Oracle 调优原则.
.oracle中实现主键的自动增加.
.Linux下用PHP4连接ORACLE8I的方法.
.Oracle处理多媒体信息的原理及展.
.关系型数据库:定义数据库表格之.
.Oracle 数据库 10g:数据库技术的.
.查找 Oracle 用户锁的DLL SQL.
.Oracle数据库数据锁定机制全面解.
.Oracle RAC中Srvctl命令详细说明.
.linux日志管理(三).
.ORACLE中的ROWID.
.轻轻松松产生 Makefile.
.rem --创建回滚段.
.Oracle中使用SQL MODEL定义行间计.
.Windows服务:方便地启动Oracle服.
.oracle 10G 安装 for Linux86.
.Oracle DBMS_JOB:每隔特定时间执.
.Oracle弱智900问十.

表中出现block错误的恢复方法及具体步骤

发表日期:2008-6-19


block corrupt 的log

Current log# 12 seq# 47247 mem# 0: /data2/obs5_db/obs5_log/obs5_redo_12.log

***

Corrupt block relative dba: 0x0f457f48 file=61. blocknum=360264.

Fractured block found during buffer read

Data in bad block - type:6. format:2. rdba:0x0f457f48

解决方法

用Oracle的工具包

首先需要用dbms_repair.check_object先检查一下,然后再用dbms_repair.fix_corrupt_blocks修复,如果修复不了,你可以用dbms_repair.skip_corrupt_blocks

具体过程的说明:

DBMS_REPAIR.CHECK_OBJECT (

schema_name IN VARCHAR2,

object_name IN VARCHAR2,

partition_name IN VARCHAR2 DEFAULT NULL,

object_type IN BINARY_INTEGER DEFAULT TABLE_OBJECT,

repair_table_name IN VARCHAR2 DEFAULT ’REPAIR_TABLE’,

flags IN BINARY_INTEGER DEFAULT NULL,

relative_fno IN BINARY_INTEGER DEFAULT NULL,

block_start IN BINARY_INTEGER DEFAULT NULL,

block_end IN BINARY_INTEGER DEFAULT NULL,

corrupt_count OUT BINARY_INTEGER);

DBMS_REPAIR.FIX_CORRUPT_BLOCKS (

schema_name IN VARCHAR2,

object_name IN VARCHAR2,

partition_name IN VARCHAR2 DEFAULT NULL,

object_type IN BINARY_INTEGER DEFAULT TABLE_OBJECT,

repair_table_name IN VARCHAR2 DEFAULT ’REPAIR_TABLE’,

flags IN BINARY_INTEGER DEFAULT NULL,

fix_count OUT BINARY_INTEGER);

DBMS_REPAIR.SKIP_CORRUPT_BLOCKS (

schema_name IN VARCHAR2,

object_name IN VARCHAR2,

object_type IN BINARY_INTEGER DEFAULT TABLE_OBJECT,

flags IN BINARY_INTEGER DEFAULT SKIP_FLAG);

dbv

你也可以用dbv工具看一下你现在其他的数据文件有没有还有坏块的

dbv file='yourfilename'

具体的恢复方法

在Oracle数据库出现坏块时,Oracle会在警告日志文件(alert_SID.log)中记录坏块的信息:

ORA-01578: ORACLE data block corrupted (file # 7, block # )

ORA-01110: data file : '/oracle1/oradata/V920/oradata/V816/users01.dbf'

请注意:<AFN>代表坏块所在数据文件的绝对文件号,代表坏块是数据文件上的第几个数据块,出现这种情况时,应该首先检查是否是硬件及操作系统上的故障导致Oracle数据库出现坏块。在排除了数据库以外的原因后,再对发生坏块的数据库对象进行处理。

1.确定发生坏块的数据库对象

SELECT tablespace_name,

segment_type,

owner,

segment_name

FROM dba_extents

WHERE file_id =

AND between block_id AND block_id+blocks-1;

(2)决定修复方法

假如发生坏块的对象是一个索引,那么可以直接把索引DROP掉后,再根据表里的记录进行重建;

假如发生坏块的表的记录可以根据其它表的记录生成的话,那么可以直接把这个表DROP掉后重建;

假如有数据库的备份,则恢复数据库的方法来进行修复;

假如表里的记录没有其它办法恢复,那么坏块上的记录就丢失了,只能把表中其它数据坏上的记录取出来,然后对这个表进行重建。

(3)用Oracle提供的DBMS_REPAIR包标记出坏块

exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('','');

(4)使用Create table as select命令将表中其它块上的记录保存到另一张表上

create table corrupt_table_bak

as

select * from corrupt_table;

(5)用DROP TABLE命令删除有坏块的表

drop table corrupt_table;

(6)用alter table rename命令恢复原来的表

alter table corrupt_table_bak

rename to corrupt_table;

(7)假如表上存在索引,则要重建表上的索引。

上一篇:Oracle的三种备份方式具有不同的恢复特性 人气:721
下一篇:执行全文索引时出现权限不足的解决方法 人气:938
浏览全部Oracle的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐