天萃荷净

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>select name from v$dbfile;

NAME

————————————————

/oracle/app/oracle/oradata/orcl1123/users01.dbf

/oracle/app/oracle/oradata/orcl1123/undotbs01.dbf

/oracle/app/oracle/oradata/orcl1123/sysaux01.dbf

/oracle/app/oracle/oradata/orcl1123/system01.dbf

3 dd清空i_undo1索引

在清空的时候,注意增加上conv=notrunc

oracleplus.net>!dd if=/dev/zero of=/oracle/app/oracle/oradata/orcl1123/system01.dbf bs=8192 count=8 seek=320 conv=notrunc

8+0 records in

8+0 records out

4 出现坏块

直接查询undo$表报坏块

oracleplus.net>select * from undo$ where us#=1;

select * from undo$ where us#=1

*

ERROR at line 1:

ORA-01578: ORACLE data block corrupted (file # 1, block # 321)

ORA-01110: data file 1: ‘/oracle/app/oracle/oradata/orcl1123/system01.dbf’

oracleplus.net>startup force;

ORACLE instance started.

Total System Global Area 592920576 bytes

Fixed Size 2230632 bytes

Variable Size 176162456 bytes

Database Buffers 411041792 bytes

Redo Buffers 3485696 bytes

Database mounted.

ORA-01092: ORACLE instance terminated. Disconnection forced

ORA-00604: error occurred at recursive SQL level 1

ORA-01578: ORACLE data block corrupted (file # 1, block # 321)

ORA-01110: data file 1: ‘/oracle/app/oracle/oradata/orcl1123/system01.dbf’

Process ID: 14665

Session ID: 1 Serial number: 5

5 bbed修改bootstrap$表

BBED> set filename ‘/oracle/app/oracle/oradata/orcl1123/system01.dbf’;

FILENAME /oracle/app/oracle/oradata/orcl1123/system01.dbf

块号是上面通过rowid得到的,其实在11Gbootstrap$对象存放位置是520,在10G中的位置不一样,请注意版本。

BBED> set block 521

BLOCK# 521

行记录数也是在之前通过rowid转换得到的

BBED> x /rnnc *kdbr[8]

rowdata[4533] @5823

————-

flag@5823: 0x2c (KDRHFL, KDRHFF, KDRHFH)

lock@5824: 0x01

cols@5825: 3

col 0[2] @5826: 34

col 1[2] @5829: 34

col 2[196] @5832: CREATE UNIQUE INDEX I_UNDO1 ON UNDO$(US#) PCTFREE 10 IN

ITRANS 2 MAXTRANS 255 STORAGE ( INITIAL 64K NEXT 1024K MINEXTENTS 1 MAXEXT

ENTS 2147483645 PCTINCREASE 0 OBJNO 34 EXTENTS (FILE 1 BLOCK 320))

修改行标识符,其实就是在行标识符增加D的标识符

BBED> set mode edit

MODE Edit

BBED> set count 10

COUNT 10

BBED> modify /x 3c offset 5823

Warning: contents of previous BIFILE will be lost. Proceed (Y/N) y

File: /oracle/app/oracle/oradata/orcl1123/system01.dbf (0)

Block: 521 Offsets: 5823 to 5832 Dba:0x00000000

————————————————————————

3c010302 c12302c1 23c4

<32 bytes per line>

BBED> dump offset 5823

File: /oracle/app/oracle/oradata/orcl1123/system01.dbf (0)

Block: 521 Offsets: 5823 to 5832 Dba:0x00000000

————————————————————————

3c010302 c12302c1 23c4

<32 bytes per line>

BBED> x /rnnc *kdbr[8]

rowdata[4533] @5823

————-

flag@5823: 0x3c (KDRHFL, KDRHFF, KDRHFD, KDRHFH)

lock@5824: 0x01

cols@5825: 0

下面是修改块的剩余空间信息

BBED> sum apply

Check value for File 0, Block 521:

current = 0x41fc, required = 0x41fc

BBED> verify

DBVERIFY – Verification starting

FILE = /oracle/app/oracle/oradata/orcl1123/system01.dbf

BLOCK = 521

Block Checking: DBA = 4194825, Block Type = KTB-managed data block

data header at 0x2a98b87244

kdbchk: the amount of space used is not equal to block size

used=6760 fsc=0 avsp=1156 dtl=8120

Block 521 failed with check code 6110

关于这部分的说明可以见BLOG:6110

DBVERIFY – Verification complete

Total Blocks Examined : 1

Total Blocks Processed (Data) : 1

Total Blocks Failing (Data) : 1

Total Blocks Processed (Index): 0

Total Blocks Failing (Index): 0

Total Blocks Emptyhttp://www.oracleplus.net : 0

Total Blocks Marked Corrupt : 0

Total Blocks Influx : 0

Message 531 not found; product=RDBMS; facility=BBED

oracleplus.net>select 8120-6760 from dual;

8120-6760

———-

1360

oracleplus.net>select to_char(1360,’xxxx’) from dual;

TO_CH

—–

550

BBED> p kdbh

struct kdbh, 14 bytes @68

ub1 kdbhflag @68 0x00 (NONE)

sb1 kdbhntab @69 1

sb2 kdbhnrow @70 24

sb2 kdbhfrre @72 -1

sb2 kdbhfsbo @74 66

sb2 kdbhfseo @76 1222

sb2 kdbhavsp @78 1156

sb2 kdbhtosp @80 1156

BBED> modify /x 5005 offset 80

File: /oracle/app/oracle/oradata/orcl1123/system01.dbf (0)

Block: 521 Offsets: 80 to 89 Dba:0x00000000

————————————————————————

50050000 1800a31f 1a1f

<32 bytes per line>

BBED> modify /x 5005 offset 78

File: /oracle/app/oracle/oradata/orcl1123/system01.dbf (0)

Block: 521 Offsets: 78 to 87 Dba:0x00000000

————————————————————————

50055005 00001800 a31f

<32 bytes per line>

BBED> p kdbh

struct kdbh, 14 bytes @68

ub1 kdbhflag @68 0x00 (NONE)

sb1 kdbhntab @69 1

sb2 kdbhnrow @70 24

sb2 kdbhfrre @72 -1

sb2 kdbhfsbo @74 66

sb2 kdbhfseo @76 1222

sb2 kdbhavsp @78 1360

sb2 kdbhtosp @80 1360

BBED> sum apply

Check value for File 0, Block 521:

current = 0x41fc, required = 0x41fc

BBED> verify

DBVERIFY – Verification starting

FILE = /oracle/app/oracle/oradata/orcl1123/system01.dbf

BLOCK = 521

Block Checking: DBA = 4194825, Block Type = KTB-managed data block

data header at 0x2a98b87244

kdbchk: space available on commit is incorrect

tosp=1360 fsc=0 stb=2 avsp=1360

Block 521 failed with check code 6111

DBVERIFY – Verification complete

Total Blocks Examined : 1

Total Blocks Processed (Data) : 1

Total Blocks Failing (Data) : 1

Total Blocks Processed (Index): 0

Total Blocks Failing (Index): 0

Total Blocks Empty : 0

Total Blocks Marked Corrupt : 0

Total Blocks Influx : 0

Message 531 not found; product=RDBMS; facility=BBED

oracleplus.net>select to_char(1362,’xxxx’) from dual;

TO_CH

—–

552

BBED> modify /x 5205 offset 80

File: /oracle/app/oracle/oradata/orcl1123/system01.dbf (0)

Block: 521 Offsets: 80 to 89 Dba:0x00000000

————————————————————————

52050000 1800a31f 1a1f

<32 bytes per line>

BBED> sum apply

Check value for File 0, Block 521:

current = 0x41fe, required = 0x41fe

BBED> verify

DBVERIFY – Verification starting

FILE = /oracle/app/oracle/oradata/orcl1123/system01.dbf

BLOCK = 521

DBVERIFY – Verification complete

Total Blocks Examined : 1

Total Blocks Processed (Data) : 1

Total Blocks Failing (Data) : 0

Total Blocks Processed (Index): 0

Total Blocks Failing (Index): 0

Total Blocks Empty : 0

Total Blocks Marked Corrupt : 0

Total Blocks Influx : 0

Message 531 not found; product=RDBMS; facility=BBED

这里看到verify已经没有报错了

6 数据库正常启动

[oracle@oracleplus.net sql]$sqlplus / as sysdba

SQL*Plus: Release 11.2.0.3.0 Production on Fri Nov 21 13:49:04 2014

Copyright (c) 1982, 2011, Oracle. All rights reserved.

Connected to an idle instance.

oracleplus.net>startup

ORACLE instance started.

Total System Global Area 592920576 bytes

Fixed Size 2230632 bytes

Variable Size 176162456 bytes

Database Buffers 411041792 bytes

Redo Buffers 3485696 bytes

Database mounted.

Database opened.

这里看到数据库已经正常启动,其实我们还可以通过10046去跟踪数据库启动过程,可以发现没有CREATE I_UNDO1的DDL语句执行了

oracleplus.net>select * from undo$ where us#=1;

Execution Plan

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

Plan hash value: 3995376916

—————————————————————————

| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |

—————————————————————————

| 0 | SELECT STATEMENT | | 1 | 52 | 2 (0)| 00:00:01 |

|* 1 | TABLE ACCESS FULL| UNDO$ | 1 | 52 | 2 (0)| 00:00:01 |

—————————————————————————

Predicate Information (identified by operation id):

—————————————————

1 – filter(“US#”=1)

可以看到已经走全表扫描了,

下面是创建一个UNDO表空间,操作undo$表,看是否报错。

oracleplus.net>create undo tablespace undo1 datafile ‘/oracle/app/oracle/oradata/orcl1123/undo1.dbf’ size 10m autoextend on;

Tablespace created.

oracleplus.net>show parameter undo

NAME TYPE VALUE

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

undo_management string AUTO

undo_retention integer 900

undo_tablespace string UNDOTBS1

oracleplus.net>alter system set undo_tablespace=undo1;

System altered.

oracleplus.net>startup force;

ORA-01031: insufficient privileges

oracleplus.net>conn / as sysdba

Connected.

oracleplus.net>startup force;

ORACLE instance started.

Total System Global Area 592920576 bytes

Fixed Size 2230632 bytes

Variable Size 176162456 bytes

Database Buffers 411041792 bytes

Redo Buffers 3485696 bytes

Database mounted.

Database opened.

已经没有报错了。

7 dbv验证数据文件

通过dbv验证,可以发现原来i_undo1的块都是坏块,也说明了我们上面已经成功的跳过了对i_undo1索引的访问。

oracleplus.net>!dbv file=/oracle/app/oracle/oradata/orcl1123/system01.dbf

DBVERIFY: Release 11.2.0.3.0 – Production on Fri Nov 21 15:09:46 2014

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

DBVERIFY – Verification starting : FILE = /oracle/app/oracle/oradata/orcl1123/system01.dbf

Page 320 is marked corrupt

Corrupt block relative dba: 0x00400140 (file 1, block 320)

Completely zero block found during dbv:

Page 321 is marked corrupt

Corrupt block relative dba: 0x00400141 (file 1, block 321)

Completely zero block found during dbv:

Page 322 is marked corrupt

Corrupt block relative dba: 0x00400142 (file 1, block 322)

Completely zero block found during dbv:

Page 323 is marked corrupt

Corrupt block relative dba: 0x00400143 (file 1, block 323)

Completely zero block found during dbv:

Page 324 is marked corrupt

Corrupt block relative dba: 0x00400144 (file 1, block 324)

Completely zero block found during dbv:

Page 325 is marked corrupt

Corrupt block relative dba: 0x00400145 (file 1, block 325)

Completely zero block found during dbv:

Page 326 is marked corrupt

Corrupt block relative dba: 0x00400146 (file 1, block 326)

Completely zero block found during dbv:

Page 327 is marked corrupt

Corrupt block relative dba: 0x00400147 (file 1, block 327)

Completely zero block found during dbv:

DBVERIFY – Verification complete

Total Pages Examined : 90880

Total Pages Processed (Data) : 59549

Total Pages Failing (Data) : 0

Total Pages Processed (Index): 12467

Total Pages Failing (Index): 0

Total Pages Processed (Other): 3306

Total Pages Processed (Seg) : 1

Total Pages Failing (Seg) : 0

Total Pages Empty : 15550

Total Pages Marked Corrupt : 8

Total Pages Influx : 0

Total Pages Encrypted : 0

Highest block SCN : 1116286 (0.1116286)

本文固定链接: http://www.htz.pw/2014/11/21/change-bootstrap-table-with-bbed-to-skip-corrupt-block-on-i_undo1.html | 认真就输

--------------------------------------ORACLE-DBA----------------------------------------

最权威、专业的Oracle案例资源汇总之【案例】Oracle无法启动报错ORA-00604 ORA-01578官方解决办法

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

  1. VS中使用 loadimage()函数载入图像报错与图像无法载入的解决办法

    VS中使用 loadimage()函数载入图像报错与图像无法载入的解决办法 1. 载入图像报错 使用loadimage()加载图片时,程序报错界面如下图 报错内容如下: 解决方案1: 在图片名称前加个 ...

  2. centos7 docker 启动报错 Job for docker.service failed 解决办法

    启动  docker 报错 查看docker 版本,只有client,没有server. 解决方法:执行 vi /etc/sysconfig/selinux , 把 selinux 属性值改为disa ...

  3. oracle安装出现2932,【案例】Oracle报错ORA-19815 fast_recovery_area无剩余空间解决办法...

    天萃荷净 运维DBA反映数据库出现宕机,alert日志报错ORA-19815,分析原因为归档日志满导致日志无法归档,提出fast_recovery_area无剩余空间解决办法 一.打开数据库报错ORA ...

  4. DHCP服务启动报“bad subnet number/mask combination.”的解决办法

    DHCP服务启动报"bad subnet number/mask combination."的解决办法 自家的linux服务器上搭建DHCP服务在重启后出现报错,但是光看表面的原因 ...

  5. phpStudy ,结果启动却发现报错,Apache80端口被占用解决办法

    phpStudy ,结果启动却发现报错,Apache80端口被占用解决办法 如果安装了SQL Server 2008,那么大概率是它的日志服务占用了80端口,一般来讲,我们不会用到这个组件,关掉也能节 ...

  6. 启动Spring项目报错,Springboot启动报错 Disconnected from the target VM 解决过程

    启动Spring项目报错,Springboot启动报错 Disconnected from the target VM 解决过程 大概率是缺少了一下依赖 <dependency><g ...

  7. idea软件 springboot项目启动报错:命令行太长解决

    idea软件 springboot项目启动报错:命令行太长解决 1.找到项目下得.idea文件夹,打开文件workspace.xml 2.搜索标签 <component name="P ...

  8. Centos7系统重装报错“ /dev/root does not exist“解决办法

    Centos7系统重装报错" /dev/root does not exist"解决办法 一.报错场景 二.报错提示 三.报错分析 四.解决方法(理论) 1.解决方法1 2.解决方 ...

  9. 关于latex报错GPL Ghostscript 9.50的解决办法

    关于latex报错GPL Ghostscript 9.50的解决办法 1.问题描述 2.问题分析 3.问题解决 修改默认文件夹路径 4.这种解决方法的弊端 1.问题描述 在利用texstudio软件进 ...

  10. DataFrame/Series运行round()函数报错“TypeError: a float is required”解决办法

    DataFrame/Series运行round()函数报错"TypeError: a float is required"解决办法 原代码片段: #把数据按年龄分层,然后按照不同层 ...

最新文章

  1. 20181029NOIP模拟赛T2
  2. UA STAT687 线性模型理论I 线性模型概述
  3. go int 最大值_Dig101 - Go之灵活的slice
  4. linux java平台,如何下载和安装用于 Linux 平台的 Java
  5. 2021.12.15
  6. Gartner 组织世界BI大会,PowerBI 与 Tableau 同台竞技
  7. splay/fhq-treap 问卷调查反馈—— [JSOI2008]火星人prefix(splay),Strange Queries(fhq-treap)
  8. tableau for循环_Tableau for Data Science and Data Visualization-速成课程
  9. 14工厂方法模式(Factory Method)
  10. html5的交互标签,html5里交互元素的使用方法
  11. python求解非线性多元方程_求解python中的colebrook(非线性)方程
  12. 灰度拉伸python_灰度变换之灰度线性拉伸(算法1)
  13. SAP打印出库单需求
  14. 在C ++中将字符串转换为int
  15. Linux开发环境——SSH工具
  16. 吐血推荐一大波让你直呼哇塞的Canvas库
  17. crond和crontab详解
  18. unity ar vr_学习在Unity中创建AR和VR应用
  19. python word文档文字批量替换与删除
  20. Ubuntu 18.04 安装vsftpd

热门文章

  1. 查看计算机温度指令,电脑硬件温度如何查看
  2. Diskeeper 2010 EnterpriseServer
  3. star cd linux,在win下启动linux
  4. 三西格玛和六西格玛区别是什么?优思学院用一幅图告诉你
  5. 蓝桥杯青蛙过河(动态规划)
  6. ESP-IDF Kconfig文件配置
  7. 树莓派3操作系统下载地址
  8. KB: 如果通过API读取黑莓程序jad文件里面的属性
  9. 最简单的代码【数字图像处理】计算rice.png中米粒个数
  10. Direct3D研究院之创建第一个DirectX3D项目(一)