首批通过分布式安全可靠测评,为关键业务系统打造
手动清理备份的数据(集群级别)
更新时间:2026-06-13 11:58:13
数据备份成功后,您可以根据业务需要,手动清理备份的数据。当前仅支持集群级别备份数据的手动清理。在日常使用中,建议您通过自动清理的方式来清理备份数据。
手动清理方式主要通过 ALTER SYSTEM 命令清理指定的 backup_set_id、backup_piece_id、round_id 或者过期的数据。
注意事项
由于日志归档数据的清理依赖数据的备份,在清理日志归档数据前,请确认已存在数据备份文件。如果没有数据备份文件,则无法清理日志归档数据。
对于备份目的端为 NFS 的场景,在进行备份数据的清理时,系统会直接删除满足要求的备份文件;对于备份目的端为 OSS 的场景,其备份文件的清理方式取决于
backup_dest中delete_mode参数的值,详细信息请参见 备份前准备。
清理指定的备份数据
OceanBase 数据库支持清理指定的 backup_set_id、backup_piece_id、backup_round_id 的备份数据。
使用
root用户登录数据库的sys租户。分别查询视图
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的查询示例如下: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。获取日志备份的
round_idobclient> 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。根据日志备份的
round_id获取对应的backup_piece_id视图
oceanbase.CDB_OB_BACKUP_PIECE_FILES的查询示例如下: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。
根据清理场景,选择合适的命令,清理备份数据。
清理指定
backup_set_id的数据obclient> ALTER SYSTEM DELETE BACKUPSET backup_set_id;例如,执行以下命令,表示清理
backup_set_id为1的备份数据。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 中的所有数据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的归档数据obclient> ALTER SYSTEM DELETE BACKUPPIECE backup_piece_id;使用
DELETE BACKUPPIECE命令清理备份时,有以下限制:仅当日志备份开启 Piece 功能才能使用此命令清理指定的 Piece。
日志备份开启 Piece 功能的相关操作请参见 开启基于日志分片的备份。
不允许清理处于非 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 参数的使用示例及详细信息请参见 自动清理备份的数据(集群级别)。
有关 backup_dest_option 配置项的更多说明信息请参见 backup_dest_option。
手动清理过期的备份数据
使用
root用户登录数据库的sys租户。执行以下命令,立即清理过期的备份数据。
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配置项设置的个数,则不能清理数据。
后续操作
除了通过手动的方式清理备份数据外,您也可以设置系统自动清理备份数据,详细信息参见 自动清理备份的数据(集群级别)。
OceanBase 数据库支持取消清理备份数据,详细操作请参见 停止清理备份数据(集群级别)。