Archive for 9月, 2006
一. 什么是数据库的坏块
首先我们来大概看一下数据库块的格式和结构:
数据库的数据块有固定的格式和结构,分三层:
Cache layer
Transaction layer
Data layer
在我们对数据块进行读取写入操作的时候,数据库会对要读写的数据块做一致性的检查,其中包括:数据块的类型、数据块的地址信息、数据块的SCN号以及数据块的头部和尾部。如果发现其中有不一致的信息,那数据库就会标记这个数据块为坏块了。数据库的坏块分为两种:逻辑坏块和物理坏块
逻辑坏块(Logically Corrupt):example: the block was corrupted by an oracle internal error but does not appear to be media corrupt
物理坏块(Media Corrupt):incorrect checksum/wrong data block address/impossible block type
一客户在查询数据时报如下错误:
SQL> select count(*) from sa.g_sn_travel;
select count(*) from sa.g_sn_travel
*
ERROR 位于第 1 行:
ORA-08103: object no longer exists
用analyze分析该表,出现如下提示:
SQL> analyze table sa.g_sn_travel validate structure cascade;
analyze table sa.g_sn_travel validate structure cascade
*
ERROR 位于第 1 行:
ORA-01499: table/index cross reference failure - see trace file
查看对应的trace file发现该表的索引和表的数据出现不一致,于是重新创建该Index解决问题。