---
title: "手动清理备份的数据（集群级别） | OceanBase 文档中心"
description: 手动清理备份的数据（集群级别） 数据备份成功后，您可以根据业务需要，手动清理备份的数据。当前仅支持集群级别备份数据的手动清理。在日常使用中，建议您通过自动清理的方式来清理备份数据。 手动清理方式主要通过 ALTER SYSTEM 命令清理指定的 backup_set_id 、 backup_piece_id 、 ro…
---
切换语言

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

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.2.4 企业版 LTS

# 手动清理备份的数据（集群级别）

更新时间：2026-06-13 11:58:13

数据备份成功后，您可以根据业务需要，手动清理备份的数据。当前仅支持集群级别备份数据的手动清理。在日常使用中，建议您通过自动清理的方式来清理备份数据。

手动清理方式主要通过 `ALTER SYSTEM` 命令清理指定的 `backup_set_id`、`backup_piece_id`、`round_id` 或者过期的数据。

## 注意事项

- 由于日志归档数据的清理依赖数据的备份，在清理日志归档数据前，请确认已存在数据备份文件。如果没有数据备份文件，则无法清理日志归档数据。
 - 对于备份目的端为 NFS 的场景，在进行备份数据的清理时，系统会直接删除满足要求的备份文件；对于备份目的端为 OSS 的场景，其备份文件的清理方式取决于 `backup_dest` 中 `delete_mode` 参数的值，详细信息请参见 [备份前准备](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000945704)。

## 清理指定的备份数据

OceanBase 数据库支持清理指定的 `backup_set_id`、`backup_piece_id`、`backup_round_id` 的备份数据。

