【干货攻略】Oracle报错篇 ORA-01378 磁盘扇区大小不兼容问题

本文详细描述了如何处理Oracle数据库中出现的ORA-01378错误,涉及到redo日志文件的4K块大小与512字节磁盘扇区不兼容的情况,包括问题排查、解决策略以及磁盘扇区工作模式的解释。
摘要由CSDN通过智能技术生成

        本期将为大家分享“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 磁盘扇区大小不兼容”报错的处理方法。希望能给大家带来帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值