renran421 发表于 2018-9-26 10:05:24

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 -lrt total 1390268 -rw-r-----1 oracle oinstall67117056 Apr 12 09:31 user01.dbf   从上面可以看出,OS上的大小比数据库里的大小多了一个BLOCK。
  如果OS block header损坏,并不影响数据库打开、使用,但重建控制文件时会报错,用dbverify/rman也检测不到坏块,不过可以使用dbfsize来查看:
  正常状态:
$dbfsize user01.dbfDatabase file: user01.dbf Database file type: file system Database file>  损坏:
$dbfsize user01.dbf user01.dbf: Header block magic number is bad   编缉BLOCK 0,模拟损坏,可以正常启动、使用:
SQL> startup; ORACLE instance started.   Total System Global Area184549376 bytes Fixed>   SQL> recover datafile 4;   Media recovery complete. SQL>>Database> SQL> create table test01 tablespace USERS as select * from dba_objects;Table created.   用dbv检查,未发现坏块:
$dbv file=user01.dbf   DBVERIFY:> Copyright (c) 1982, 2007, Oracle.All rights reserved.   DBVERIFY - Verification starting : FILE = user01.dbf   DBVERIFY - Verification complete   Total Pages Examined         : 8192 Total Pages Processed (Data) : 357 Total Pages Failing   (Data) : 0 Total Pages Processed (Index): 0 Total Pages Failing   (Index): 0 Total Pages Processed (Other): 11 Total Pages Processed (Seg): 0 Total Pages Failing   (Seg): 0 Total Pages Empty            : 7824 Total Pages Marked Corrupt   : 0 Total Pages Influx         : 0 Highest block SCN            : 336969 (0.336969)   用dbfsize检查,报错:
$dbfsize user01.dbf user01.dbf: Header block magic number is bad   如果重建控制文件,则会报错:
SQL> startup nomount; ORACLE instance started.   Total System Global Area184549376 bytes Fixed>  报ORA-27047错误。这里可以在数据库打开状态下,resize datafile,这样就可以重写OS block header信息:
SQL>>Database> SQL>>Database> SQL> select file_name,bytes from dba_data_files;   FILE_NAME                                             BYTES -------------------------------------------------- ---------- /u01/app/oracle/oradata/PROD/user01.dbf            68157440   dbfsize检查正常,重建控制文件正常:
$dbfsize user01.dbfDatabase file: user01.dbf Database file type: file system Database file> SQL> CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGSARCHIVELOG   2      MAXLOGFILES 5   3      MAXLOGMEMBERS 5   4      MAXDATAFILES 100   5      MAXINSTANCES 2   6      MAXLOGHISTORY 292   7LOGFILE   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    )> Control file created.   SQL>>Database>  注:resize 原大小,重建还是报错,需要resize一个不同的大小。
  — The End —


页: [1]
查看完整版本: Oracle OS Block Header