ORA-01578: 处理一例。

本文讨论了在数据库中遇到数据块损坏错误时,如何通过查询和恢复操作定位到损坏的对象,并提供了实例说明了如何重建损坏的索引。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

警告日志里出现错误:

Errors in file /u01/app/oracle/diag/rdbms/r92cfdb/r92cfdb/trace/r92cfdb_smon_22972.trc  (incident=361333):

ORA-01578: ORACLE data block corrupted (file # 11, block # 2186414)

ORA-01110: data file 11: '/u01/app/oracle/oradata/r92cfdb/SEARCH_DATA_1.dbf'

偿试恢复:

SQL> select * from v$database_block_corruption;


     FILE#     BLOCK#     BLOCKS CORRUPTION_CHANGE# CORRUPTIO
---------- ---------- ---------- ------------------ ---------
        11    2186414          1                  0 FRACTURED
-bash-3.2$ rman target / 


Recovery Manager: Release 11.2.0.4.0 - Production on Tue Mar 10 03:10:00 2015


Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.


connected to target database: R92CFDB (DBID=1492361450)


RMAN> blockrecover datafile 11 block 2186414;


Starting recover at 10-MAR-15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=5066 device type=DISK


RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 03/10/2015 03:10:35
RMAN-06026: some targets not found - aborting restore
RMAN-06023: no backup or copy of datafile 11 found to restore

看看是什么对象损坏了吧:

SQL> SELECT tablespace_name, segment_type, owner, segment_name
  2      FROM dba_extents
  3    WHERE file_id = &fileid
  and &blockid between block_id AND block_id + blocks - 1;  4  
Enter value for fileid: 11
old   3:   WHERE file_id = &fileid
new   3:   WHERE file_id = 11
Enter value for blockid: 2186414
old   4:   and &blockid between block_id AND block_id + blocks - 1
new   4:   and 2186414 between block_id AND block_id + blocks - 1




TABLESPACE_NAME                SEGMENT_TYPE       OWNER
------------------------------ ------------------ ------------------------------
SEGMENT_NAME
--------------------------------------------------------------------------------
SEARCH_DATA                    INDEX              SEARCHSYS
DR$EQ$DOC_PATH_IDX$X

还是是索引,

既然不能恢复,删除重新建立吧:

set long 9999

 select dbms_metadata.get_ddl('INDEX','DR$EQ$DOC_PATH_IDX$X','SEARCHSYS') from dual;



  CREATE INDEX "SEARCHSYS"."DR$EQ$DOC_PATH_IDX$X" ON "SEARCHSYS"."DR$EQ$DOC_PATH
_IDX$I" ("TOKEN_TEXT", "TOKEN_TYPE", "TOKEN_FIRST", "TOKEN_LAST", "TOKEN_COUNT")


  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS COMPRESS 2
  STORAGE(INITIAL 5242880 NEXT 52428800 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1
  BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "SEARCH_DATA"

问题解决。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值