1、案例现象在数据库startup时,报错:

[oracle@localhost ~]$ sqlplus "/as sysdba"

SQL*Plus: Release 10.2.0.1.0 - Production on Mon Sep 19 19:31:05 2011

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

Connected to an idle instance.

SQL> startup

ORACLE instance started.

Total System Global Area  202445884 bytes

Fixed Size                   451644 bytes

Variable Size             167772160 bytes

Database Buffers           33554432 bytes

Redo Buffers                 667648 bytes

Database mounted.

ORA-01122: database file 1 failed verification check

ORA-01110: data file 1: '/u01/u01d/sysaux01.dbf'

ORA-01200: actual file size of 38400 is smaller than correct size of 51200 blocks

2、问题分析

SQL> select status from v$instance;

STATUS

------------

MOUNTED

SQL>

报错说,数据文件的实际大小与正确的大小较小。

SQL> col name for a50

SQL> select file#,status,bytes/1024/1024 mb,name from v$datafile;

FILE# STATUS          MB NAME

---------- ------- ---------- --------------------------------------------------

1 SYSTEM         300 /u01/u01d/system01.dbf

2 ONLINE         100 /u01/u01d/undotbs01.dbf

3 SYSTEM   400 /u01/u01d/sysaux01.dbf

4 ONLINE          25 /u01/u01d/users01.dbf

5 ONLINE          25 /u01/u01d/indx01.dbf

6 ONLINE         100 /u01/u01d/perfstat.dbf

7 ONLINE          10 /u01/u01d/timi01.dbf

6 rows selected.

SQL>

可以看出控制文件记录的是400M,而du -sh system01.dbf结果是301M。接着,查阅在线帮助文档:

[oracle@localhost ~]$oerr ora 01200

01200, 00000, "actual file size of %s is smaller than correct size of %s blocks"

// *Cause:  The size of the file as returned by the operating system is smaller

//         than the size of the file as indicated in the file header and the

//         controlfile. Somehow the file has been truncated. Maybe it is the

//         result of a half completed copy.

// *Action: Restore a good copy of the data file and do recovery as needed.

[oracle@localhost ~]$

可以看出,是数据文件的实际大小与控制文件和该数据文件的头部所记录的大小不同而引起的。一般是数据库异常导致的,在数据库的运行过程中,重新启动时,文件resize之后出现异常状况时都可能会遇到。下面看看怎么恢复,以打开数据库:

3、确定解决方案

首先转储数据文件头部看看:

SQL> alter session set events 'immediate trace name FILE_HDRS level 10';

Session altered.

SQL> @/u01/admin/mytools/myscripts/gettrcname.sql

TRACE_FILE_NAME

--------------------------------------------------------------------------------------------------------------

/u01/admin/denver/udump/denver_ora_4669.trc

SQL>

[oracle@localhost ~]$more /u01/admin/denver/udump/denver_ora_5349.trc

.....

FILE HEADER:

Software vsn=153092096=0x9200000, Compatibility Vsn=134217728=0x8000000

Db ID=4004057640=0xeea91228, Db Name='DENVER'

Activation ID=0=0x0

Control Seq=1908=0x774, File size=51200=0xc800  //可见此处的大小是51200, 而ORA-01200报告说实际大小是38400

File Number=1, Blksiz=8192, File Type=3 DATA

Tablespace #0 - SYSTEM  rel_fn:1

.....

解决方案的确定:

1.如果有备份可以采用备份来恢复.

2.最坏的情况是将文件上的数据提取出来,重新加载到数据库。

3.最好的情况是通过一些特殊的手段,将该文件恢复,重新ONLINE运行。

4.通过Metalink及各种途径寻找已知的解决方案。

此时,发现根本没有任何的备份。没办法,只有使用bbed工具来非常规恢复了。

4、用BBED工具恢复

bbed就是英文block browse block edit的缩写,用来直接查看和修改数据文件数据的一个工具。在windows上没有提供这个工具,在linux上面有,需要编译:

make -f ins_rdbms.mk BBED=$ORACLE_HOME/rdbms/lib/bbed $ORACLE_HOME/bin/bbed

然后把$ORACLE_HOME/rdbms/lib加到环境变量的PATH里面,就可以直接在命令中bbed了。不过有个默认的口令blockedit。在运行bbed之前先要自己写几个配置文件:

