ASM磁盘nomal在线扩所容盘大小不一致咋个办?

一、引言

在使用asm磁盘进行扩缩容的时候,往往建议新磁盘的大小和就磁盘保持一致(特别是在normal、high级别模式下)。但是,往往由于底层存储、操作系统的一些计量单位误差,可能导致给到我数据库磁盘的大小并不能完全和原磁盘保持一致,从而造成报错。今天,我就在19c数据库遇到了这个问题,那么在主机、存储不介入的情况下,该如何解决问题呢?

二、案例分析

在对某数据库的OCR磁盘进行替换操作,新增磁盘的时候,报了以下错误:

ORA-15410: Disks in disk group OCRDG do not have equal size.

这个报错很明显,就是说ocrdg里的磁盘大小不一致,无法增加。

从操作系统上查看,抽取一块旧磁盘,一块新磁盘,查看大小:

旧盘:
root@uppsdb1:/root]#fdisk -l /dev/sdd1

Disk /dev/sdd1: 5385 MB, 5385486336 bytes, 10518528 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

新盘:
root@uppsdb1:/root]#fdisk -l /dev/sdk1

Disk /dev/sdk1: 5368 MB, 5368315904 bytes, 10484992 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

可以看到旧盘分区大小要比新盘分区大小大17m,而就是这17m的差异,导致我无法将磁盘加入磁盘组。

根据我们扩缩容的原理,确实新的盘比旧盘小是会有分布不均匀、丢数据(或者说空间不足)的风险的,而在oracle数据库中,数据库自身机制帮我们对这个风险做了细致的检查,当出现磁盘不一致的情况下,则会报错不让我们加入磁盘组。

三、解决方案

通常,磁盘大小不一致的情况,我们可以分为两种,一种是旧磁盘比新磁盘大,另一种是旧磁盘比新磁盘小;针对两种情况,我们可以通过以下方式解决。

1.旧磁盘比新磁盘大

我们上面的案例就是这种情况,针对这种情况,主要可以通过以下步骤进行处理。

1.判断磁盘大小是否足够

我们可以通过以下sql,查看磁盘空间的分布,看看每块磁盘的使用量和剩余量

select name,os_mb,total_mb,free_mb,hot_used_mb,cold_used_mb,sector_size from v$asm_disk;

image.png
此时,可以从视图中看到,我们的旧ocr磁盘有3块,每块5136M,总共15408M,剩余量最少为4810M,总共14430M左右。而我们新的ocr磁盘也有3块,每块5119M,总共15357M。因此,用来替换是足够的,因此理论上做了替换不会造成任何影响,磁盘大小足够。

2.重新设置旧盘大小

此时,我们则可以对旧盘大小进行resize操作,让其每块磁盘的total_mb等于新盘的os_mb。这里需要注意,我们必须要一次性将所有的磁盘resize,单独resize每一块同样会报错。

单独resize磁盘,报错:

SQL> alter diskgroup ocrdg resize disk OCRDG_0000 size 5119M;
alter diskgroup ocrdg resize disk OCRDG_0000 size 5119M
*
ERROR at line 1:
ORA-15032: not all alterations performed
ORA-15410: Disks in disk group OCRDG do not have equal size.

同时resize所有磁盘,成功:

SQL> alter diskgroup ocrdg resize disk OCRDG_0000 size 5119M,OCRDG_0001 size 5119M,OCRDG_0002 size 5119M;

Diskgroup altered.

检查此时磁盘数据分布情况:

SQL> select name,os_mb,total_mb,free_mb,hot_used_mb,cold_used_mb,sector_size from v$asm_disk;

image.png

3.增加新磁盘,进行扩容:

进行新增磁盘操作:

SQL>alter diskgroup ocrdg add disk '/dev/oracleasm/disks/ASM_OCR1','/dev/oracleasm/disks/ASM_OCR2','/dev/oracleasm/disks/ASM_OCR3';

Diskgroup altered.

4.删除旧磁盘,进行缩容:

待磁盘重平衡完成后,进行删盘缩容

SQL> alter diskgroup ocrdg drop disk OCRDG_0000,OCRDG_0001,OCRDG_0002;

Diskgroup altered.

2.旧磁盘比新磁盘大

旧磁盘比新磁盘大的时候,我们基本可以不用关心剩余空间是否足够的问题了,可以直接指定size增加新磁盘即可正常扩缩容。

1.新增磁盘

alter diskgroup ocrdg add disk '/dev/oracleasm/disks/ASM_OCR1' size 5119M,'/dev/oracleasm/disks/ASM_OCR2' size 5119M,'/dev/oracleasm/disks/ASM_OCR3' size 5119M;

2.删除磁盘

SQL> alter diskgroup ocrdg drop disk OCRDG_0000,OCRDG_0001,OCRDG_0002;

Diskgroup altered.

3.resize磁盘

alter diskgroup ocrdg resize disk ASM_OCR1 size 5236M,ASM_OCR2 size 5236M,ASM_OCR3 size 5236M;
  • 6
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值