|
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 oinstall 67117056 Apr 12 09:31 user01.dbf 从上面可以看出,OS上的大小比数据库里的大小多了一个BLOCK。
如果OS block header损坏,并不影响数据库打开、使用,但重建控制文件时会报错,用dbverify/rman也检测不到坏块,不过可以使用dbfsize来查看:
正常状态:
$dbfsize user01.dbf Database 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 Area 184549376 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 Area 184549376 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.dbf Database file: user01.dbf Database file type: file system Database file> 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 )> Control file created. SQL>>Database> 注:resize 原大小,重建还是报错,需要resize一个不同的大小。
— The End —
|
|
|