1. 使用 `root` 用户登录数据库的 `sys` 租户。
 2. 分别查询视图 `CDB_OB_BACKUP_SET_FILES`、`CDB_OB_BACKUP_ARCHIVELOG_SUMMARY` 和 `CDB_OB_BACKUP_PIECE_FILES`，找到待清理的备份数据的 `backup_set_id`、`round_id` 和 `backup_piece_id`。

      - 获取数据备份的 `backup_set_id`

       视图 `CDB_OB_BACKUP_SET_FILES` 的查询示例如下：

       ```sql
       obclient> SELECT * FROM oceanbase.CDB_OB_BACKUP_SET_FILES WHERE tenant_id=1 AND copy_id=0 AND file_status != 'DELETED';
       +-------------+-----------+--------+---------+-------------+-----------------+---------+-------------+----------------------------+----------------------------+------------------+------+------------+------------+--------------+-------------------+-------------------+----------------------+---------------------------+--------------------+
       | INCARNATION | TENANT_ID | BS_KEY | COPY_ID | BACKUP_TYPE | ENCRYPTION_MODE | STATUS  | FILE_STATUS | START_TIME                 | COMPLETION_TIME            | ELAPSED_SECONDES | KEEP | KEEP_UNTIL | COMPRESSED | OUTPUT_BYTES | OUTPUT_RATE_BYTES | COMPRESSION_RATIO | OUTPUT_BYTES_DISPLAY | OUTPUT_RATE_BYTES_DISPLAY | TIME_TAKEN_DISPLAY |
       +-------------+-----------+--------+---------+-------------+-----------------+---------+-------------+----------------------------+----------------------------+------------------+------+------------+------------+--------------+-------------------+-------------------+----------------------+---------------------------+--------------------+
       |           1 |         1 |      3 |       0 | D           | NONE            | SUCCESS | AVAILABLE   | 2022-10-28 11:19:56.883788 | 2022-10-28 11:19:59.629990 |                3 | NO   |            | NO         |      3376538 |      1229530.0928 |              0.02 | 3.22MB               | 1.17MB/S                  | 00:00:02.746202    |
       +-------------+-----------+--------+---------+-------------+-----------------+---------+-------------+----------------------------+----------------------------+------------------+------+------------+------------+--------------+-------------------+-------------------+----------------------+---------------------------+--------------------+
       1 row in set

       ```

       查询结果中：

            - `BS_KEY` ：表示数据备份的备份集 ID 即 `backup_set_id`。
            - `COPY_ID`：数据备份任务的 `COPY_ID` 值均为 `0`。

       `CDB_OB_BACKUP_SET_FILES`视图各字段的详细说明请参见 [oceanbase.CDB_OB_BACKUP_SET_FILES](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000945465)。
      - 获取日志备份的 `round_id`

       ```sql
       obclient> SELECT * FROM oceanbase.CDB_OB_BACKUP_ARCHIVELOG_SUMMARY WHERE tenant_id=1;
       +-------------+-------------------+-----------+--------+----------------+-----------------+----------------------------+----------------------------+-------------+--------------+-------------------+---------------------+----------------------+
       | INCARNATION | LOG_ARCHIVE_ROUND | TENANT_ID | STATUS | START_PIECE_ID | BACKUP_PIECE_ID | MIN_FIRST_TIME             | MAX_NEXT_TIME              | INPUT_BYTES | OUTPUT_BYTES | COMPRESSION_RATIO | INPUT_BYTES_DISPLAY | OUTPUT_BYTES_DISPLAY |
       +-------------+-------------------+-----------+--------+----------------+-----------------+----------------------------+----------------------------+-------------+--------------+-------------------+---------------------+----------------------+
       |           1 |                 1 |         1 | STOP   |              0 |               0 | 2022-10-24 18:02:10.951125 | 2022-10-24 19:43:06.867056 |           0 |            0 |              NULL | 0.00MB              | 0.00MB               |
       |           1 |                 2 |         1 | DOING  |              0 |               0 | 2022-10-24 19:43:27.652015 | 2022-10-24 19:46:39.949493 |           0 |            0 |              NULL | 0.00MB              | 0.00MB               |
       +-------------+-------------------+-----------+--------+----------------+-----------------+----------------------------+----------------------------+-------------+--------------+-------------------+---------------------+----------------------+
       2 rows in set

       ```

       其中，`LOG_ARCHIVE_ROUND` 即为 `round_id`，处于 `stop` 状态的 Round 才允许被清理。

       `CDB_OB_BACKUP__ARCHIVELOG_SUMMARY` 视图各字段的详细说明请参见 [oceanbase.CDB_OB_BACKUP_ARCHIVELOG_SUMMARY](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000945437)。
      - 根据日志备份的 `round_id` 获取对应的 `backup_piece_id`

       视图 `oceanbase.CDB_OB_BACKUP_PIECE_FILES` 的查询示例如下：

       ```sql
       obclient> SELECT * FROM oceanbase.CDB_OB_BACKUP_PIECE_FILES WHERE tenant_id=1 AND round_id=1 and copy_id=0 AND status!='ACTIVE' AND file_status!='DELETED';
       +-------------+-----------+----------+-----------------+---------+-------------+----------------------------+----------------------------+----------------------------+--------+-------------+------------+----------------+
       | INCARNATION | TENANT_ID | ROUND_ID | BACKUP_PIECE_ID | COPY_ID | CREATE_DATE | START_TS                   | CHECKPOINT_TS              | MAX_TS                     | STATUS | FILE_STATUS | COMPATIBLE | START_PIECE_ID |
       +-------------+-----------+----------+-----------------+---------+-------------+----------------------------+----------------------------+----------------------------+--------+-------------+------------+----------------+
       |           1 |         1 |        1 |               0 |       0 |    20221028 | 2022-10-28 10:58:38.325595 | 2022-10-28 14:50:29.834598 | 2022-10-28 14:50:39.280049 | FROZEN | AVAILABLE   |          1 |              0 |
       +-------------+-----------+----------+-----------------+---------+-------------+----------------------------+----------------------------+----------------------------+--------+-------------+------------+----------------+
       1 row in set

       ```

       查询结果中：

            - `ROUND_ID`：表示日志备份开启的轮次 `round_id`。
            - `BACKUP_PIECE_ID`：表示日志备份的切片 ID，日志备份开启 Piece 时，`backup_piece_id>0`；当日志备份不开启 Piece 时，`backup_piece_id=0`。
            - `COPY_ID`：日志备份任务的 `COPY_ID` 值均为 `0`。此视图包含了备份和备份备份的任务信息。

       `CDB_OB_BACKUP_PIECE_FILES` 视图各字段的详细说明请参见 [oceanbase.CDB_OB_BACKUP_PIECE_FILES](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000945464)。
 3. 根据清理场景，选择合适的命令，清理备份数据。

      - 清理指定 `backup_set_id` 的数据

       ```sql
       obclient> ALTER SYSTEM DELETE BACKUPSET backup_set_id;

       ```

       例如，执行以下命令，表示清理 `backup_set_id` 为 `1` 的备份数据。

       ```sql
       obclient> ALTER SYSTEM DELETE BACKUPSET 1;

       ```

       使用 `DELETE BACKUPSET` 命令清理备份时，有以下限制：

            - 当待清理的 `backup_set_id` 的 `backup_dest` 与 `backup_dest` 配置项中设置的备份目的端相同时，清理数据的原则是，至少保留一份完整的有效备份数据。当待清理的 `backup_set_id` 所在的路径与 `backup_dest` 配置项中设置的备份目的端不相同时，会清理全部数据。
            - 当待清理的 `backup_set_id` 的 `backup_dest` 与 `backup_dest` 配置项中设置的备份目的端相同时，仅支持 `backup_set` 的顺序清理。例如，对于 `backup_set_id` 为 `1`、`2`、`3` 的 `backup_set`，必须先清理 `1` 后，再清理 `2` 和 `3`。当待清理的 `backup_set_id` 所在的路径与 `backup_dest` 配置项中设置的备份目的端不相同时，清理 `backup_set` 的顺序不受限制。
            - 清理不存在的 `backup_set_id` 会失败，清理正在备份的 `backup_set_id` 也会失败。
      - 清理指定 `round_id` 的日志备份的 Round 中的所有数据

       ```sql
       obclient> ALTER SYSTEM DELETE BACKUPROUND round_id;

       ```

       使用 `DELETE BACKUPROUND` 命令清理备份与使用 `DELETE BACKUPPIECE` 命令的限制一致：

            - 仅允许清理处于 `Stop` 状态的 `backup_round`。
            - 当 `round_id` 的 `backup_dest` 与 `backup_dest` 配置项中设置的备份目的端相同，且已有的备份数据没有完全覆盖 `backup_round` 时，对应的 `round_id` 不允许清理。当 `round_id` 的 `backup_dest` 与 `backup_dest` 配置项中设置的备份目的端不相同时，无论已有的备份数据是否完全覆盖 `backup_round` ，对应的 `round_id` 均可以清理。
            - 当 `round_id` 的 `backup_dest` 与 `backup_dest` 配置项中设置的备份目的端相同时，仅支持 `round_id` 的顺序清理，防止用户因清理 `backup_round` 造成日志不连续。例如，对于 `round_id` 为 `1`、`2`、`3` 的 `backup_round`，必须先清理 `1` 后，再清理 `2` 和 `3`。当 `round_id` 的 `backup_dest` 与 `backup_dest` 配置项中设置的备份目的端不相同时，清理 `round_id` 的顺序不受限制。
      - 清理指定 `backup_piece_id` 的归档数据

       ```sql
       obclient> ALTER SYSTEM DELETE BACKUPPIECE backup_piece_id;

       ```

       使用 `DELETE BACKUPPIECE` 命令清理备份时，有以下限制：

            - 仅当日志备份开启 Piece 功能才能使用此命令清理指定的 Piece。

             日志备份开启 Piece 功能的相关操作请参见 [开启基于日志分片的备份](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000946190)。
            - 不允许清理处于非 Frozen、非 Inactive 状态的 `backup_piece`。
            - 当 `backup_piece_id` 的 `backup_dest` 与 `backup_dest` 配置项中设置的备份目的端相同，且已有的备份数据没有完全覆盖 `backup_piece` 时，对应的 `backup_piece_id` 不允许清理。当 `backup_piece_id` 的 `backup_dest` 与 `backup_dest` 配置项中设置的备份目的端不相同时，无论已有的备份数据是否完全覆盖 `backup_piece` ，对应的 `backup_piece_id` 均可以清理。
            - 当 `backup_piece_id` 的 `backup_dest` 与 `backup_dest` 配置项中设置的备份目的端相同时，仅支持 `backup_piece_id` 的顺序清理，防止用户因清理 `backup_piece` 造成日志不连续。例如，对于 `backup_piece_id` 为 `1`、`2`、`3` 的 `backup_piece`，必须先清理 `1` 后，再清理 `2` 和 `3`。当 `backup_piece_id` 的 `backup_dest` 与 `backup_dest` 配置项中设置的备份目的端不相同时，清理 `backup_piece_id` 的顺序不受限制。

