【翻譯自mos文章】怎麼檢測並解決datafile os header(Block Zero)的 損壞-,
怎麼檢測並解決datafile os header(Block Zero)的 損壞- - ORA-27047 DBV-107 ORA-1157/ORA-27048
來源於:
How to Detect and Fix a Corruption in the Datafile OS Header/Block Zero - ORA-27047 DBV-107 ORA-1157/ORA-27048 (文檔 ID 360032.1)
適用於:
Oracle Database - Enterprise Edition - Version 8.0.5.0 to 12.1.0.2 [Release 8.0.5 to 12.1]
Information in this document applies to any platform.
***Checked for relevance on 02-FEB-15***
癥狀:
oracle file中的os block知識: 1.The OS Block Header 是datafile 中的第一個block,它被oracle用來儲存 作業系統資訊。 2.它的block號是零(It is the Block Zero),而 datafile的header 的 block號是1,這兩個header不是一回事。 3.Block Zero 的損壞 不會導致data的損壞,在oracle 11g之前,Block Zero的損壞不能被dbv 或者rman 檢測出來。 在11g的dbv已經被改進(enhanced),11g的dbv 能檢測到Block Zero的損壞。 4.dbfsize 可以用來 檢測Block Zero的一致性. 注意:關於dbfsize的樣本,請見我的文章:http://blog.csdn.net/msdnchina/article/details/43345445 5.當Block Zero被損壞時,有時 database可能被open起來,並且沒有錯誤(no errors)。 Block Zero在如下情況下被檢查(checked): 5.1 一些特定的資料庫操作,比如'CREATE CONTROLFILE' 5.2 在11g版本中,在database 被open的過程中。
癥狀:
1.當 os block header 無效時,建立控制檔案可能會報某一個特定datafile上的ORA-27047
ORA-27047 : unable to read the header block of file.
下面是hpux的一個例子:
ORA-1503: CREATE CONTROLFILE failed ORA-1565: error in identifying file '/oradata/users.dbf' ORA-27047: unable to read the header block of file HP-UX Error: 22: Invalid argument Additional information: 2
2.低於11g版本的dbv工具 + 生產力不會報資料檔案上的corruption,11g的dbv 會報錯誤 "DBV-00107: Unknown header format"
3.database upgrade(open migrate) 或者 normal open 可能會失敗,報錯誤: ORA-01157 ORA-27048
ORA-01157: cannot identify/lock data file 1 - see DBWR trace file ORA-01110: data file 1: '/oracle/dbs/system.dbf' ORA-27048: skgfifi: file header information is invalid
原因:
datafile中的OS block header (Block 0) 被損壞
1.通過Oracle 工具 + 生產力dbfsize可以辨別corruption
$ dbfsize /oradata/users.dbf Header block magic number is bad
dbfsize辨別的其他錯誤還有:
/oradata/users.dbf: Header block file size is bad; trying raw file format... /oradata/users.dbf: Header block magic number is bad
2.無效的datafile copy 會導致該問題。 一個例子是當使用os命令 dd 來進行裸裝置和檔案系統的file copying時。 Reference Bug 4307836 (closed as not a bug) in HPUX.
3.檔案系統損壞可能會導致此問題。
4.NetBackup 可能會導致該問題,請見Note:373595.1
5.Bug 4721022 / Bug 4724358 may also cause it. See Note 4724358.8
解決方案:
使用好的控制檔案拷貝 open database, 並 resize datafile
1.resizing datafile 將會重新格式化 os block header
alter database datafile '/oradata/users.dbf' resize <new size>;
運行dbfsize 來確認block 已經被修複:
$ dbfsize /oradata/users.dbf Database file: /oradata/users.dbf Database file type: file system Database file size: 51200 8192 byte blocks
注意:resize 原大小,重建還是報錯,需要resize一個不同的大小。--依據來源:http://www.cnblogs.com/rootq/archive/2012/12/12/2814579.html
2.如果是檔案系統損壞導致的該問題,在該檔案系統上運行fsck,可能會fix該問題。
3.解決該問題的另外一個方法就是:從backup中restore recover 受到影響的file
References
NOTE:4724358.8 - Bug 4724358 - ORA-27045 ORA-1578 ORA-27047 corruption caused by DBMS_LDAP
BUG:4721022 - ORA-27045 REPORTED INTERMITTENTLY AND WITH BLOCK CORRUPTIONS
BUG:4724358 - USING DBMS_LDAP WITH CONNECTION POOLING CAN CAUSE CORRUPTION / ORA-27045
NOTE:373595.1 - ORA-1578 ORA-27047 ORA-27048 Corrupt blocks when using RMAN / NetBackup