这里假定有2个文件,分别是file.txt、par.bbd

[oracle@localhost ~]$ ls

file.txt bbed.par

[oracle@localhost ~]$ more bbed.par

blocksize=8192

listfile=/home/oracle/file

mode=edit

[oracle@localhost ~]$ more file.txt

3 /free/oracle/oradata/orcl/sysaux01.dbf 1614807040

5、恢复过程

接下来就可以使用BBED工具了:

[oracle@localhost ~]$ bbed

Password:

BBED: Release 2.0.0.0.0 - Limited Production on Tue Sep 20 18:19:33 2011

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

************* !!! For Oracle Internal Use only !!! ***************

BBED>

BBED> modify /x 00960000 offset 44  ---用find /x c8 curr 找出51200所在之处, 因为38400的十六进制为9600,在根据倒位法则就是0096

File: /u01/u01d/system01.dbf (1)

Block: 1                Offsets:   44 to  555           Dba:0x00400001

------------------------------------------------------------------------

00960000 00200000 01000300 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 a1014000 07000000 00000000

4bbaa02a 9aabd02a 0e3a0f00 00000000 00000000 00000000 00000000 00000400

7a061000 00000000 86a7dd2a 01005162 01000000 8d660000 1000ffbf 02000000

00000000 6c010000 54abd02a 6b010000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 06005359 5354454d 00000000 00000000 00000000

00000000 00000000 00000000 01000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 0a000a00 9cefc52a

5c0a0d00 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000

<32 bytes per line>

BBED> sum apply

Check value for File 1, Block 1:

current = 0x1459, required = 0x1459

BBED> quit

试着打开数据库:

SQL> alter database open;

Database altered.

SQL> col name for a50

SQL> select file#,status,bytes/1024/1024 mb,name from v$datafile;

FILE# STATUS          MB NAME

---------- ------- ---------- --------------------------------------------------

1 SYSTEM         300 /u01/u01d/system01.dbf

2 ONLINE         100 /u01/u01d/undotbs01.dbf

3 SYSTEM   300 /u01/u01d/sysaux01.dbf  ---控制文件里记录是300M,而且数据库已经成功打开         4 ONLINE          25 /u01/u01d/users01.dbf

5 ONLINE          25 /u01/u01d/indx01.dbf

6 ONLINE         100 /u01/u01d/perfstat.dbf

7 ONLINE          10 /u01/u01d/timi01.dbf

6 rows selected.

SQL> shutdown immediate

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup

ORACLE instance started.

Total System Global Area  202445884 bytes

Fixed Size                   451644 bytes

Variable Size             167772160 bytes

Database Buffers           33554432 bytes

Redo Buffers                 667648 bytes

Database mounted.

Database opened.

ok, 成功打开数据库。

6、总结ORA-01200错误的具体原因已经清楚,但是是什么导致的这次数据库故障,已无从考究。但是应该可以肯定的是,此时的数据库应该立即做个导出重建导入操作。

本文出自 “技术成就梦想” 博客,请务必保留此出处http://ixdba.blog.51cto.com/2895551/668261

