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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504562.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode笔记】121. 买卖股票的最佳时机 / 剑指 Offer 63. 股票的最大利润(Java、动态规划)

文章目录题目描述代码 & 思路初版代码更新啦&#xff5e;优化代码再次更新题目描述 讲道理&#xff0c;一眼dp 代码 & 思路 时间复杂度O(n)&#xff0c;不过可改进的地方还多&#xff0c;跑出来大概6ms。 初版代码 class Solution {public int maxProfit(int[] p…

【LeetCode笔记】25. K个一组翻转链表(Java、链表、递归)

文章目录题目描述思路 & 代码更新 - 精简版三刷 - 再更新版题目描述 审题很重要。。一开始以为是一组换两个&#xff0c;但是实际上是一组全部都要互换。字节超高频题&#xff01;要认真点记录 思路 & 代码 用回溯来做&#xff0c;可以分解成&#xff1a;每次都用h…

php request time,php中time()与$_SERVER[REQUEST_TIME]用法区别分析

php中time()与$_SERVER[REQUEST_TIME]用法区别分析发布于 2015-01-26 08:56:46 | 143 次阅读 | 评论: 0 | 来源: 网友投递PHP开源脚本语言PHP(外文名: Hypertext Preprocessor&#xff0c;中文名&#xff1a;“超文本预处理器”)是一种通用开源脚本语言。语法吸收了C语言、Java…

【LeetCode笔记】105. 从前序与中序遍历序列构造二叉树(Java、递归、二叉树、哈希表)

文章目录题目描述代码 & 思路题目描述 这题主要是考察前序、后序的性质&#xff0c;以及相互间的关系 代码 & 思路 前序&#xff1a;根 - 左 - 右&#xff1b; 中序&#xff1a;左 - 根 - 右&#xff0c;那么用前序数组的首位&#xff08;即根&#xff09;的值到中…

Linux c 进程名 pid,Linux C已知进程名字得到其PID号

最近需要实现一个功能&#xff0c;即在一个Linux C程序中&#xff0c;已知其他进程的名字&#xff0c;需要获得该进程的PID&#xff0c;经过一番上网搜索&#xff0c;找到两种可行的方法&#xff1a;1.通过popen创建一个管道&#xff0c;执行shell命令并得到返回结果2.通过搜索…

【LeetCode笔记】114. 二叉树展开为链表(Java、递归)

文章目录题目描述解法 & 思路思路一思路二题目描述 我佛了&#xff0c;这道题挺描述不明的&#xff0c;有坑&#xff0c;过不了oj建议马上看评论 or 题解 解法 & 思路 思路一 代码就不贴了&#xff0c;过不去先序遍历&#xff0c;按序存储val到一个ArrayList。然后用…

【LeetCode笔记】136. 只出现一次的数字(Java、位运算)

文章目录题目描述代码 & 思路题目描述 评论区一个评论很不错&#xff1a;不用额外空间&#xff0c;首先考虑位运算。 代码 & 思路 异或 ^ &#xff1a;相同得0与0得本身满足交换律那么好办了&#xff0c;abcdeabcd > aabbccdde > 0 0 0 0 e > e class So…

linux脚本写的计算器,一步步打造自己的linux命令行计算器

相信很多人&#xff0c;在工作中会需要使用到计算器。一般的做法是&#xff0c;打开并使用系统自带的计算器。这种做法可能对我来说&#xff0c;有如下几个问题。太慢。每次需要打开计算器&#xff0c;然后改成编程模式&#xff0c;手工选择进制&#xff0c;再使用输入表达式进…

【LeetCode笔记】141. 环形链表(Java、快慢指针、链表)

文章目录题目描述思路 & 代码题目描述 常见题&#xff0c;用上了久违的快慢指针 思路 & 代码 举个例子就能明白了&#xff1a;我和汽车&#xff0c;进行一场比赛&#xff0c;跑道可能是环形跑道&#xff0c;也可能是直道。直道的话&#xff0c;将会以汽车撞到终点为…

linux3.x内核实时性改进,linux 3.x内核优化指南

1.1。Numba的约5分钟指南 Numba是Python的即时编译器&#xff0c;它最适用于使用NumPy数组和函数以及循环的代码。使用Numba的最常用方法是通过其装饰器集合&#xff0c;可以应用于您的函数来指示Numba编译它们。当调用Numba修饰函数时&#xff0c;它被编译为机器代码“及时”执…

linux 控制终端卡,配置通过串口控制linux操作系统的终端

开始之前&#xff0c;请确认机器有串口(com口, RS232接口)&#xff0c;如果没有&#xff0c;那就没有办法达到通过串口控制机器的目的了。当然&#xff0c;也可以额外给机器安装一个带串口的 PCI 模块&#xff0c;然后想办法将模块驱动起来(内核默认能驱动就最好了)&#xff0c…

【LeetCode笔记】169. 多数元素(Java、摩尔投票法、哈希表)

文章目录题目描述思路 & 代码思路一&#xff1a;哈希表思路二&#xff1a; 摩尔投票法题目描述 好家伙&#xff0c;这是今天最有意思的题目了 思路 & 代码 思路一&#xff1a;哈希表 先说缺点&#xff1a;空间复杂度O(n)一次遍历&#xff0c;记录<数组存储值&a…

Linux环境下怎么使用pip,linux下pip的安装步骤及使用详解

linux下pip的安装步骤及使用详解pip类似RedHat里面的yum&#xff0c;安装软件非常方便。下面话不多说&#xff0c;来看看详细的介绍&#xff1a;pip下载&#xff1a;# wget "https://pypi.python.org/packages/source/p/pip/pip-1.5.4.tar.gz#md5834b2904f92d46aaa33326pi…

【LeetCode笔记】206. 反转链表(Java、迭代、递归、链表)

啊好久没更文了&#xff0c;前两天状态不太好。还是要坚持更文敲题噢&#xff01; 文章目录题目描述思路 & 代码题目描述 面试高频题&#xff0c;需要会用两种方法解决&#xff01;&#xff08;迭代 and 递归&#xff09;其实先写出迭代&#xff0c;递归就不难写了。 思…

当你抛弃windows使用linux,当我们厌倦了Windows系统还能考虑什么样的桌面操作系统?...

如果你厌倦了Windows&#xff0c;我们该选择什么样的操作系统&#xff1f;时间告诉我们&#xff0c;任何事物都不会一成不变&#xff0c;当我们厌倦了Windows那天到来&#xff0c;不妨考虑换个操作系统&#xff0c;即便Windows操作系统在市场依然如日中天&#xff0c;旧的不去新…

【LeetCode笔记】234. 回文链表(Java、快慢指针、链表)

文章目录题目描述思路 & 算法题目描述 写这道题前最好把206.翻转链表 写了有空间复杂度的话都好说&#xff0c;不管是新建链表、还是用字符串equals都好做。 思路 & 算法 快慢指针&#xff1a; 快指针找终点&#xff0c;慢指针反转前半个链表快指针回到慢指针的位…

vs2010 编译linux,VS2010 Boost编译安装

2.解压缩到D:\boost 目录下3.编译bjam(1)从vs2010的工具菜单进入命令提示窗口(单击“开始”按钮&#xff0c;指向“所有程序”&#xff0c;指向“Microsoft Visual Studio 2010”&#xff0c;指向“Visual Studio tools(工具)”&#xff0c;然后单击“Visual Studio 2010 comma…

【LeetCode笔记】200. 岛屿数量(Java、DFS)

文章目录题目描述代码 & 思路更新代码题目描述 直接毁岛&#xff01;每次发现一个岛&#xff0c;ans&#xff0c;然后直接把整个岛毁了&#xff08;感染&#xff09;直到最后&#xff0c;找出所有岛&#xff0c;此时地图上全都是’0’ 代码 & 思路 每次找到一个岛&…

linux统计代码注释率,统计代码注释率

#!/bin/bash#program:# 分析.c,.cpp文件,计算文件行总数&#xff0c;代码行总数&#xff0c;注释行总数&#xff0c;空白行总数&#xff0c;代码注释率# 注释类型&#xff1a;# (1)行注释"//这里是注释内容"# (2)块注释"/*这里是注释内…

【LeetCode笔记】155. 最小栈(Java、栈)

文章目录题目描述思路 & 代码更新版题目描述 用空间换时间的经典例子&#xff0c;唯一要解决的地方就是 getMin() 如何实现常数检索&#xff08;貌似也是面试常考题&#xff09; 思路 & 代码 既然想快&#xff0c;那就要付出空间的代价用什么空间可以实现&#xff…