oracle中00604,【案例】Oracle无法启动报错ORA-00604 ORA-01578官方解决办法

天萃荷净Oracle研究中心案例分析:运维DBA反映Oracle数据库无法启动并报错ORA-00604 ORA-01578,分析原因为遇核心对象bootstrap$有坏块的解决办法。change bootstrap$ table with bbed to skip corrupt block on i undo1 。在数据库启动的时如遇核心对象(特别是bootstrap$中的对象)有坏块,会抛出O...
摘要由CSDN通过智能技术生成

天萃荷净

Oracle研究中心案例分析:运维DBA反映Oracle数据库无法启动并报错ORA-00604 ORA-01578,分析原因为遇核心对象bootstrap$有坏块的解决办法。change bootstrap$ table with bbed to skip corrupt block on i undo1 。

在数据库启动的时如遇核心对象(特别是bootstrap$中的对象)有坏块,会抛出ORA-00604,ORA-01578导致数据库启动失败。下面是模拟在数据库启动时遇到i_undo1索引块完全被损坏的情况下,通过跳过i_undo1来正常启动数据库。如果块只是部分损坏,可以考虑通过bbed来手动修复块。

下面是测试11.2.0.3环境,请不要在生产环境操作。

一般索引(特别是对象小于59)引坏块时,我个人习惯使用下面2种解决方案:

1,修改oracle二进制文件,通过修改SQL,不走索引,不过此方案需要注意:在二进制文件中的sql,都有长度记录,如果修改sql语句后,需要修改相应SQL的长度。

2,修改boostrap$表删除创建索引的行记录。下面是采用方法2来处理

1 环境介绍

下面的实验只能在相同的环境操作,不过的环境请注意需要变化的部分内容

oracleplus.net>!uname -a

Linux orcl9i 2.6.9-89.EL #1 Mon Apr 20 10:22:29 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

oracleplus.net>select * from v$version where rownum=1;

BANNER

——————————————————————————–

Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 – 64bit Production

2 查询i_undo1索引信息

查询i_undo1区的信息,主要用于下面dd命令操作

oracleplus.net>@extent.sql

Enter value for owner: sys

Enter value for segment_name: i_undo1

Enter value for tablespace_name:

FILE BLOCK

OWNER:SEGMENT_NAME ID FNO EXTENT_ID BEGIN_END

——————– —– —– ———- ————-

SYS.I_UNDO1 1 1 0 320~327

查询创建i_undo1在bootstrap$中的位置,也可以通过其它数据库查询

oracleplus.net>select * from bootstrap$ where sql_text like ‘%I_UNDO1%’;

LINE# OBJ# SQL_TEXT

———- ———- ——————————————————————————————————————————————————

34 34 CREATE UNIQUE INDEX I_UNDO1 ON UNDO$(US#) PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1024K MINEXTENTS 1 MAXEXTENTS 2147483645 PCTI

NCREASE 0 OBJNO 34 EXTENTS (FILE 1 BLOCK 320))

查询i_undo1对象存放的物理位置

oracleplus.net>select obj#,

dbms_rowid.rowid_relative_fno(rowid) file_id,

dbms_rowid.rowid_block_number(rowid) block_id,

dbms_rowid.ROWID_ROW_NUMBER(rowid) row_id

from bootstrap$

where obj# = 34order by obj#;

FILE

OBJ# ID BLOCK_ID ROW_ID

———- —– ———- ———-

34 1 521 8

查询在obj$表中存放的位置

oracleplus.net>select obj#,

dbms_rowid.rowid_relative_fno(rowid) file_id,

dbms_rowid.rowid_block_number(rowid) block_id,

dbms_rowid.ROWID_ROW_NUMBER(rowid) row_id

from ind$

where obj# = 34

order by obj#;

FILE

OBJ# ID BLOCK_ID ROW_ID

———- —– ———- ———-

34 1 145 3

1 row selected.

查询在ind$表中存放的位置

oracleplus.net>select obj#,

dbms_rowid.rowid_relative_fno(rowid) file_id,

dbms_rowid.rowid_block_number(rowid) block_id,

dbms_rowid.ROWID_ROW_NUMBER(rowid) row_id

from obj$

where obj# = 34

order by obj#;

FILE

OBJ# ID BLOCK_ID ROW_ID

———- —– ———- ———-

34 1 241 39

查询数据文件的位置

oracleplus.net>sele

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值