## 清理过期的备份数据

### 清理前准备

手动清理已经过期的备份数据前，需要先配置备份数据的清理策略，即在 `backup_dest_option` 配置项中添加 `recovery_window` 参数的配置或设置配置项 `backup_recovery_window`。

`recovery_window` 参数用于控制备份数据可恢复的时间窗口，以及作为判断备份数据是否过期的依据。

通过 `recovery_window` 判断数据备份过期的方式： 比满足 `当前时间 - 备份时间点 >= recovery_window` 条件的最新备份更早的所有备份都被视为过期。

例如，设置 `recovery_window='7d'` 表示从当前时间往前推，7 天内的数据保证可恢复，且与这 7 天数据恢复无关的备份数据将被视为过期的数据。

配置项 `backup_recovery_window` 的功能与配置项 `backup_dest_option` 中的 `recovery_window` 参数相同。`recovery_window` 参数的使用示例及详细信息请参见 [自动清理备份的数据（集群级别）](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000946194)。

有关 `backup_dest_option` 配置项的更多说明信息请参见 [backup_dest_option](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000944930)。

### 手动清理过期的备份数据

1. 使用 `root` 用户登录数据库的 `sys` 租户。
 2. 执行以下命令，立即清理过期的备份数据。

   ```sql
   obclient> ALTER SYSTEM DELETE OBSOLETE BACKUP;

   ```

   `DELETE OBSOLETE` 命令的使用限制如下：

      - 如果没有有效的 `backup_set` 或者仅有一份有效的 `backup_set`，则日志归档的数据切分 Piece 后不能被清理。
      - `DELETE OBSOLETE` 命令仅支持清理过期的备份数据，且过期数据所在的路径需要与配置项 `backup_dest` 的设置相同。对于更换过备份目的端的过期数据，请参见本节 **清理指定的备份数据**。
      - `DELETE OBSOLETE` 命令可以清理配置项对应的备份备份的数据。
      - 如果 `backup_copies` 的个数未达到 `backup_dest_option` 配置中 `backup_copies` 配置项设置的个数，则不能清理数据。

## 后续操作

除了通过手动的方式清理备份数据外，您也可以设置系统自动清理备份数据，详细信息参见 [自动清理备份的数据（集群级别）](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000946194)。

OceanBase 数据库支持取消清理备份数据，详细操作请参见 [停止清理备份数据（集群级别）](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000946197)。

 上一篇 下一篇 ![有帮助](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) 咨询热线
