日期:2014-05-16  浏览次数:20482 次

ORA-01578: ORACLE 数据块损坏 一种解决方案 (转)

os: winxp
db: 10g r2
?
错误提示:
?
ORA-01578: ORACLE 数据块损坏 (文件号 6, 块号 20)
ORA-01110: 数据文件 6: 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\MOVO\BLOCK.DBF'
?
?
数据块的损坏与恢复
数据库的恢复有时是件很复杂的事情,轻率的操作和尝试可能导致数据库的永久损坏
?
所以在操作前 一定要做好备份,对于重要的数据,如果自己不能确定恢复步骤
?
和后果的话,可以先向专业人士咨询,以免造成损失
?
?
这里是做模拟数据块的损坏和恢复
?
?
?
1.插入数据
?
C:\Documents and Settings\Administrator>sqlplus / as sysdba
?
SQL*Plus: Release 10.2.0.1.0 - Production on 星期四 6月 12 17:38:46 2008
?
Copyright (c) 1982, 2005, Oracle.?All rights reserved.
?
?
连接到:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
?
SQL> select?name from v$datafile;
?
NAME
------------------------------------------
?
F:\ORACLE\PRODUCT\10.2.0\ORADATA\MOVO\SYSTEM01.DBF
F:\ORACLE\PRODUCT\10.2.0\ORADATA\MOVO\UNDOTBS04.DBF
F:\ORACLE\PRODUCT\10.2.0\ORADATA\MOVO\SYSAUX01.DBF
F:\ORACLE\PRODUCT\10.2.0\ORADATA\MOVO\USERS01.DBF
F:\ORACLE\PRODUCT\10.2.0\ORADATA\MOVO\EXAMPLE01.DBF
F:\ORACLE\PRODUCT\10.2.0\ORADATA\MOVO\BLOCK.DBF
?
已选择6行。
?
SQL>?drop tablespace block including?contents and datafiles;
?
表空间已删除。
?
SQL> create tablespace block
?2?datafile 'F:\ORACLE\PRODUCT\10.2.0\ORADATA\MOVO\block.dbf' size 1m
?3?extent management local;
?
表空间已创建。
?
?
?
SQL> alter user skate default tablespace block;
?
用户已更改。
?
SQL> alter user skate quota unlimited on block;
?
用户已更改。
?
SQL> conn skate/skate
已连接。
SQL> create table t as select * from dba_users;
?
表已创建。
?
SQL> insert into t select?* from t;
?
已创建28行。
?
SQL> insert into t select?* from t;
?
已创建56行。
?
SQL> insert into t select?* from t;
?
已创建112行。
?
SQL> insert into t select?* from t;
?
已创建224行。
?
SQL> insert into t select?* from t;
?
已创建448行。
?
SQL> insert into t select?* from t;
?
已创建896行。
?
SQL> insert into t select?* from t;
?
已创建1792行。
?
SQL> insert into t select?* from t;
?
已创建3584行。
?
SQL> insert into t select?* from t;
insert into t select?* from t
*
第 1 行出现错误:
ORA-01653: 表 SKATE.T 无法通过 8 (在表空间 BLOCK 中) 扩展
?
SQL> commit;
?
提交完成。
?
SQL> alter system checkpoint;
?
系统已更改。
?
SQL> select count(*) from t;
?
?COUNT(*)
----------
????? 7168
?
SQL>
?
SQL> conn /as sysdba
已连接。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL>
?
?
2.模拟损坏数据文件
?
关闭数据库后用Ultredit编辑数据文件,随便更改几个字符.然后启动数据库
?
?
SQL> startu