ORA-15074: diskgroup DATAC1 requires rebalance completion

1、故障概述

某一Exadata用户,配置为2(计算节点)+3(存储节点)架构, DATAC1磁盘组为High冗余级别,RECOC1磁盘组为Normal冗余级别。因为某些原因,存储节点2曾经出现过频繁地重启故障,最终down机了很长时间。修复了存储节点2的故障后,将存储节点2加入磁盘组的过程中报错。

 

2、故障处理

2.1 从报错的日志可以看出,上一次的rebalance动作没有完成,要求先完成上次的rebalance动作,才可以执行add disk动作。 尝试手动再次发起rebalance操作。

SQL> alter diskgroup datac1 rebalance power 11;

该命令可以成功执行,监控gv$asm_operation视图,也可以看到整个rebalance过程,直到rebalance结束。

 

2.2 手动完成rebalance操作后,再次执行add disk操作,但仍然失败,报相同的错误。继续检查 v$asm_disk视图,可以发现当初存储节点2出现故障时的那些missing的磁盘信息, 这说明ASM的rebalance动作虽然完成后,但数据并不没有实现High冗余(因为存储节点2出现故障后,只有剩余两个存储节点,不可能实现High冗余)。这会导致PST的槽位没有释放,当向磁盘组添加磁盘时,需要新的PST槽位,如果槽位数不足,就要求先完成上次的rebalance动作,释放槽位后,才可以下次的添加磁盘动作。

 

2.3 检查PST槽位情况。

SQL> SELECT disk "Disk", count(number_kfdpartner) "Number of partners"
FROM x$kfdpartner
WHERE grp=<group_number>
GROUP BY disk
ORDER BY 1;

检查发现:DATAC1磁盘组中某此磁盘所对应的PST槽位数已经达到20,而当前的最大值为20。

 

2.4 至此,我们已经清楚故障的原因。由于存储节点2频繁地重启,导致DATAC1磁盘组频繁地执行drop disk 、add disk操作,然而每一次操作都未成成功。最终造成PST槽位数无法释放,并且达到最大值。

 

2.5 鉴于目前的情况,只能考虑重建DATAC1磁盘组。需要将数据库从DATAC1磁盘组临时迁移至RECOC1磁盘组,然后重建DATAC1磁盘组,最终将数据库迁移回DATAC1磁盘组。以下是整个迁移步骤。

将数据库从+RECOC1切换到+DATAC1,并重新创建+RECOC1磁盘组。

1、查看数据库的数据文件分布情况:
set pagesize 1000
select name from v$controlfile
union
select name from v$datafile
union
select name from v$tempfile
union
select member from v$logfile
union
select filename from v$block_change_tracking;

2、干净地关闭数据库
srvctl stop database -d racdb -o immediate

3、将spfile和控制文件复制至新的磁盘组
[oracle@11grac1 ~]$ srvctl config database -d racdb

ASMCMD> cd +DATAC1
ASMCMD> mkdir racdb
ASMCMD> mkdir racdb/CONTROLFILE
ASMCMD> cp +RECOC1/racdb/spfileracdb.ora +DATAC1/racdb
ASMCMD> cp +RECOC1/racdb/CONTROLFILE/control01.ctl +DATAC1/racdb/CONTROLFILE/control01.ctl

4、修改pfile中关于spfile的路径
[oracle@11grac1 dbs]$ cat initracdb1.ora
SPFILE='+DATAC1/racdb/spfileracdb.ora'

5、数据库启动置nomount状态,修改spfile中control文件的路径:
sqlplus / as sysdba
startup nomount
SQL> alter system set control_files='+DATAC1/racdb/CONTROLFILE/control01.ctl' scope=spfile;
SQL> shutdown abort

6、数据库启动置mount状态
sqlplus / as sysdba
startup mount

7、切换数据文件的位置
$ rman target /
backup as copy database format '+DATAC1';
switch database to copy;

8、打开数据库,并切换redo位置
SQL> alter system set db_create_file_dest='+DATAC1';
SQL> alter database open;
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 5 '+DATAC1' size 100M;
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 6 '+DATAC1' size 100M;
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 7 '+DATAC1' size 100M;
ALTER DATABASE ADD LOGFILE THREAD 1 GROUP 8 '+DATAC1' size 100M;

ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 10 '+DATAC1' size 100M;
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 11 '+DATAC1' size 100M;
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 12 '+DATAC1' size 100M;
ALTER DATABASE ADD LOGFILE THREAD 2 GROUP 13 '+DATAC1' size 100M;

set linesize 200
select * from v$log;

alter system switch logfile;

alter database drop logfile group 1; ###当group的状态变成inactive时


9、切换tempfile;
select TABLESPACE_NAME, STATUS from dba_tablespaces where CONTENTS='TEMPORARY';

alter tablespace TEMP add tempfile '+DATAC1' SIZE 10M;
alter database tempfile '+DATAC1/racdb/tempfile/temp.273.1187705721' drop;

10、查询所有文件:
set pagesize 1000
select name from v$controlfile
union
select name from v$datafile
union
select name from v$tempfile
union
select member from v$logfile
union
select filename from v$block_change_tracking;

11、修改归档路径
alter system set log_archive_dest_1='LOCATION=+RECOC1/' scope=spfile sid='*';

12、在集群中修改数据库的spfile
srvctl modify database -d racdb -p "+RECOC1/racdb/spfileracdb.ora"

srvctl modify database -d racdb -a RECOC1

# srvctl remove diskgroup -g

drop diskgroup data including contents;

create diskgroup DG_ARCH HIGH redundancy failgroup dm01celadm07 disk
......
attribute 'cell.smart_scan_capable'='TRUE', 'au_size' = '4M', 'compatible.asm' = '11.2.0.4', 'compatible.rdbms' = '11.2.0.4';

 

posted @   石云华  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
点击右上角即可分享
微信分享提示