Chinaunix

标题: 我的一点疑问! [打印本页]

作者: mynamezz    时间: 2007-04-21 01:55
标题: 我的一点疑问!
我想问一下,如果我的数据库出错信息为ORA_01578:ORACLE DATA BLOCK CORRUPTED ......(以下省略) ora-01110:data file 17......(以下省略) 看字面意思是说某个数据库文件的某个表出现了问题
我的数据库是否是问题很严重了,主要是在运行某个程序才报错,平常使用都没有问题,因为我都不会修复,我的数据库有日志文件,还有个完整的好的备份数据库,但是时间很长了,是否可以通过日志文件加上旧数据库就可以修复错误;或是通过日志文件加上该数据库的完好的旧数据库文件,指的是只需要该损坏文件的旧的完好的文件,其他都是当前最新的文件也可以修复?也或是可以有什么最快捷的方法可以修复数据库!
   我的数据库在这种状态下已经跑了N天了,我的系统商水平太差了,搞不定留下这个问题,我怕那一天数据库完全损坏就完了!
作者: mynamezz    时间: 2007-04-21 19:26
自己顶一个,希望有人来
作者: Cnhacker    时间: 2007-04-22 03:01
ORA-01578   ORACLE   data   block   corrupted   (file   #   string,   block   #   string)   
   
    Cause:   The   data   block   indicated   was   corrupted,   probably   due   to   program   errors.   
   
  Action:   Determine   which   object   was   corrupted   using   a   command   like   the   following:   SELECT   SEGMENT_TYPE,OWNER||'.'||SEGMENT_NAME   FROM   DBA_EXTENTSWHERE   file   =   FILE_ID   AND   block   BETWEEN   BLOCK_ID   AND   BLOCK_ID+BLOCKS   -1;where   values   for   file   and   block   are   from   the   message.   Try   to   restore   the   segment   containing   the   block   indicated.   This   may   involve   dropping   the   segment   and   re-creating   it.   If   there   is   a   trace   file,   report   the   errors   in   it   to   Oracle   Customer   Support.   

以上是相关的错误相关帮助信息!
建议找到相对应的表,然后重建表!
作者: numenhuang    时间: 2007-04-22 12:47
原帖由 mynamezz 于 2007-4-21 01:55 发表
我想问一下,如果我的数据库出错信息为ORA_01578:ORACLE DATA BLOCK CORRUPTED ......(以下省略) ora-01110:data file 17......(以下省略) 看字面意思是说某个数据库文件的某个表出现了问题
我的数据库是否是问题 ...


产生ORA-01578错误的原因有很多,可能是硬盘有坏块,或者可能由于其他原因造成的,这个需要进行近一步的诊断才能确定由什么造成的。解决ORA-01578的错误,可以尝试:
1. 首先根据alert_sid.log中的错误信息确定file#和Block#
2. 根据获得file#,block#,执行SQL:
    比如file#=17,block#=20,则
    SELECT   SEGMENT_TYPE,OWNER||'.'||SEGMENT_NAME   
       FROM   DBA_EXTENTS
    WHERE   FILE_ID = 17
         AND   20   BETWEEN   BLOCK_ID   AND   BLOCK_ID+BLOCKS-1;
    根据结果来确定该block是属于table还是index。

3. 如果block属于index,则drop原来索引,重建即可
4. 如果block属于table,则可以:
    alter system set events='10231 trace name context forever,level 10'
   
    然后exp 该表,如果可以成功export出来,再将原表drop,重新imp进来。
    或者通过CTAS方式创建一张临时表。例如:
    CREATE TABLE test_tmp AS SELECT * FROM test
    然后进行其他操作。
5. 最好确定是不是由于磁盘介质的损坏造成该错误。
作者: mynamezz    时间: 2007-04-22 14:00
原帖由 numenhuang 于 2007-4-22 12:47 发表


产生ORA-01578错误的原因有很多,可能是硬盘有坏块,或者可能由于其他原因造成的,这个需要进行近一步的诊断才能确定由什么造成的。解决ORA-01578的错误,可以尝试:
1. 首先根据alert_sid.log中的错误信息 ...


这个是我查看的结果:
ORA-01578: ORACLE data block corrupted (file # 17, block # 122670)
ORA-01110: data file 17: 'D:\ORACLE\ORADATA\ORA816\APPHARMACY.DBF'


owner          segment_name         partition_name   segment_type
PHARMACY   DRUG_STOCK_DATE                               INDEX   

tablespace_name  extent_id    file_id     block_id      bytes           blocks     relative_fno
TSP_PHARMACY     20               17          120251       99426304    12137    17

从得出来的信息看应该是索引坏了吧,按照你的解决方法是重建索引,是否就是在该表(TSP_PHARMACY)插入一行和上面一样的数据然后删除有问题的就可以了

[ 本帖最后由 mynamezz 于 2007-4-22 14:05 编辑 ]
作者: numenhuang    时间: 2007-04-22 21:36
原帖由 mynamezz 于 2007-4-22 14:00 发表


这个是我查看的结果:
ORA-01578: ORACLE data block corrupted (file # 17, block # 122670)
ORA-01110: data file 17: 'D:\ORACLE\ORADATA\ORA816\APPHARMACY.DBF'


owner          segment_name     ...


drop index--->recreate index




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2