---
title: Truncate 后执行 INSERT 发生数据丢失-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于Truncate 后执行 INSERT 发生数据丢失相关的常见问题和使用技巧，帮助您快速解决Truncate 后执行 INSERT 发生数据丢失的难题。
---
切换语言

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

划线反馈

# Truncate 后执行 INSERT 发生数据丢失

更新时间：2026-05-28 02:06

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

## 适用版本

OceanBase 数据库 V2.x、3.x 版本。

## 问题现象

业务逻辑中先 Truncate Table，再执行 INSERT，然后 SELECT 查询时发现 INSERT 的数据丢失了。

## 问题原因

DDL 执行导致的 schema 刷新是异步操作，INSERT 插入到了即将被删除的表上。

DDL 执行完成持久化后，RS 通知各 observer 异步刷新 schema，异步刷新 schema 成功与否不影响用户的 DDL 执行结果。当 DDL 返回成功时，可能存在部分机器的 schema 仍是落后的情况，如果用户请求被发送到 schema 落后的机器上，则可能产生执行报错等各类异常。

目前 OceanBase 数据库在同一 session 上执行的 DDL、DML 和不同 session 的 DDL 和 DML 都无法保证满足因果序，这导致 DDL 返回成功时，用户后续执行的 DML 行为未决。

## 解决方法

在 V3.2.4 版本，OceanBase 数据库引入 DDL 同步刷新 schema 的能力，保证 DDL 返回成功时，对应租户的可用机器确保刷到最新的 schema。该功能由组户级配置项 `_enable_sync_ddl` 来控制。

开启同步 schema 刷新。

- 系统租户下执行。

  ```shell
  obclient> alter system set _enable_sync_ddl = 'True' tenant = 'xxxx';

  ```
 - 普通租户下执行。

  ```shell
  obclient> alter system set _enable_sync_ddl = 'True';

  ```

  #### 注意

  开启该功能会有如下副作用：

     - DDL 持久化 schema 成功后需要同步等机器 schema 刷新的结果，部分机器 schema 刷新失败或者超时会导致 DDL 误报失败。
     - 由于 DDL 需要等机器 schema 刷新结果，会导致 DDL 执行速度变慢，特别是在批量导入 DDL 的场景，比如 OMS 结构迁移。

对于 3.2.4 之前的版本，需应用控制 DDL 与 DML 的执行节奏，在 DDL 执行成功后延迟1秒以上再执行 DML。

上一篇

[INSERT IGNORE with global index 不支持](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000209997)

下一篇

[批量插入数据报错：Parameter index out of bonds 的原因和解决方法](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000664388) ![有帮助](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) 咨询热线
