数据块有坏块时,不能访问坏块上的数据,如果没有备份,那么,坏块上的数据就会丢失掉。
>>>>>>
SQL> select count(*) from t1;
COUNT(*)
----------
238
已用时间: 00: 00: 00.00
>>>>>>>Table T1总共有238行数据
>>>以dba身份登陆数据库
SQL> conn / as sysdba
已连接。
>>>关闭数据库
SQL> shutdown immediate
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
>>>用UltraEdit编辑数据文件TS_TEST01.DBF,随便改几个地方然后保存,模拟数据块坏掉
>>>启动数据库
SQL> startup
ORACLE 例程已经启动。
Total System Global Area 135338868 bytes
Fixed Size 453492 bytes
Variable Size 109051904 bytes
Database Buffers 25165824 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
数据库已经打开。
SQL> conn scott/tiger
已连接。
>>>查询数据的时候报错
SQL> select count(*) from t1;
select count(*) from t1
*
ERROR 位于第 1 行:
ORA-01578: ORACLE 数据块损坏(文件号28,块号20)
ORA-01110: 数据文件 28: 'E:ORACLEORADATAORABD02TS_TEST01.DBF'
已用时间: 00: 00: 00.01
SQL> conn / as sysdba
已连接。
SQL> SELECT tablespace_name, segment_type, owner, segment_name
2 FROM dba_extents
3 WHERE file_id =28
4 and 20 between block_id AND block_id + blocks - 1
5 /
TABLESPACE_NAME SEGMENT_TYPE OWNER SEGMENT_NAME
--------------- --------------- ---------- ---------------------------------------------
TS_TEST01 TABLE SCOTT T1
>>>这时候的数据表示不可以被exp出来的:
C:Documents and SettingsAdministrator>exp scott/tiger file=c: .dmp tables=t1
Export: Release 9.2.0.1.0 - Production on 星期六 11月 27 12:07:19 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集
服务器使用 AL32UTF8 字符集 (可能的字符集转换)
即将导出指定的表通过常规路径 ...
. . 正在导出表 T1
EXP-00056: 遇到 ORACLE 错误 1578
ORA-01578: ORACLE 数据块损坏(文件号28,块号20)
ORA-01110: 数据文件 28: 'E:ORACLEORADATAORABD02TS_TEST01.DBF'
导出成功终止,但出现警告。
C:Documents and SettingsAdministrator>
>>>这时可以通过设置内部事件,使exp跳过这些损坏的block
SQL> ALTER SYSTEM SET EVENTS='10231 trace name context forever,level 10' ;
系统已更改。
已用时间: 00: 00: 00.00
SQL> host
>>>exp 出数据
SQL>
SQL> conn scott/tiger
已连接。
>>> drop掉旧的Table
SQL> drop table t1;
表已丢弃。
已用时间: 00: 00: 01.03
SQL> host
>>>imp 数据
SQL> conn scott/tiger
已连接。
>>>查询数据,可以看到有损失了54行数据
SQL> select count(*) from t1;
COUNT(*)
----------
184
已用时间: 00: 00: 00.00
SQL>
标签: