基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
3.x 版本 Schema 的延迟删除
更新时间:2026-08-27 06:26
总结说明
在 OceanBase 数据库 3.x 版本中,为了避免在备份、归档或备库同步过程中,因 Schema 被删除导致分区被垃圾回收(GC)而任务失败,引入了 Schema 延迟删除机制。当开启备份、归档或备库功能时,Schema 不会被立即删除,而是根据任务进度,由后台巡检任务统一触发删除操作。
详细说明
开关
Schema 延迟删除功能并非在所有 3.x 集群中默认开启。只有当集群开启了备份、归档或备库功能中的至少一项时,系统才会默认启用 Schema 延迟删除,以确保这些流程能够正常执行。
该功能没有独立的配置项开关,其启停完全由上述功能的状态控制。
您可以通过以下方式判断当前集群是否开启了相关功能,从而间接判断延迟删除是否生效:
- 备份状态:查询系统表
__all_virtual_backup_info,指定tenant_id为sys或用户租户 ID。
-- 备份状态,`STOP` 以外通常表示正在进行备份
SELECT name, value
FROM oceanbase.__all_virtual_backup_info
WHERE tenant_id = xxx AND name = 'backup_status';
- 归档状态:查询系统视图
CDB_OB_BACKUP_ARCHIVELOG,指定tenant_id为sys或用户租户 ID。
-- 归档状态,`STOP` 以外通常表示正在进行归档
SELECT TENANT_ID, STATUS
FROM oceanbase.CDB_OB_BACKUP_ARCHIVELOG
WHERE tenant_id = xxx;
- 备库状态:查询系统视图
V$OB_CLUSTER和V$OB_STANDBY_STATUS,判断是否存在备库。
-- 查看当前集群状态
SELECT * FROM oceanbase.V$OB_CLUSTER;
-- 查询结果为空表示没有备库
SELECT * FROM oceanbase.V$OB_STANDBY_STATUS;
总体流程
Schema 延迟删除主要分为以下三个步骤:
- 标记为待删除:当执行
DROP操作时,系统不会立即删除 Schema,而是将其表名修改为DELAY_DELETE形式以示区别。此时,在__all_table_history表中的is_deleted列仍为0。 - 标记为可删除:一个后台任务会定期调度,检查该 Schema 信息是否可以被安全删除。如果满足删除条件,则将该 Schema 在历史表中的
is_deleted列标记为1。 - 物理删除:
schema history recycler后台线程根据is_deleted = 1的标记,决定是否将这些行从历史表中真正物理删除。
流程示意图如下:

详细细节
本节主要阐述上述流程中的第二步,即后台任务如何判断并标记 Schema 为可删除状态。
调度机制
- 该后台任务的默认调度周期为 10 分钟。
- 每轮调度最多标记 100 个 Schema 信息为
deleted。 - 如果一轮处理完成后,发现仍有超过 100 个待处理任务,系统会将下一轮的调度周期缩短至 10 秒,以加速处理。
- 当某一轮处理的任务数少于 100 个时,调度周期会恢复为默认的 10 分钟。
标记为可删除(is_deleted = 1)的条件
一个 Schema 被标记为可删除,需要同时满足以下条件:
- 状态为已删除:该 Schema 必须是已删除状态。这对应总体流程的第一步,系统会设置其
drop_schema_version > 0。 - 版本足够旧:该 Schema 的
drop_schema_version小于等于 后台计算出的recycle_schema_version。这表示备份、归档等任务已不再需要此旧版本的 Schema。 - 分区已处理:对于有分区的表,还需要满足“待垃圾回收的分区都已经处理完毕”的条件(通过检查
__all_tenant_gc_partition_info等系统表来确认)。
Schema 延迟删除的影响
- 空间占用:会导致已删除的 Schema 信息在系统中残留一段时间,占用额外的存储空间。
- 潜在报错:在某些情况下,对已删除但尚未被清理的 Schema 进行查询或操作,可能会引发报错(具体案例可参考相关工单)。
适用版本
OceanBase 数据库 3.x 版本。
拓展
分区延迟删除 功能通过配置项 gc_wait_archive 控制。该功能与本文所述的 Schema 延迟删除没有直接关联,但同样是为了保障备份和归档任务的完整性而设计。其主要目的是在确保数据安全的前提下,释放内存、磁盘空间并减少分区数量。具体信息可参考相关文档和配置项说明。