暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

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

576

本期将为大家分享“ORA-01378 磁盘扇区大小不兼容”报错的问题解决方案。

关键字1:ORA-01378

关键字2:_disk_sector_size_override

关键字3:4K Online Redo Log

问题描述

       近日,为了验证数据库备份的有效性,尊贵的DBA将rhel 7.4系统上的Oracle数据库备份通过异机恢复方式还原到oel 6.8的操作系统上,其中控制文件、数据文件恢复还原都很顺利。但是当执行alter database open resetlogs命令出现ORA-01378错误。

问题排查

(1)使用oerr命令查看ORA 1378错误编号对应具体的描述、原因和解决方式。这个错误表明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 扇区有两种工作模式:native mode 和 emulation mode。Native mode:即 4k 模式,物理和逻辑的 block 大小一样,都是 4096 bytes。Native mode 的缺点是需要操作系统和软件(如 DB)的支持。Oracle 从 11gR2 开始支持 4k IO 操作。Linux 内核在 2.6.32 之后也开始支持 4k IO 操作。emulation mode:物理块是 4k,但逻辑块是 512 bytes。在该模式下,IO操作时底层物理还是 4k 进行操作,所以就会导致 Partial I/O 和 4k 对齐的问题。
          在 emulation mode下,每次 IO 操作大小是 512 bytes,但存储底层的 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、http://www.taodudu.cc/news/show-6012865.html?action=onClick

          以上就是本期关于“ORA-01378 磁盘扇区大小不兼容”报错的处理方法。希望能给大家带来帮助。         

          文章转载自数据库运维之道,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

          评论