惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Help Net Security
Help Net Security
G
Google Developers Blog
雷峰网
雷峰网
WordPress大学
WordPress大学
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
Engineering at Meta
Engineering at Meta
Security Latest
Security Latest
T
Threat Research - Cisco Blogs
AWS News Blog
AWS News Blog
F
Full Disclosure
C
Cybersecurity and Infrastructure Security Agency CISA
T
The Exploit Database - CXSecurity.com
J
Java Code Geeks
U
Unit 42
C
Cyber Attacks, Cyber Crime and Cyber Security
V
V2EX
C
Cisco Blogs
博客园 - 司徒正美
Project Zero
Project Zero
L
LINUX DO - 热门话题
阮一峰的网络日志
阮一峰的网络日志
Blog — PlanetScale
Blog — PlanetScale
Scott Helme
Scott Helme
A
About on SuperTechFans
Hugging Face - Blog
Hugging Face - Blog
S
Securelist
小众软件
小众软件
aimingoo的专栏
aimingoo的专栏
S
Schneier on Security
G
GRAHAM CLULEY
酷 壳 – CoolShell
酷 壳 – CoolShell
Cyberwarzone
Cyberwarzone
MongoDB | Blog
MongoDB | Blog
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
T
Threatpost
Recorded Future
Recorded Future
C
CXSECURITY Database RSS Feed - CXSecurity.com
宝玉的分享
宝玉的分享
N
News and Events Feed by Topic
人人都是产品经理
人人都是产品经理
The Register - Security
The Register - Security
S
Security Archives - TechRepublic
博客园 - Franky
N
News | PayPal Newsroom
Simon Willison's Weblog
Simon Willison's Weblog
S
SegmentFault 最新的问题
W
WeLiveSecurity
A
Arctic Wolf
B
Blog

博客园 - 一江水

什么时候使用绑定变量性能反而更差 模拟登录新浪微博(Python) Oracle ASM 详解 物化视图日志没有清除 Oracle如何根据物化视图日志快速刷新物化视图 物化视图注册信息的清除 Oracle RAC 碰到 gc buffer busy Oracle RAC 常用维护工具和命令 RAC Debug开关修改工具 Java连接Sybase ASE数据库的一个简单例子 中文图解Python脚本 解决sybase中文以及大小写问题(服务器端)(utf8 乱码) 如何使Sybase ASE中对象名不区分大小写? 使用 Oracle 数据库 10g内部的 ETL 基础架构 Oracle代理用户(Proxy User) Android系统手机端抓包方法 RAC中如何更改对外网卡和内部互联网卡的IP及VIP ORA-12545: 因目标主机或对象不存在, 连接失败 Oracle数据块损坏恢复总结[转]
Oracle OS Block Header
一江水 · 2012-12-12 · via 博客园 - 一江水

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 size: 8192 8192 byte blocks

损坏:

$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 Size                  1266488 bytes
Variable Size             100666568 bytes
Database Buffers           79691776 bytes
Redo Buffers                2924544 bytes
Database mounted.
ORA-01113: file 4 needs media recovery
ORA-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         : 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 Size                  1266488 bytes
Variable Size             100666568 bytes
Database Buffers           79691776 bytes
Redo Buffers                2924544 bytes
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  ;
CREATE CONTROLFILE REUSE DATABASE "PROD" NORESETLOGS  ARCHIVELOG
*
ERROR at line 1:
ORA-01503: CREATE CONTROLFILE failed
ORA-01565: error in identifying file '/u01/app/oracle/oradata/PROD/user01.dbf'
ORA-27047: unable to read the header block of file
Additional 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.dbf
Database file type: file system
Database 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一个不同的大小。