打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
Oracle OS Block Header

oracle文件的第一个块(block 0)是OS block header,在数据库中查询不到信息,记录的是OS信息,以及文件大小的等信息:

SQL> select file_name,bytes from dba_data_files; FILE_NAME                                               BYTES-------------------------------------------------- ----------/u01/app/oracle/oradata/PROD/user01.dbf              67108864 $ls -lrttotal 1390268-rw-r-----  1 oracle oinstall  67117056 Apr 12 09:31 user01.dbf


从上面可以看出,OS上的大小比数据库里的大小多了一个BLOCK。

如果OS block header损坏,并不影响数据库打开、使用,但重建控制文件时会报错,用dbverify/rman也检测不到坏块,不过可以使用dbfsize来查看:
正常状态:

$dbfsize user01.dbf Database file: user01.dbfDatabase file type: file systemDatabase file size: 8192 8192 byte blocks

损坏:

$dbfsize user01.dbfuser01.dbf: Header block magic number is bad

编缉BLOCK 0,模拟损坏,可以正常启动、使用:

SQL> startup;ORACLE instance started. Total System Global Area  184549376 bytesFixed Size                  1266488 bytesVariable Size             100666568 bytesDatabase Buffers           79691776 bytesRedo Buffers                2924544 bytesDatabase mounted.ORA-01113: file 4 needs media recoveryORA-01110: data file 4: '/u01/app/oracle/oradata/PROD/user01.dbf'  SQL> recover datafile 4;  Media recovery complete.SQL> alter database open; Database altered. SQL> create table test01 tablespace USERS as select * from dba_objects; Table created.

用dbv检查,未发现坏块:

$dbv file=user01.dbf DBVERIFY: Release 10.2.0.4.0 - Production on Mon Apr 16 16:38:33 2012 Copyright (c) 1982, 2007, Oracle.  All rights reserved. DBVERIFY - Verification starting : FILE = user01.dbf  DBVERIFY - Verification complete Total Pages Examined         : 8192Total Pages Processed (Data) : 357Total Pages Failing   (Data) : 0Total Pages Processed (Index): 0Total Pages Failing   (Index): 0Total Pages Processed (Other): 11Total Pages Processed (Seg)  : 0Total Pages Failing   (Seg)  : 0Total Pages Empty            : 7824Total Pages Marked Corrupt   : 0Total Pages Influx           : 0Highest block SCN            : 336969 (0.336969)

用dbfsize检查,报错:

$dbfsize user01.dbfuser01.dbf: Header block magic number is bad

如果重建控制文件,则会报错:

SQL> startup nomount;ORACLE instance started. Total System Global Area  184549376 bytesFixed Size                  1266488 bytesVariable Size             100666568 bytesDatabase Buffers           79691776 bytesRedo Buffers                2924544 bytesSQL> CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS  ARCHIVELOG  2      MAXLOGFILES 5  3      MAXLOGMEMBERS 5  4      MAXDATAFILES 100  5      MAXINSTANCES 2  6      MAXLOGHISTORY 292  7  LOGFILE  8    GROUP 1 (  9      '/u01/app/oracle/oradata/PROD/REDO1_1.log', 10      '/u01/app/oracle/oradata/PROD/REDO1_2.log', 11      '/u01/app/oracle/oradata/PROD/REDO1_3.log' 12    ) SIZE 100M, 13    GROUP 2 ( 14      '/u01/app/oracle/oradata/PROD/REDO2_1.log', 15      '/u01/app/oracle/oradata/PROD/REDO2_2.log', 16      '/u01/app/oracle/oradata/PROD/REDO2_3.log' 17    ) SIZE 100M 18  -- STANDBY LOGFILE 19  DATAFILE 20    '/u01/app/oracle/oradata/PROD/SYSTEM01.dbf', 21    '/u01/app/oracle/oradata/PROD/undotbs01.dbf', 22    '/u01/app/oracle/oradata/PROD/SYSAUX01.dbf', 23    '/u01/app/oracle/oradata/PROD/user01.dbf' 24  CHARACTER SET AL32UTF8 25  ;CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS  ARCHIVELOG*ERROR at line 1:ORA-01503: CREATE CONTROLFILE failedORA-01565: error in identifying file '/u01/app/oracle/oradata/PROD/user01.dbf'ORA-27047: unable to read the header block of fileAdditional information: 2

报ORA-27047错误。这里可以在数据库打开状态下,resize datafile,这样就可以重写OS block header信息:

SQL> alter database open; Database altered. SQL> alter database datafile '/u01/app/oracle/oradata/PROD/user01.dbf' resize 65M; Database altered. SQL> select file_name,bytes from dba_data_files; FILE_NAME                                               BYTES-------------------------------------------------- ----------/u01/app/oracle/oradata/PROD/user01.dbf              68157440

dbfsize检查正常,重建控制文件正常:

$dbfsize user01.dbf Database file: user01.dbfDatabase file type: file systemDatabase file size: 8320 8192 byte blocks SQL> CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS  ARCHIVELOG  2      MAXLOGFILES 5  3      MAXLOGMEMBERS 5  4      MAXDATAFILES 100  5      MAXINSTANCES 2  6      MAXLOGHISTORY 292  7  LOGFILE  8    GROUP 1 (  9      '/u01/app/oracle/oradata/PROD/REDO1_1.log', 10      '/u01/app/oracle/oradata/PROD/REDO1_2.log', 11      '/u01/app/oracle/oradata/PROD/REDO1_3.log' 12    ) SIZE 100M, 13    GROUP 2 ( 14      '/u01/app/oracle/oradata/PROD/REDO2_1.log', 15      '/u01/app/oracle/oradata/PROD/REDO2_2.log', 16      '/u01/app/oracle/oradata/PROD/REDO2_3.log' 17    ) SIZE 100M 18  -- STANDBY LOGFILE 19  DATAFILE 20    '/u01/app/oracle/oradata/PROD/SYSTEM01.dbf', 21    '/u01/app/oracle/oradata/PROD/undotbs01.dbf', 22    '/u01/app/oracle/oradata/PROD/SYSAUX01.dbf', 23    '/u01/app/oracle/oradata/PROD/user01.dbf' 24  CHARACTER SET AL32UTF8 25  ; Control file created. SQL> alter database open; Database altered.

注:resize 原大小,重建还是报错,需要resize一个不同的大小。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Oracle只有数据文件恢复数据库
史上最全Oracle文件损坏处理办法(附实验步骤)
利用已有的建立好的数据库,直接改相关配置文件到新的盘符
RMAN深入解析之
Standby Database的工作原理
Oracle常用命令笔记
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服