清理备份数据 
===========================

数据备份成功后，您可以根据业务需要，参考本节选择合适的操作进行备份数据的清理。

当前 OceanBase 数据库提供了以下三种方式清理备份数据：

* 指定某一个备份的 `backup_set_id` 进行清理

  

* 手动触发过期数据的清理

  

* 自动进行过期数据的清理

  




清理指定备份 
---------------------------

1. 查询 `CDB_BACKUP_SET_DETAILS` 表，找到待删除的备份数据的 `backup_set_id`。

   `CDB_BACKUP_SET_DETAILS` 表展示了历史上备份的 `backup_set` 信息，包括 `backup_set_id` 和 `status`。

   其中，`status` 对应的状态目前有三种：
   * `COMPELETED`：表示备份数据清理完成

     
   
   * `FAILED`：表示备份数据清理失败

     
   
   * `DELETING`：表示某个 `backup_set_id` 的备份数据正在删除

     
   

   

2. 执行以下命令，清理备份数据。

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

   

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

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

   
   **说明**

   

   如果出现了 `9044` 的报错，则表示数据清理任务已开始，不允许再次发起清理任务。
   




手动清理过期数据 
-----------------------------

1. 根据以下命令，设置备份数据的过期时间。

   ```sql
   ALTER SYSTEM SET backup_recovery_window = <过期时间>;
   ```

   

   其中，`backup_recovery_window` 是一个配置项，用于表示成功备份的数据可以提供恢复的时间窗口，默认值为 `0`，表示永久保留；建议设置为 `'7d'`，表示备份数据保留一周后过期。对于手动清理的场景，备份数据过期后，您可以手动清理过期的备份数据。

   示例如下：

   ```sql
   obclient> ALTER SYSTEM SET backup_recovery_window = '7d';
   ```

   

2. 执行以下命令，立即清理过期的备份数据。

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

   
   **说明**

   

   如果出现了 `9044` 的报错，则表示数据清理任务已开始，不允许再次发起清理任务。
   




自动清理过期数据 
-----------------------------

**方法一** ：通过配置项开启自动清理功能

1. 根据以下命令，设置备份数据的过期时间。

   ```sql
   ALTER SYSTEM SET backup_recovery_window = <过期时间>;
   ```

   

   其中，`backup_recovery_window` 是一个配置项，用于表示成功备份的数据可以提供恢复的时间窗口，默认值为 `0`，表示永久保留；建议设置为 `'7d'`，表示备份数据保留一周后过期。对于自动清理场景，备份数据过期后系统会自动清理备份的数据。

   示例如下：

   ```sql
   obclient> ALTER SYSTEM SET backup_recovery_window = '7d';
   ```

   

2. 执行以下命令，开启备份数据的自动清理功能。

   ```sql
   obclient> ALTER SYSTEM SET auto_delete_expired_backup = 'True';
   ```

   
   **说明**

   

   如果出现了 `9044` 的报错，则表示数据清理任务已开始，不允许再次发起清理任务。
   




**方法二** ：通过 OCP 开启自动过期备份清理开关

在 OCP 上创建备份策略时，您可以开启 **过期备份清理调度配置** 开关，待备份数据过期后系统会自动清理过期的数据。
