联系:手机/微信(+86 17813235971) QQ(107644445)
作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责任的权利.]
一个朋友的测试库出现ORA-01200错误,正好周末比较空闲,随手帮他使用bbed进行了恢复,给广大朋友提供一种解决该问题的方法
数据库启动报错
C:\Users\Administrator>sqlplus /nolog SQL*Plus: Release 11.1.0.6.0 - Production on 星期日 5月 12 22:09:11 2013 Copyright (c) 1982, 2007, Oracle. All rights reserved. SQL> connect/as sysdba 已连接到空闲例程。 SQL> startup force ORACLE 例程已经启动。 Total System Global Area 1071333376 bytes Fixed Size 1334380 bytes Variable Size 318768020 bytes Database Buffers 746586112 bytes Redo Buffers 4644864 bytes 数据库装载完毕。 ORA-01122: 数据库文件 1 验证失败 ORA-01110: 数据文件 1: 'D:\APP\ADMINISTRATOR\ORADATA\ORCL\SYSTEM01.DBF' ORA-01200: 87946 的实际文件大小小于 88320 块的正确大小
这里的错误很明显是因为file 1的数据文件头记录block大小为88320个block,而该数据文件的实际大小只有87946个block,所以出现该问题.
dbv检测文件
D:\app\Administrator\oradata\orcl>dbv file=SYSTEM01.DBF DBVERIFY: Release 11.1.0.6.0 - Production on 星期日 5月 12 22:30:29 2013 Copyright (c) 1982, 2007, Oracle. All rights reserved. DBVERIFY - 开始验证: FILE = SYSTEM01.DBF DBVERIFY - 验证完成 检查的页总数: 87040 处理的页总数 (数据): 62870 失败的页总数 (数据): 0 处理的页总数 (索引): 11055 失败的页总数 (索引): 0 处理的页总数 (其它): 2437 处理的总页数 (段) : 0 失败的总页数 (段) : 0 空的页总数: 10678 标记为损坏的总页数: 0 流入的页总数: 0 加密的总页数 : 0 最高块 SCN : 980055 (0.980055)
检查发现该数据文件未发现坏块,减小了该数据文件通过bbed恢复异常的风险,数据库最怕就是system中出现很多坏块
使用bbed修改kccfhfsz
因为win的bbed问题,所以拷贝到我的电脑上进行修改
C:\Users\XIFENFEI\Desktop\temp>bbed filename=system01.dbf blocksize=8192 Password: BBED: Release 2.0.0.0.0 - Limited Production on Sun May 12 23:27:26 2013 Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved. ************* !!! For Oracle Internal Use only !!! *************** BBED> set block 2 BLOCK# 2 --从一台机器中拷贝到另外的机器,实际中的block可能发生改变,因为含block 0 BBED> map File: system01.dbf (0) Block: 2 Dba:0x00000000 ------------------------------------------------------------ Data File Header struct kcvfh, 360 bytes @0 ub4 tailchk @8188 BBED> p kcvfhhdr.kccfhfsz ub4 kccfhfsz @44 0x0001578a --通过ORA-01200错误报出来的文件头记录大小88320实际就是0x0001578a BBED> set mode edit MODE Edit BBED> set count 32 COUNT 32 BBED> d File: system01.dbf (0) Block: 2 Offsets: 44 to 75 Dba:0x00000000 ------------------------------------------------------------------------ 00590100 00200000 01000300 00000000 00000000 00000000 00000000 00000000 <32 bytes per line> BBED> m /x 8A570100 File: system01.dbf (0) Block: 2 Offsets: 44 to 75 Dba:0x00000000 ------------------------------------------------------------------------ 8a570100 00200000 01000300 00000000 00000000 00000000 00000000 00000000 <32 bytes per line> --通过ORA-01200错误报出来的数据文件实际大小,来修改该文件头的kcvfhhdr.kccfhfsz值,也可以通过文件实际大小计算出来 BBED> p kcvfhhdr.kccfhfsz ub4 kccfhfsz @44 0x0001578a BBED> sum apply Check value for File 0, Block 2: current = 0x0f79, required = 0x0f79 BBED> verify DBVERIFY - Verification starting FILE = system01.dbf BLOCK = 1 DBVERIFY - Verification complete Total Blocks Examined : 1 Total Blocks Processed (Data) : 0 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
打开数据库
SQL> select open_mode from v$database; OPEN_MODE ---------- MOUNTED SQL> alter database open; 数据库已更改。