---
title: 主备库同步正常但 switchover 多次重试才成功-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 主备库同步正常但 switchover 多次重试才成功相关的常见问题和使用技巧，帮助您快速解决 主备库同步正常但 switchover 多次重试才成功的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# 主备库同步正常但 switchover 多次重试才成功

更新时间：2026-05-09 07:56

适用版本： V3.2.x、V3.1.x 内容类型：Troubleshoot  

## 适用版本

OceanBase 数据库 V3.x 版本。

## 问题现象

创建完备集群后，检查如下几个地方确认数据同步已经完成。

- OCP 显示备集群延迟在 0.x 秒。
 - 备集群执行 `select count(*) from __all_virtual_clog_stat where is_in_sync!=1` 返回 0 条记录。
 - 主备集群查询 `v$ob_cluster`、`v$ob_standby_status`、`v$ob_cluster_stat` 都显示主备库已经同步，允许切换。

通过 OCP 执行 switchover 返回 `-4012 timeout`，后续经过多次尝试均不成功，直到两个小时后才成功，而 `max_stale_time_for_weak_consistency` 参数的值恰好为两小时。 ​

## 问题原因

在主切换成备的过程中，会用 `__all_ddl_operation` 这张表最后一行记录的 row_scn 和最小可读位点（当前时间 - max_stale_time_for_weak_consistency）两个值的最大值作为读版本号来读内部表的数据。

本示例中 `max_stale_time_for_weak_consistency='2h'`，并且也很久没有更新过 DDL，因此取到的版本号是 swithover 开始两个小时前的时间点。因为 `undo_retention` 的设置远小于 `max_stale_time_for_weak_consistency`，swithover 取到的最小版本号已经被回收，就报了 snapshot_discard，取不到该版本的数据。

在切换开始后，主集群不再有任何更新操作，也不再根据 `undo_retention` 回收数据，因此恰好过了两个小时，读的版本号变成了执行开始的时间点，就能读到数据，切换就成功了。

## 解决方法

可从下述方法中选择一项进行规避。

- `max_stale_time_for_weak_consistency` 设置为默认值 5s。
 - 在对应业务租户里面做 DDL 操作。

上一篇

[租户短时间 DDL 过多导致备集群刷新 schema 内存不足卡住备集群同步的原因和处理方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000001834217)

下一篇

[主备 switchover 前，主集群显示：不能访问集群](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000322502) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
