oracle数据文件大小异常故障处理

故障描述

上了安全设备,导致数据库服务器异常宕机后无法正常启动;

数据库启动过程中出现ORA-27046错误提示;

具体报错信息显示数据文件8(EPX_HRMS_DATA_04.DBF)存在文件大小异常;

原因分析

检查alert日志,启动过程有"ORA-27046: file size is not a multiple of logical block size"报错:

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Database mounted in Exclusive Mode Lost write protection disabled Completed: ALTER DATABASE MOUNT Mon Nov 17 11:20:43 2025 alter database open Errors in file /data/oracle/diag/rdbms/orcl/orcl/trace/orcl_dbw0_44519.trc: ORA-01157: cannot identify/lock data file 8 - see DBWR trace file ORA-01110: data file 8: '/data/oracle/oradata/orcl/EPX_HRMS_DATA_04.DBF' ORA-27046: file size is not a multiple of logical block size Additional information: 1 Errors in file /data/oracle/diag/rdbms/orcl/orcl/trace/orcl_ora_44747.trc: ORA-01157: cannot identify/lock data file 8 - see DBWR trace file ORA-01110: data file 8: '/data/oracle/oradata/orcl/EPX_HRMS_DATA_04.DBF' ORA-1157 signalled during: alter database open... Mon Nov 17 11:20:43 2025 Checker run found 1 new persistent data failures |

尝试recover该数据文件,同样报"ORA-27046"

|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Mon Nov 17 11:23:57 2025 ALTER DATABASE RECOVER datafile 8 Media Recovery Start Serial Media Recovery started Mon Nov 17 11:23:57 2025 Errors in file /data/oracle/diag/rdbms/orcl/orcl/trace/orcl_dbw0_44519.trc: ORA-01157: cannot identify/lock data file 8 - see DBWR trace file ORA-01110: data file 8: '/data/oracle/oradata/orcl/EPX_HRMS_DATA_04.DBF' ORA-27046: file size is not a multiple of logical block size Additional information: 1 Media Recovery failed with error 1110 ORA-283 signalled during: ALTER DATABASE RECOVER datafile 8 ... |

dbv检查数据文件,发现也是文件不符合多个块大小

|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| $ dbv file=EPX_HRMS_DATA_04.DBF DBVERIFY: Release 19.0.0.0.0 - Production on Mon Nov 24 17:10:07 2025 Copyright (c) 1982, 2019, Oracle and/or its affiliates. All rights reserved. DBV-00113: File (/data/oracle/oradata/orcl/EPX_HRMS_DATA_04.DBF) file size is not a multiple of block size |

尝试对该数据文件做offline操作,数据库是可以起来

|-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| Mon Nov 17 11:28:41 2025 alter database datafile '/data/oracle/oradata/orcl/EPX_HRMS_DATA_04.DBF' offline Completed: alter database datafile '/data/oracle/oradata/orcl/EPX_HRMS_DATA_04.DBF' offline alter database open Beginning crash recovery of 1 threads parallel recovery started with 23 processes Started redo scan Completed redo scan ................省略部分日志....................... Mon Nov 17 11:28:49 2025 QMNC started with pid=49, OS id=67653 Completed: alter database open ARC3: Archival started ARC0: STARTING ARCH PROCESSES COMPLETE |

说明只有这一个数据文件有问题,导致数据库不能起来,但业务数据都在该数据文件上,不能做offline操作。

从主要报错内容"ORA-27046: file size is not a multiple of logical block size",可以看出,是这个数据文件不符合逻辑块尺寸大小,那么我们去检查一下这个数据文件看看是否符合逻辑块大小。

解决办法

检查数据文件的大小