oracle百分之0.01就成了.01,遭遇ORA-01200错误的原因及解决方法相关推荐

  1. PDF转成Word或PPT后不能修改的原因和解决方法

    现在很多文档都是用PDF格式,虽然查看比较方便,但编辑起来相对麻烦,所以我们经常会将PDF转换成Word或者PPT后再修改,但是有时候无论转成Word或PPT都还是不能修改是怎么回事呢?要怎么解决呢? ...

  2. 使用Fastjson解析List对象时出现:{“$ref“:“$.data[0].task.OBJECTS[0]“}的问题原因及解决方法

    使用Fastjson解析List对象时出现:{"$ref":"$.data[0].task.OBJECTS[0]"}的问题原因及解决方法 参考文章: (1)使用 ...

  3. [css] 父元素下有子元素,子元素也有高度但父元素的高度为何为0呢?分析下可能出现的原因及解决方法

    [css] 父元素下有子元素,子元素也有高度但父元素的高度为何为0呢?分析下可能出现的原因及解决方法 父元素塌陷父元素在文档流中高度默认是被子元素撑开的,当子元素脱离文档流以后,将无法撑起父元素的高度 ...

  4. 电脑开机提示EFI Netword 0 for ipv4 boot failed的原因及解决方法

    电脑开机提示EFI Netword 0 for ipv4 boot failed的原因及解决方法 今天上午正在我努力工作(huashui)的时候,收到了一位妹纸的求助.电脑开机提示efi networ ...

  5. plsql连接本地oracle数据库,而远程主机却无法连接,出现无监听程序的解决方法(转)

    plsql连接本地oracle数据库,而远程主机却无法连接,出现无监听程序的解决方法(转) 参考文章: (1)plsql连接本地oracle数据库,而远程主机却无法连接,出现无监听程序的解决方法(转) ...

  6. oracle服务没有了 原因,一例oracle服务无法启动的原因及解决方法

    摘要 腾兴网为您分享:一例oracle服务无法启动的原因及解决方法,智慧农业,月星家居,余额宝,万达普惠等软件知识,以及企鹅精灵,滴滴专车司机版,c4d导入3dmax,阿纯优品,小飞兔,我没有表情包, ...

  7. Oracle 报错 28000原因和解决方法

    Oracle 报错 28000原因和解决方法 使用PLSQL登录Oracle数据库时提示"ORA-28000:这个帐号被锁定". 出现这个问题的原因是:在Oracle databa ...

  8. 关于MySQL错误 2005 - Unknown MySQL server host ‘localhost‘ (0) 原因及解决方法

    关于MySQL错误 2005 - Unknown MySQL server host 'localhost' (0) 原因及解决方法 参考文章: (1)关于MySQL错误 2005 - Unknown ...

  9. oracle unknow host,oracle 10g OEM常规错误(Unknown host specified)解决方法

    重装了笔记本上的oracle,安装完成后,可以正常使用OEM控制台,但是注销后重新登录或者重启系统后登录,或者笔记本使用网络环境发生了变化,都有可能遇到问题.这些遇到问题的解决办法使用过,但是很久没折 ...

最新文章

  1. 通过ssh建立点对点的隧道,实现两个子网通信
  2. amd的处理器能兼容idea么_250元就能买到16GB内存 这背后究竟是道德的沦丧还是人性的扭曲?...
  3. mysql实现decode_Oracle中的DECODE()函数,MySQL中怎么实现DECODE()函数
  4. 32位linux系统支持多大内存吗,linux32位操作系统支持大内存
  5. android画面传输到电视,如何将手机内容投屏到电视上?
  6. openstack部署(四)--网络配置(Networking)
  7. php自带解压缩,PHP自带ZIP压缩、解压缩类ZipArchiv使用指南_PHP教程
  8. 无线网络(4) 无线网络基本工作原理
  9. Eclipse用法和技巧二十:一个快速打印技巧
  10. ps换脸教程:ps换脸教程步骤具体,怎样选择复制层
  11. Photoshop2020默认快捷键整理(Mac版)
  12. 数据库异常用户sa登录失败_Sa登录失败
  13. 机器学习推荐算法之关联规则(Apriori)——支持度;置信度;提升度
  14. 杯具的无线鼠标安装记
  15. 基于Java Swing界面编程教学
  16. 人脑拆机三部曲:为什么我支持马斯克,而人类应该畏惧人工智能
  17. MySQL——索引及调优篇
  18. 量纲对回归结果的影响_关于SPSS回归分析与数据预处理的心得体会,句句都是肺腑之言...
  19. 从IP协议看计算机网络通信
  20. 视频人脸检测 opencv简单应用

热门文章

  1. linux 查看vnc端口_VNC常用操作及常见问题解决办法汇总
  2. php教程目录,php基础入门篇-文件和目录操作_PHP教程
  3. c语言课程设计模块结构图,【图片】发几个C语言课程设计源代码(恭喜自己当上技术小吧主)【东华理工大学吧】_百度贴吧...
  4. assign深拷贝_Object.assign 深拷贝?浅拷贝?
  5. 电脑出货量_Q3季度全球笔记本电脑出货量增长34%,惠普出货量首次超过联想
  6. 更改Ubuntu终端复制和粘贴的快捷键
  7. 链表的一些leetcode题目+python(c++)
  8. Could not create directory F:\Qt\Test\Error in Util.asciify(build-First_02-Desktop_Qt_5_6_3_Min
  9. linux内核spi总线驱动分析,Linux下的SPI总线驱动(三)
  10. http 302错误_http面试题