系统:CentOS7.9

数据库:oracle 11.2.0.4

环境:RAC 双节点

磁盘组:asmlib创建+multipath多路径

问题描述:磁盘组由5块20g的磁盘构成,当添加一块40g的磁盘进磁盘组时,出现无法重平衡的问题.

SQL> r

1* select path,total_mb,free_mb from v$asm_disk_stat where group_number=1 order by 1

PATH TOTAL_MB FREE_MB

------------------------------ ---------- ----------

ORCL:DATA01 20479 20067

ORCL:DATA02 20479 20069

ORCL:DATA03 20479 20067

ORCL:DATA04 20479 20066

ORCL:DATA05 20479 20067

ORCL:DATA06 40959 40143

6 rows selected.

报错如下,ARB0进程会自动被停止.

SQL> alter diskgroup data rebalance power 8

NOTE: GroupBlock outside rolling migration privileged region

NOTE: requesting all-instance membership refresh for group=1

Wed May 11 22:24:08 2022

NOTE: membership refresh pending for group 1/0xbb195d83 (DATA)

Wed May 11 22:24:11 2022

GMON querying group 1 at 12 for pid 18, osid 4346

SUCCESS: refreshed membership for 1/0xbb195d83 (DATA)

SUCCESS: alter diskgroup data rebalance power 8

NOTE: starting rebalance of group 1/0xbb195d83 (DATA) at power 8

Starting background process ARB0

Wed May 11 22:24:11 2022

ARB0 started with pid=33, OS id=7966

NOTE: assigning ARB0 to group 1/0xbb195d83 (DATA) with 8 parallel I/Os

cellip.ora not found.

NOTE: stopping process ARB0

SUCCESS: rebalance completed for group 1/0xbb195d83 (DATA)

NOTE: Attempting voting file refresh on diskgroup DATA

NOTE: Refresh completed on diskgroup DATA. No voting file found.

此问题花了两天时间,经多次测试终于弄清楚,原来添加的磁盘要和之前构成磁盘组的磁盘大小要一致.

实验测试:

SQL> alter diskgroup data drop disk data06;

Diskgroup altered.

SQL> select path,total_mb,free_mb from v$asm_disk_stat where group_number=1 order by 1;

PATH TOTAL_MB FREE_MB

------------------------------ ---------- ----------

ORCL:DATA01 20479 19905

ORCL:DATA02 20479 19906

ORCL:DATA03 20479 19904

ORCL:DATA04 20479 19903

ORCL:DATA05 20479 19904

建表快速消耗磁盘组+DATA

SQL> r

1* select file_name,autoextensible,bytes/1024/1024,tablespace_name from dba_data_files

FILE_NAME AUT BYTES/1024/1024 TABLESPACE_NAME

-------------------------------------------------- --- --------------- ------------------------------

+DATA/orcl/datafile/system.259.1103587173 YES 760 SYSTEM

+DATA/orcl/datafile/sysaux.260.1103587175 YES 670 SYSAUX

+DATA/orcl/datafile/undotbs1.261.1103587179 YES 825 UNDOTBS1

+DATA/orcl/datafile/undotbs2.263.1103587185 YES 200 UNDOTBS2

+DATA/orcl/datafile/users.264.1103587185 YES 5 USERS

速度建表,指定users表空间

SQL> create table t1 tablespace users as select * from dba_objects;

然后不断insert数据.

SQL> insert into t1 select * from t1;

11051776 rows created.

Elapsed: 00:01:39.79

SQL> insert into t1 select * from t1;

22103552 rows created.

Elapsed: 00:29:11.08

SQL> insert into t1 select * from t1;

44207104 rows created.

Elapsed: 00:07:30.63

SQL> select bytes/1024/1024 from user_segments where segment_name='T1';

BYTES/1024/1024

---------------

9855

Elapsed: 00:00:00.09

SQL> alter system set db_recovery_file_dest_size=35g;

System altered.

Elapsed: 00:00:00.01

SQL> insert into t1 select * from t1;

88414208 rows created.

Elapsed: 00:14:42.63

SQL> select bytes/1024/1024 from user_segments where segment_name='T1';

BYTES/1024/1024

---------------

19711

Elapsed: 00:00:00.08

查看磁盘组使用情况

SQL> select path,total_mb,free_mb from v$asm_disk_stat where group_number=1 order by 1;

PATH TOTAL_MB FREE_MB

------------------------------ ---------- ----------

ORCL:DATA01 20479 15766

ORCL:DATA02 20479 15768

ORCL:DATA03 20479 15765

ORCL:DATA04 20479 15764

ORCL:DATA05 20479 15765

添加1块20g共享磁盘/dev/sdo(添加方法可查看此前博客)

# lsblk -p

/dev/sdo 8:224 0 20G 0 disk

└─/dev/mapper/mpatha 253:5 0 20G 0 mpath

节点1分区

# fdisk /dev/sdo

[root@hisdb1 ~]# partprobe

[root@hisdb2 ~]# partprobe