|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| [oracle@localhost orcl]$ ll total 222273552 -rw-r----- 1 oracle oinstall 20135936 Nov 17 17:38 control01.ctl -rw-r----- 1 oracle oinstall 34359730176 Nov 17 12:13 EPX_HRMS_01.DBF -rw-r----- 1 oracle oinstall 34359730176 Nov 17 12:13 EPX_HRMS_DATA_02.DBF -rw-r----- 1 oracle oinstall 34359730176 Nov 17 12:13 EPX_HRMS_DATA_03.DBF -rw-r----- 1 oracle oinstall 29934763392 Nov 17 17:33 EPX_HRMS_DATA_04.DBF -rw-r----- 1 oracle oinstall 52429312 Nov 17 11:50 redo01.log -rw-r----- 1 oracle oinstall 52429312 Nov 17 11:50 redo02.log -rw-r----- 1 oracle oinstall 52429312 Nov 17 12:13 redo03.log -rw-r----- 1 oracle oinstall 21632131072 Nov 17 12:13 sysaux01.dbf -rw-r----- 1 oracle oinstall 3355451392 Nov 17 12:13 system01.dbf -rw-r----- 1 oracle oinstall 34358697984 Nov 17 11:28 temp01.dbf -rw-r----- 1 oracle oinstall 4335869952 Nov 17 12:13 undotbs01.dbf -rw-r----- 1 oracle oinstall 799547392 Nov 17 12:13 users01.dbf |

我们可以看到有问题的数据文件"EPX_HRMS_DATA_04.DBF",这个文件大小是29934763392字节,换算一下有多少个块,按8192字节逻辑块大小计算:

SQL> select 29934763392/8192 from dual;

29934763392/8192


3654145.921875

发现计算结果包含小数,确实不是整个块大小。

上面几个数据文件 EPX_HRMS_01.DBF、EPX_HRMS_DATA_02.DBF、EPX_HRMS_DATA_03.DBF的数据文件大小都是34359730176字节,计算一下块的大小刚好是个整数。

SQL> select 34359730176/8192 from dual;

34359730176/8192


4194303

确定需要的数据块数量,所以我们可以把"EPX_HRMS_DATA_04.DBF"数据文件补足整数块,把小数3654145.921875向上取整,有数据块个数3654146块,计算出大小

SQL> select 3654146*8192 from dual;

3654146*8192


29934764032

计算修正后文件大小:3654146 × 8192 = 29934764032字节

再计算差多少数据块

SQL> select 29934764032-29934763392 from dual;

29934764032-29934763392


640

计算需要增加的字节数:29934764032 - 29934763392 = 640字节

也就是"EPX_HRMS_DATA_04.DBF"这个数据文件再增加640块就变成整数个块。

使用dd命令追加数据块:

dd if=/dev/zero bs=1 count=640 >> /data/oracle/oradata/orcl/EPX_HRMS_DATA_04.DBF

启动数据库

SQL> alter database open;

alter database open

*

ERROR at line 1:

ORA-01113: file 8 needs media recovery

ORA-01110: data file 8: '/data/oracle/oradata/orcl/EPX_HRMS_DATA_04.DBF'

执行数据文件恢复:

SQL> recover datafile 8;

Media recovery complete.

SQL> alter database open;

Database altered.

总结

1、数据文件大小必须是逻辑块大小的整数倍

2、oracle数据库启动校验比较严格,除了数据大小是要求数据块的整数倍,还有所有的数据文件的scn要一致,,才能正常启动。

3、通过追加空白数据块可修复文件大小异常,但需要通过recover应用归档日志和在线重做日志来恢复数据一致性。

相关推荐
Zero-Talent2 小时前
MySQL初级
数据库·mysql·oracle
jenchoi4132 小时前
【2025-11-23】软件供应链安全日报:最新漏洞预警与投毒预警情报汇总
网络·数据库·安全·web安全·网络安全
auspicious航2 小时前
PostgreSQL数据库之使用 pg_waldump 和 pg_walinspect 查看 WAL 文件的内容
数据库·postgresql
unicrom_深圳市由你创科技2 小时前
Django项目结构与微服务设计
数据库·sqlite
不断高歌4 小时前
MySQL基础随堂笔记3
数据库·mysql
筵陌4 小时前
MySQL表的增删查改(上)
数据库·mysql
paperxie_xiexuo4 小时前
学术与职场演示文稿的结构化生成机制探析:基于 PaperXie AI PPT 功能的流程解构与适用性研究
大数据·数据库·人工智能·powerpoint
筵陌5 小时前
MySQL表的约束
数据库·mysql
UCoding5 小时前
我们来学mysql -- ReadView工作原理
数据库·mysql·readview工作原理