ORA-01578(数据块损坏) 转
2013-05-18 16:33
423 查看
当Oracle数据库出现坏块时,Oracle会在警告日志文件(alert_SID.log)中记录坏块的信息:
ORA-01578: ORACLE data block corrupted (file # 7, block # <BLOCK>;)
ORA-01110: data file <AFN>;: '/oracle1/oradata/V920/oradata/V816/users01.dbf'
其中,<AFN>代表坏块所在数据文件的绝对文件号,<BLOCK>;代表坏块是数据文件上的第几个数据块
出现这种情况时,应该首先检查是否是硬件及操作系统上的故障导致Oracle数据库出现坏块。在排除了数据库以外的原因后,再对发生坏块的数据库对象进行处理。
1.确定发生坏块的数据库对象
SELECT tablespace_name,
segment_type,
owner,
segment_name
FROM dba_extents
WHERE file_id = <AFN>;
AND <BLOCK>; between block_id AND block_id+blocks-1;
2.决定修复方法
如果发生坏块的对象是一个索引,那么可以直接把索引DROP掉后,再根据表里的记录进行重建;
如果发生坏块的表的记录可以根据其它表的记录生成的话,那么可以直接把这个表DROP掉后重建;
如果有数据库的备份,则恢复数据库的方法来进行修复;
如果表里的记录没有其它办法恢复,那么坏块上的记录就丢失了,只能把表中其它数据坏上的记录取出来,然后对这个表进行重建。
3.用Oracle提供的DBMS_REPAIR包标记出坏块
exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('<schema>;','<tablename>;'); 要在sys下命令执行
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.如果表上存在索引,则要重建表上的索引
今天表数据块损坏,到第4部的时候一直报“ORA-00900:无效SQL语句”,后来老大说要在sys下命令执行。
PS:备份是好习惯。。。
ORA-01578: ORACLE data block corrupted (file # 7, block # <BLOCK>;)
ORA-01110: data file <AFN>;: '/oracle1/oradata/V920/oradata/V816/users01.dbf'
其中,<AFN>代表坏块所在数据文件的绝对文件号,<BLOCK>;代表坏块是数据文件上的第几个数据块
出现这种情况时,应该首先检查是否是硬件及操作系统上的故障导致Oracle数据库出现坏块。在排除了数据库以外的原因后,再对发生坏块的数据库对象进行处理。
1.确定发生坏块的数据库对象
SELECT tablespace_name,
segment_type,
owner,
segment_name
FROM dba_extents
WHERE file_id = <AFN>;
AND <BLOCK>; between block_id AND block_id+blocks-1;
2.决定修复方法
如果发生坏块的对象是一个索引,那么可以直接把索引DROP掉后,再根据表里的记录进行重建;
如果发生坏块的表的记录可以根据其它表的记录生成的话,那么可以直接把这个表DROP掉后重建;
如果有数据库的备份,则恢复数据库的方法来进行修复;
如果表里的记录没有其它办法恢复,那么坏块上的记录就丢失了,只能把表中其它数据坏上的记录取出来,然后对这个表进行重建。
3.用Oracle提供的DBMS_REPAIR包标记出坏块
exec DBMS_REPAIR.SKIP_CORRUPT_BLOCKS('<schema>;','<tablename>;'); 要在sys下命令执行
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.如果表上存在索引,则要重建表上的索引
今天表数据块损坏,到第4部的时候一直报“ORA-00900:无效SQL语句”,后来老大说要在sys下命令执行。
PS:备份是好习惯。。。
相关文章推荐
- ORA-01578,ORA-01115,ORA-01110 ORACLE 数据块损坏
- 数据块损坏后修复 ora-01578
- ORA-01578: ORACLE 数据块损坏 一种解决方案 (转)
- UNDO 表空间数据块损坏 ORA-01578 & ORA-01110
- UNDO 表空间数据块损坏 ORA-01578 & ORA-01110
- ORA-01578(数据块损坏) 错误解决方法
- ORA-01578: ORACLE 数据块损坏 之奇妙处理 DBV
- java.sql.SQLException: ORA-01578: ORACLE 数据块损坏问题解决办法
- ORA-01578: ORACLE 数据块损坏 (文件号 46, 块号 1101348)
- ORA-01578: ORACLE 数据块损坏
- java.sql.SQLException: ORA-01578: ORACLE 数据块损坏问题解决办法
- ORA-01578(数据块损坏)错误解决方法
- ORA-01578 data block corrupted 数据文件损坏 与 修复 (多为借鉴 linux)
- ORA-01578 数据库块损坏 恢复过程
- [原]Oracle数据文件损坏的模拟和修复(一) |ORA-01578 data block corrupted|
- 解决数据库实例启动ORA-00205或控制文件损坏错误
- ORA-01578: ORACLE data block corrupted (file # 9, block # 45729)
- 数据库:数据库中的坏块ORA-01115,ORA-02072,ORA-01578
- 总结Oracle8i 的UNDO表空间损坏(ORA-01092及ORA-00600【4193】)情况下的数据库不完全恢复的经历
- oracle数据块损坏后的修复方法