免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1887 | 回复: 5
打印 上一主题 下一主题

我的一点疑问! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-04-21 01:55 |只看该作者 |倒序浏览
我想问一下,如果我的数据库出错信息为ORA_01578:ORACLE DATA BLOCK CORRUPTED ......(以下省略) ora-01110:data file 17......(以下省略) 看字面意思是说某个数据库文件的某个表出现了问题
我的数据库是否是问题很严重了,主要是在运行某个程序才报错,平常使用都没有问题,因为我都不会修复,我的数据库有日志文件,还有个完整的好的备份数据库,但是时间很长了,是否可以通过日志文件加上旧数据库就可以修复错误;或是通过日志文件加上该数据库的完好的旧数据库文件,指的是只需要该损坏文件的旧的完好的文件,其他都是当前最新的文件也可以修复?也或是可以有什么最快捷的方法可以修复数据库!
   我的数据库在这种状态下已经跑了N天了,我的系统商水平太差了,搞不定留下这个问题,我怕那一天数据库完全损坏就完了!

论坛徽章:
0
2 [报告]
发表于 2007-04-21 19:26 |只看该作者
自己顶一个,希望有人来

论坛徽章:
0
3 [报告]
发表于 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.   

以上是相关的错误相关帮助信息!
建议找到相对应的表,然后重建表!

论坛徽章:
0
4 [报告]
发表于 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. 最好确定是不是由于磁盘介质的损坏造成该错误。

论坛徽章:
0
5 [报告]
发表于 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 编辑 ]

论坛徽章:
0
6 [报告]
发表于 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
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP