首批通过分布式安全可靠测评,为关键业务系统打造
OceanBase 数据库部分租户切主失败问题排查步骤
更新时间:2026-06-12 04:01
在所有租户整体从主机房切到第二机房的过程中,需要确认所有租户的主副本都已切成功。但在切主的过程中仍然会发现有些租户或者表没有切成功。本文主要描述如何对该问题进行排查,以及可能存在的原因。
适用版本
OceanBase 数据库 V2.x 和 V3.x。
排查步骤
正常租户切主步骤如下。
切主前检查主副本分布情况。登录sys租户,检查要切主租户的主副本分布情况。
obclient [oceanbase]> SELECT count(1),svr_ip FROM __all_virtual_meta_table WHERE tenant_id=1002 and role=1 group by svr_ip order by 1 desc;租户切主命令,租户名为:odc_tenant。
obclient [oceanbase]> alter tenant odc_tenant primary_zone 'zone2';查看副本迁移进度。
obclient [oceanbase]> SELECT count(1),svr_ip FROM __all_virtual_meta_table WHERE tenant_id=1002 and role=1 group by svr_ip order by 1 desc;确认主副本是否迁移完成。和步骤 1 里的结果进行比对。
obclient [oceanbase]> SELECT count(1),svr_ip FROM __all_virtual_meta_table WHERE tenant_id=1002 and role=1 group by svr_ip order by 1 desc;确认租户 Primary Zone。
obclient [oceanbase]> select * from __all_tenant where tenant_name='odc_tenant';
在对所有租户的切主过程中,如果存在主切失败的情况,主要的原因有以下几个。
指定了表级别的 Primary Zone ,使用以下命令排查。
obclient> select primary_zone,tenant_id,table_id from __all_virtual_table where where primary_zone !='';对于查出来的表,执行以下 SQL 来重置 Primary Zone。
obclient> alter table table_name set PRIMARY_ZONE=default;指定了数据库级级别的 primary_zone,使用以下命令排查。
obclient> select tenant_id,dataase_id,database_name,primary_zone from __all_virtual_database where primary_zone is null ;同样对于查出来的库,执行以下 SQL 来重置 Primary Zone。
obclient> alter database set primary_zone=default;