本期将为大家分享“ORA-01378 磁盘扇区大小不兼容”报错的问题解决方案。
关键字1:ORA-01378
关键字2:_disk_sector_size_override
关键字3:4K Online Redo Log /4K Sector Disks
问题描述
近日,为了验证数据库备份的有效性,尊贵的DBA将rhel 7.4系统上的Oracle数据库备份通过异机恢复方式还原到oel 6.8的操作系统上,其中控制文件、数据文件恢复还原都很顺利。但是当执行alter database open resetlogs命令出现ORA-01378错误。报错内容为:ORA-01378: The logical block size (4096) of file /u01/app/oracle/oradata/ywzd/ywzd/onlinelog/o1_mf_1_%u_.log is not compatible with the disk sector size (media sector size is 512 and host sector size is 512)
问题排查
(1)使用oerr命令查看错误编号对应具体的描述、原因和解决方式。这个错误表明redo日志文件的块大小和磁盘扇区大小不兼容,两者之间存在一定的尺寸差距。进一步检查操作系统的磁盘逻辑和物理扇区大小是否为512字节。
$oerr ora 01378
01378, 00000, "The logical block size(%s) of file %s is not compatible
with the disk sector size (media sector sizeis %s and host sector size is %s)"
*Cause: One of the following occurred:
(1) An attempt was made to create a file.
(2) A file was moved to disks with different sector size.//
*Action: Create file or move file to the proper disk.
(2)根据上面的错误信息可以知道在线日志文件存放到/u01目录,而/u01/建在根目录下,进一步定位到逻辑卷。然后通过fdisk命令看到这个磁盘的逻辑和物理扇区大小值为512 bytes。
[root@db2 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vg_hfyldb1-LogVol01
1.1T 760G 297G 72% /
# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
LogVol01 vg_hfyldb1 -wi-ao---- 1.09t
# fdisk -l
Disk /dev/mapper/vg_hfyldb1-LogVol01: 1201.4 GB, 1201366106112 bytes
255 heads, 63 sectors/track, 146057 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
(3)查看看源库在线日志文件的blocksize大小值为4096。
> select group#,members,blocksize from v$log;
GROUP# MEMBERS BLOCKSIZE
---------- ---------- ----------
1 1 4096
2 1 4096
3 1 4096
4 1 4096
5 1 4096
6 1 4096
(4)默认情况下,数据库在线重做日志文件的块大小为512字节。从Oracle数据库11.2版本开始,可以通过BLOCKSIZE子句将其更改为512、1024或4096。例如:
ALTER DATABASE ADD LOGFILE GROUP 5 SIZE 100M BLOCKSIZE 4096;
(5)但是,在创建重做日志时,Oracle会进行检查以确保底层设备具有匹配的扇区大小。对于本机模式设备,检查将成功,并且将创建重做日志。但是对于模拟模式设备,它实际上是假装为512字节,检查失败。
问题解决
通过以上排查分析,我们可以通过重建REDO或清单REDO来解决。将隐含参数_disk_sector_size_override设置为true来覆盖检查,该参数可以动态更改。
alter system set "_disk_sector_size_override"=TRUE ;
alter database clear logfile group 1;
alter database clear logfile group 2;
alter database clear logfile group 3;
alter database clear logfile group 4;
alter database clear logfile group 5;
alter database clear logfile group 6;
alter database open resetlogs;
此时,具有4096字节块大小的在线重做日志已经重建完成。
磁盘扇区相关知识
上一代存储多采用 512 bytes 的扇区,现在的存储则采用 4k 的扇区,扇区即每次最小 IO 的大小。4k 扇区有两种工作模式:nativemode 和 emulation mode。Native mode:即 4k 模式,物理和逻辑的 block 大小一样,都是 4096bytes。 Native mode 的缺点是需要操作系统和软件(如 DB)的支持。Oracle 从 11gR2 开始支持 4k IO 操作。 Linux 内核在 2.6.32 之后也开始支持 4k IO 操作。emulation mode:物理块是 4k,但逻辑块是 512bytes。在该模式下,IO 操作时底层物理还是 4k 进行操作,所以就会导致 Partial I/O 和 4k 对齐的问题。
在 emulation mode下,每次 IO 操作大小是 512bytes,但存储底层的 IO 操作大小必须是 4k,如果要读 512 bytes 的数据,实际需要读 4k,是原来的8倍,就是 partial IO。而在写时,也是先读 4k 的物理 block,然后更新其中的 512 bytes 的数据,再把 4k 写回去。所以在 emulation mode 下,增加的工作会增加延时,降低性能。
在 Oracle 数据库的文件中,默认情况下,datafile 的 block 是 8KB,控制文件是 16KB,所以都没有 partial IO 的问题,唯有 online redo log,默认是 512 bytes,存在 partial IO 的问题。
参考资料
1、Using 4k Redo Logs on Flash, 4k-Disk and SSD-based Storage (Doc ID 1681266.1)
2、Supporting 4K Sector Disks (Doc ID 1133713.1)
3、云和恩墨大讲堂 | 基于PCIE 闪存卡的 Oracle 数据库使用
以上就是本期关于“ORA-01378 磁盘扇区大小不兼容”报错的处理方法。希望能给大家带来帮助。