Oracle database datafile header中记录的datafile的大小

Oracle数据库系统01.dbf文件大小计算解析
本文详细解读了如何通过命令行工具dd和od计算Oracle数据库系统文件大小,特别关注了如何准确计算datafile中的osheader,以及提供了一个8192字节与106240字节的计算实例。通过分析ls-lrt命令结果,解释了系统文件大小的计算原理。

 

本文的环境:Oracle Databae 12.1.0.2, rhel5.9 x86-64bit

 

[oracle@rhel59 orcl]$ pwd
/u01/app/oracle/oradata/orcl
[oracle@rhel59 orcl]$ ls -lrt
total 2386544
drwxr-x--- 2 oracle oinstall      4096 Dec 26  2014 pdbseed
drwxr-x--- 2 oracle oinstall      4096 Dec 26  2014 PN1
drwxr-x--- 2 oracle oinstall      4096 Dec 26  2014 PN2
-rw-r----- 1 oracle oinstall   5251072 Jul 31 13:26 users01.dbf
-rw-r----- 1 oracle oinstall  52429312 Jul 31 13:26 redo03.log
-rw-r----- 1 oracle oinstall  52429312 Jul 31 13:26 redo01.log
-rw-r----- 1 oracle oinstall  74457088 Jul 31 20:01 temp01.dbf
-rw-r----- 1 oracle oinstall 602939392 Jul 31 20:25 undotbs01.dbf
-rw-r----- 1 oracle oinstall 870326272 Jul 31 20:25 system01.dbf
-rw-r----- 1 oracle oinstall 765468672 Jul 31 20:25 sysaux01.dbf
-rw-r----- 1 oracle oinstall  52429312 Jul 31 20:26 redo02.log
-rw-r----- 1 oracle oinstall  17973248 Jul 31 20:26 control01.ctl
[oracle@rhel59 orcl]$ dd if=/u01/app/oracle/oradata/orcl/system01.dbf bs=512 count=1 | od -x
1+0 records in
1+0 records out
512 bytes (512 B) copied, 0.027559 seconds, 18.6 kB/s
0000000 a200 0000 0000 ffc0 0000 0000 0000 0000
0000020 6567 0000 2000 0000 9f00 0001 7c7d 7a7b
0000040 81a0 0000 0000 0000 0000 0000 0000 0000
0000060 0000 0000 0000 0000 0000 0000 0000 0000
*
0001000
[oracle@rhel59 orcl]$ dd if=/u01/app/oracle/oradata/orcl/system01.dbf bs=512 count=1 | od -i
1+0 records in
1+0 records out
512 bytes (512 B) copied, 2.9e-05 seconds, 17.7 MB/s
0000000       41472    -4194304           0           0
0000020       25959        8192      106240  2054913149
0000040       33184           0           0           0
0000060           0           0           0           0
*
0001000
[oracle@rhel59 orcl]$ 
[oracle@rhel59 orcl]$ 
[oracle@rhel59 orcl]$ ls -lrt


8192*106240=870318080
而 ls -lrt的结果中显示system01.dbf的大小为:870326272
870326272-870318080=8192,这多出的一个就是datafile中的os header,
参见文章:
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)


8192手工计算过程;
2000 0000  翻转后:00002000,换算成十进制,就是8192

106240手工计算过程:
9f00 0001  翻转后:00019f00, 换算成十进制,就是106240
参考文章:
HOW TO GET DATAFILE SIZE THROUGH DD (文档 ID 274445.1)
注:该文章仅仅能提供计算的思路,其实里边的db block 的数量的换算过程是错误的。

 

### Oracle 19c 增量备份变为全量备份及 RMAN-06052 错误解决方案 #### 增量备份变为全量备份的原因分析 增量备份意外变为全量备份的主要原因包括以下几点: 1. **基线备份丢失或不可用** 如果 Level 0 备份(基线备份)丢失或不可用,Oracle 将无法找到适当的增量备份起点,从而触发全量备份行为。例如,当控制文件或归档日志中缺少必要的 SCN 信息时,这种情况可能发生[^1]。 2. **配置错误** 在 RMAN 配置中,如果未正确设置增量备份级别(Level 0 或 Level 1),可能导致系统默认执行全量备份。例如,若未明确指定 `LEVEL 0` 或 `LEVEL 1`,RMAN 可能会选择全量备份作为默认操作[^2]。 3. **时间间隔过长** 如果增量备份的时间间隔过长,Oracle 可能会认为之前的增量备份已失效,从而选择执行全量备份以确保数据一致性[^3]。 4. **数据文件发生变化** 当数据文件被重新创建或恢复时,Oracle 会将其视为新的数据文件,而新的数据文件需要通过全量备份来生成基线[^4]。 #### RMAN-06052 错误:`no parent backup or copy of datafile` 的解决方案 RMAN-06052 错误表示在执行增量备份时,RMAN 无法找到指定数据文件的父级备份或副本。以下是可能的原因及解决方法: 1. **基线备份丢失** 如果 Level 0 备份(基线备份)丢失或损坏,RMAN 将无法找到数据文件的父级备份。这种情况下,必须重新创建 Level 0 备份以建立新的基线[^5]。 ```bash BACKUP INCREMENTAL LEVEL 0 DATABASE; ``` 2. **数据文件重新创建或恢复** 如果数据文件被重新创建或恢复,Oracle 会将其视为新的数据文件,而新的数据文件需要通过全量备份来生成基线。可以通过以下命令检查数据文件的状态: ```sql SELECT FILE#, CHECKPOINT_CHANGE# FROM V$DATAFILE_HEADER; ``` 如果发现数据文件的 `CHECKPOINT_CHANGE#` 发生变化,说明该文件已被重新创建或恢复,需要重新进行全量备份。 3. **归档日志丢失** 如果归档日志丢失或不完整,可能导致 RMAN 无法找到增量备份所需的父级备份。可以通过以下命令验证归档日志的完整性: ```bash VALIDATE ARCHIVELOG ALL; ``` 如果发现归档日志缺失,可以尝试从备份中恢复相关归档日志。 4. **控制文件损坏** 控制文件损坏可能导致 RMAN 无法正确识别数据文件的备份历史。可以通过以下命令验证控制文件的完整性: ```bash VALIDATE DATABASE; ``` 如果发现控制文件损坏,可以尝试从备份中恢复控制文件。 #### 示例代码 以下是一个完整的 RMAN 脚本示例,用于处理增量备份和 RMAN-06052 错误: ```bash # 连接到目标数据库 RMAN TARGET / # 检查数据文件状态 SELECT FILE#, CHECKPOINT_CHANGE# FROM V$DATAFILE_HEADER; # 如果发现数据文件重新创建或恢复,执行全量备份 BACKUP INCREMENTAL LEVEL 0 DATABASE; # 执行增量备份 BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG; # 验证备份完整性 VALIDATE BACKUPSET ALL; ``` #### 总结 增量备份变为全量备份的问题通常与基线备份丢失、配置错误、时间间隔过长或数据文件变化有关。RMAN-06052 错误则可能由基线备份丢失、数据文件重新创建、归档日志丢失或控制文件损坏引起。通过仔细检查配置和环境,并采取相应的解决措施,可以有效避免这些问题。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值