Oracle数据块损坏恢复总结

简介: Oracle数据块损坏恢复总结 在恢复前使用DBV命令检查数据文件是否存在坏块 dbv file=d:\oracle\oradata\mydb\RONLY.DBF blocksize=8192 查看数据坏块所在数据文件号及块号可以对表进行一次全表扫描,如: select count(*) from tablename; 1、    没有备份的情况下: 1.
Oracle数据块损坏恢复总结
在恢复前使用DBV命令检查数据文件是否存在坏块
dbv file=d:\oracle\oradata\mydb\RONLY.DBF blocksize=8192
查看数据坏块所在数据文件号及块号可以对表进行一次全表扫描,如:
select count(*) from tablename;
1、    没有备份的情况下:

1.1、使用exp/imp恢复
  在这种情况下肯定会造成数据的丢失,在这种情况下应采取将数据导出然后重建表再进行导入的方法,来尽量恢复损坏数据块中的数据,但是在有坏块的情况下是不允许导出的,如下命令:
  Exp test/test file=t.dmp tables=t;
  导出命令在执行中会报ORA-01578错误,在这错误提示中会提示那个文件号的文件以及这个文件中的哪个块被损坏,如:ORA—01578:ORACLE 数据块损坏(文件号 4,块号 35)
  针对以上的提示首先查询那些对象被损坏:
  Select tablespace_name,segment_type,owner,segment_name From dba_extents Where file_id=4 and 35 between block_id and block_id+blocks-1;
如果被损坏的块是索引,通常可以通过索引重建来解决,如果损坏的是数据(segment_type为table),那么通过设置如下内部事件使得Exp操作跳过坏块。
Alter session set events=’10231 trace name context forever,level 10’;
然后重新执行导出命令,导出相关的表,然后执行Drop Table命令删除相关表,之后重建表最后导入数据。

1.2、使用DBMS_REPAIR恢复
用DBMS_REPAIR当然也会丢失数据。这里不做详细的介绍,有兴趣的可以查看oracle的在线文档

2、使用Rman进行恢复:
  首先要存在Rman的最新备份集,然后执行如下命令:
RMAN>backup validate datafile 4;检查4号数据文件是否存在坏块
执行查询:select * from v$database_block_corruption where file#=4;
如果4号文件存在坏块的话,那么将在结果集中有所显示,会显示损坏的块号,根据显示结果执行如下命令进行恢复:
RMAN>blockrecover datafile 4 block 35 from backupset;
该命令执行后即可恢复坏块,并且不会造成数据丢失,但是要求数据库必须要运行在归档模式下,否则RMAN无法发挥作用,而且通过RMAN做过最新的数据库备份


3、使用bbed恢复
使用bbed恢复时必须有数据文件的拷贝。
bbed就是英文block browse edit的缩写,用来直接查看和修改数据文件数据的一个工具。
在windows和linux上面都有

但在linux下需要编译:
然后把$ORACLE_HOME/rdbms/lib加到环境变量的PATH里面,就可以直接在命令中bbed了。

BBED的缺省口令为blockedit, For Oracle Internal Use only 请谨慎使用Oracle不做技术支持。
[oracle@test oracle]$ cd $ORACLE_HOME/rdbms/lib
[oracle@test lib]$ make -f ins_rdbms.mk $ORACLE_HOME/rdbms/lib/bbed
进入bbed后,可以使用help查看帮助
BBED> help
bbed的详细用法这里不做具体介绍。
详细用法可以参考:
http://www.sosdb.com/jdul/dispbbs.asp?boardID=1&ID=237
目录
相关文章
|
2月前
|
Oracle 关系型数据库 数据库
Oracle数据恢复—Oracle数据库文件有坏快损坏的数据恢复案例
一台Oracle数据库打开报错,报错信息: “system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。管理员联系我们数据恢复中心寻求帮助,并提供了Oracle_Home目录的所有文件。用户方要求恢复zxfg用户下的数据。 由于数据库没有备份,无法通过备份去恢复数据库。
|
3月前
|
Oracle 关系型数据库 数据库
oracle数据恢复—Oracle数据库文件损坏导致数据库打不开的数据恢复案例
打开oracle数据库时报错,报错信息:“system01.dbf需要更多的恢复来保持一致性,数据库无法打开”。急需恢复zxfg用户下的数据。 出现上述报错的原因有:控制文件损坏、数据文件损坏、数据文件与控制文件的SCN不一致等。数据恢复工程师对数据库文件做进一步检测分析后发现sysaux01.dbf文件有坏块。修复sysaux01.dbf文件,启动数据库依然有许多查询报错。export和data pump工具无法使用,查询告警日志并分析报错,确认发生上述错误的原因就是sysaux01.dbf文件损坏。由于该文件损坏,从数据库层面无法修复数据库。由于system和用户表空间的数据文件是正常的,
|
存储 SQL 运维
Oracle--活跃回滚段损坏故障恢复
当前数据库由活跃事务时活跃回滚段损坏无备份时处理过程。
305 0
|
Oracle 关系型数据库 数据库
oracle学习36-rman备份-控制文件丢失恢复
oracle学习36-rman备份-控制文件丢失恢复
251 0
oracle学习36-rman备份-控制文件丢失恢复
|
Oracle 关系型数据库 数据库
oracle学习38-rman备份-全库恢复
oracle学习38-rman备份-全库恢复
181 0
oracle学习38-rman备份-全库恢复
|
Oracle 关系型数据库 数据库
oracle学习35-rman备份-参数文件spfile损坏恢复
oracle学习35-rman备份-参数文件spfile损坏恢复
136 0
|
Oracle 关系型数据库 数据库
Oracle ---实例恢复
从Oracle数据库告警日志来看Oracle 的实例恢复
189 0
|
SQL 存储 Oracle
Oracle--运行过程中当前redo日志文件损坏会发生什么
模拟Oracle运行过程(有事务未提交时)当前redo日志文件损坏是数据库的状态
412 0
|
存储 Oracle 关系型数据库
【体系结构】Oracle数据块详解
Oracle数据块详解 操作系统块是操作系统读写的最小操作单元,也是操作系统文件的属性之一。当创建一个Oracle数据库时,选择一个基于操作系统块的整数倍大小作为Oracle数据库块的大小。
2458 0

推荐镜像

更多