# lsblk -p

/dev/sdo 8:224 0 20G 0 disk

├─/dev/sdo1 8:225 0 20G 0 part

└─/dev/mapper/mpathb 253:6 0 20G 0 mpath

└─/dev/mapper/mpathb1 253:31 0 20G 0 part

[root@hisdb1 ~]# /usr/lib/udev/scsi_id -g -u /dev/sdo

36000c29070ff67056a025a83380ed941

配置multipath,修改/etc/multipath.conf文件

双节点添加以下内容:

multipath {

wwid "36000c29070ff67056a025a83380ed941"

alias data07

}

双节点激活多路径

[root@hisdb1 ~]# multipath -F

[root@hisdb1 ~]# multipath -v2

[root@hisdb1 ~]# multipath -ll

...

create: data07 (36000c29070ff67056a025a83380ed941) undef VMware, ,VMware Virtual S

size=20G features='0' hwhandler='0' wp=undef

`-+- policy='service-time 0' prio=1 status=undef

`- 0:0:15:0 sdo 8:224 undef ready running

...

创建asm磁盘,节点1执行

[root@hisdb1 ~]# oracleasm createdisk data07 /dev/mapper/data07p1

Writing disk header: done

Instantiating disk: done

[root@hisdb1 ~]# oracleasm scandisks

Reloading disk partitions: done

Cleaning any stale ASM disks...

Scanning system for ASM disks...

[root@hisdb1 ~]# oracleasm listdisks

DATA01

DATA02

DATA03

DATA04

DATA05

DATA06

DATA07

FRA01

FRA02

FRA03

OCR01

OCR02

OCR03

OCR04

OCR05

[root@hisdb2 ~]# oracleasm scandisks

Reloading disk partitions: done

Cleaning any stale ASM disks...

Scanning system for ASM disks...

Instantiating disk "DATA07"

[root@hisdb2 ~]# oracleasm listdisks

DATA01

DATA02

DATA03

DATA04

DATA05

DATA06

DATA07

FRA01

FRA02

FRA03

OCR01

OCR02

OCR03

OCR04

OCR05

SQL> show parameter power

NAME TYPE VALUE

------------------------------------ -------------------- ------------------------------

asm_power_limit integer 8

SQL> r

1* select path,total_mb,free_mb from v$asm_disk_stat

PATH TOTAL_MB FREE_MB

------------------------------ ---------- ----------

ORCL:DATA01 20479 15766

ORCL:DATA02 20479 15768

ORCL:DATA03 20479 15765

ORCL:DATA04 20479 15764

ORCL:DATA05 20479 15765

ORCL:FRA01 20479 12758

ORCL:FRA02 20479 12765

ORCL:FRA03 20479 12756

ORCL:OCR01 2047 1795

ORCL:OCR02 2047 1795

ORCL:OCR03 2047 1794

PATH TOTAL_MB FREE_MB

------------------------------ ---------- ----------

ORCL:OCR04 2047 1795

ORCL:OCR05 2047 1800

13 rows selected.

SQL> alter diskgroup DATA add disk 'ORCL:DATA07';

Diskgroup altered.

SQL> select path,total_mb,free_mb from v$asm_disk_stat;

PATH TOTAL_MB FREE_MB

------------------------------ ---------- ----------

ORCL:DATA01 20479 15973

ORCL:DATA02 20479 15976

ORCL:DATA03 20479 15972

ORCL:DATA04 20479 15972

ORCL:DATA05 20479 15972

ORCL:FRA01 20479 12758

ORCL:FRA02 20479 12765

ORCL:FRA03 20479 12756

ORCL:OCR01 2047 1795

ORCL:OCR02 2047 1795

ORCL:OCR03 2047 1794

PATH TOTAL_MB FREE_MB

------------------------------ ---------- ----------

ORCL:OCR04 2047 1795

ORCL:OCR05 2047 1800

ORCL:DATA07 20479 19438

14 rows selected.

SQL> select path,total_mb,free_mb from v$asm_disk_stat;

PATH TOTAL_MB FREE_MB

------------------------------ ---------- ----------

ORCL:DATA01 20479 16549

ORCL:DATA02 20479 16551

ORCL:DATA03 20479 16549

ORCL:DATA04 20479 16550

ORCL:DATA05 20479 16550

ORCL:FRA01 20479 12758

ORCL:FRA02 20479 12765

ORCL:FRA03 20479 12756

ORCL:OCR01 2047 1795

ORCL:OCR02 2047 1795

ORCL:OCR03 2047 1794

PATH TOTAL_MB FREE_MB

------------------------------ ---------- ----------

ORCL:OCR04 2047 1795

ORCL:OCR05 2047 1800

ORCL:DATA07 20479 16554

14 rows selected.

在asmcmd下lsdg命令显示Rebal为N代表磁盘组扩容完毕,此处未保存到数据.

说明:当将ORCL:DATA07加入+DATA磁盘组时,asmcmd下lsdg命令Rebal会由N变为Y,结束后又会变为N.