ORA-00604: 递归 SQL 级别 2 出现错误
ORA-01578: ORACLE 数据块损坏 (文件号 1, 块号 320539)
ORA-01110: 数据文件 1: '/oracle/oracle10g/oradata/sryx/system01.dbf'-- Create table
create table aat
(
  a varchar2(12)
)
storage
  (
    initial 64K
    minextents 1
    maxextents unlimited
  )
创建任意一张表的时候出现上述错误提示,是表空间损坏还是硬盘出现坏道?如何决绝?非常感谢!

解决方案 »

  1.   

    简单办法就是把这个块屏蔽掉. 不让系统访问.然后把数据库备份一下.如果你能够复制'/oracle/oracle10g/oradata/sryx/system01.dbf'文件,说明表空间错误.
      

  2.   

    rman dbv检测下数据文件是否损坏
      

  3.   

    dbv先试试,其实如果有备份的话这个问题不是问题
      

  4.   

    [oracle@localhost6 ~]$ dbv file='/oracle/oracle10g/oradata/sryx/sysaux01.dbf' blocksize=8192
     
    DBVERIFY: Release 10.2.0.1.0 - Production on Wed Jun 20 11:38:33 2012Copyright (c) 1982, 2005, Oracle.  All rights reserved.DBVERIFY - Verification starting : FILE = /oracle/oracle10g/oradata/sryx/sysaux01.dbfDBV-00200: Block, dba 12614201, already ed corruptedDBV-00200: Block, dba 12614205, already ed corruptedDBV-00200: Block, dba 12614206, already ed corruptedDBV-00200: Block, dba 12623232, already ed corruptedDBV-00102: File I/O error on FILE (/oracle/oracle10g/oradata/sryx/sysaux01.dbf) during verification read operation (-2)
    报错,何解?多谢!!
      

  5.   

    能打开数据库,能对数据进行select、update、insert、delete操作,但是新建表后,再对表进行修改就会报错。以删除表为例:
    首先创建一张表“table1”,没有任何问题。但是drop table1的时候,出现下列错误:
    ORA-00604: 递归 SQL 级别 1 出现错误
    ORA-00376: 此时无法读取文件 3
    ORA-01110: 数据文件 3: '/oracle/oracle10g/oradata/sryx/sysaux01.dbf'
    ORA-06512: 在 line 19点击确定关闭,再drop时提示:
    ORA-00942: 表或视图不存在此时select * from table1,提示ORA-00942: 表或视图不存在,任何操作(select、insert)都不行了。但用plsql右键——edit,还是能看到表结构的
      

  6.   

    support倒是有篇帖子,只是有点长.
    如果是归档模式
    可以先recover一下
    rman窗口下blockrecover datafile 3 block 12614201,12614205,12614206,12623232;
      

  7.   

    -- 不会吧?system表空间有坏块啊?是生产库的话,这下麻烦了!-- 方案一:建议赶紧用导出、导入弄一下,具体是:
    -- *1). 先导出数据 exp ....
    -- *2). 彻底卸载原数据库软件,删除Oracle相关注册表信息等。
    -- *3). 重新安装与之前版本一样的Oracle软件。
    -- *4). 最后用 imp 导入数据(用之前exp 生成的备份数据文件)。-- 方案二:如果有完整的备份的话,用基于块的恢复试试-- 具体操作步骤如下:-- 7.8.4 使用RMAN进行基于数据块的恢复 ( P326 )
    -- 从Oracle 9i开始,RMAN开始支持基于数据块的恢复,当表空间中的某个数据块发生损坏,恢复整个文件显得有点过于昂贵,而数据块的恢复可以帮助我们快速恢复,
    -- 减少业务影响。基于数据块的恢复可以在线进行,甚至受损数据文件也不受影响,只是在恢复完成之前访问损坏Block会收到错误提示;
    -- 基于Block的恢复必须是完全恢复,所以完整的备份必不可少。-- 来看以下测试,首先对测试数据库执行一个完全备份:
    D:\> rman target /......RMAN> backup database format='d:\oradata\eygle_fullbk.bak' tag='eygle';......-------------------------------------------------------
    eygle@SZTYORA> select count(*) from t;  COUNT(*)
    ----------
         49998已用时间:  00: 00: 00.32
    eygle@SZTYORA> select count (*) from tt;  COUNT(*)
    ----------
         49999已用时间:  00: 00: 00.28
    --------------------------------------------------------- 为了测试的需要,可以使用 UltraEdit 或者 WinHex 打开文件修改某个数据块,然后保存,模拟数据块损坏,也可以使用 Oracle 的内部工具 BBED 损坏一个数据块,
    -- 用于测试,损坏的数据块在访问时会出现错误:
    SQL> select count(*) from t;
    select count(*) from t;
                         *
    第 1 行出现错误:
    ORA-01578: ORACLE 数据块损坏 (文件号 2, 块号 1050)
    ORA-01110: 数据文件 2: 'D:\ORACLE\PRODUCT\10.2.0\ORADATA\SZTYORA\EYGLE01.DBF'-- 通过dev工具及警告日志文件都可以发现损坏错误:......-- RMAN 的一个功能是在备份过程中可以发现损坏的数据块,也可以使用 RMAN 验证数据文件,以发现坏块:
    RMAN> backup validate datafile 2;......-- 验证完成之后,警告日志及数据库中都会记录损坏的数据块信息,从数据库中查询一下:
    SQL> select * from v$database_block_corruption where file#=2;     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTION_TYPE
    ---------- ---------- ---------- ------------------ ------------------
             2       1204          1                  0 CHECKSUM
             2       1101          1                  0 CHECKSUM
             2       1409          1                  0 CHECKSUM已用时间:  00: 00: 00.32已用时间:  00: 00: 00.17-- 现在可以通过备份来进行基于数据块级别的恢复:
    RMAN> blockrecover datafile 2 block 1204 from backupset;
    RMAN> blockrecover datafile 2 block 1101 from backupset;
    RMAN> blockrecover datafile 2 block 1409 from backupset;
    ......-- 完成恢复之后,可以登录数据库查询:
    SQL> select * from v$database_block_corruption where file#=2;     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTION_TYPE
    ---------- ---------- ---------- ------------------ ------------------
             2       1050          1                  0 CHECKSUM
    SQL> select count(*) from t;-- 此时数据已经恢复,但是 block corruption 信息仍然记录在数据库中,直到下次 validate 才会清除这部分信息:
    D:\> rmant target /......RMAN> backup validate datafile 2;......-- 此时从数据库中查询,坏块信息被清除。
    SQL> select * from v$database_block_corruption where file#=2;
      

  8.   


    这位大虾:首先谢谢你的回答,但我的数据库不是归档模式,而且exp无法导出数据。exp:
    EXP-00056: ORACLE error 376 encountered
    ORA-00376: file 3 cannot be read at this time
    ORA-01110: data file 3: '/oracle/oracle10g/oradata/sryx/sysaux01.dbf'
    EXP-00000: Export terminated unsuccessfully