首批通过分布式安全可靠测评,为关键业务系统打造
手动清理指定的备份或归档数据
更新时间:2026-06-18 14:03:05
因业务需要,期望清理一些特定的备份或归档时,可以参考本文档手动清理指定的数据备份集或日志归档 Piece。
使用限制
手动清理指定的备份或归档数据时,要求被操作的用户租户未配置自动清理策略。如果配置了自动清理则无法进行手动清理。
对于仅开启了日志归档,未配置数据备份路径的场景,不允许通过手动方式清理指定的日志归档 Piece,用户只能通过将自动清理策略配置为
log_only的方式来实现日志归档 Piece 的清理。配置自动清理策略的详细操作,参见 自动清理过期备份。
清理指定的数据备份集
注意事项
清理指定的数据备份集时,需要注意以下事项:
不能破坏数据备份之间的依赖关系。如果某个数据备份被关联的增量备份所依赖,则被依赖的数据备份只能在所有依赖它的增量备份被删除后,才能被删除。
如果需要同时指定多个
BACKUP_SET_ID进行清理,则要求所有BACKUP_SET_ID均在同一个备份路径下。不支持在同一条命令中清理多个路径下的数据备份。对于当前正在使用的备份路径,需要至少保留一份最新的且能够用于恢复的全量数据备份。即,保留一份可用于恢复的全量备份后,才可以删除在该备份集之前的其它备份集。
如果待删除的数据备份集不在当前正在使用的备份路径中,需要保证 OceanBase 数据库有对应备份路径的访问权限。
系统租户清理指定用户租户的指定数据备份集
使用
root用户登录集群的sys租户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A查看租户信息,获取租户的
TENANT_ID。本文档以租户为
mysql001为例,查询示例如下:obclient(root@sys)[(none)]> SELECT TENANT_ID, TENANT_NAME, TENANT_TYPE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mysql001';查询结果如下:
+-----------+-------------+-------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | +-----------+-------------+-------------+ | 1002 | mysql001 | USER | +-----------+-------------+-------------+ 1 row in set根据查询结果,该租户的
TENANT_ID为 1002。获取待清理的备份集的
backup_set_id。obclient(root@sys)[(none)]> SELECT TENANT_ID, BACKUP_SET_ID, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, STATUS, FILE_STATUS, START_REPLAY_SCN, START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, MIN_RESTORE_SCN_DISPLAY, PATH FROM oceanbase.CDB_OB_BACKUP_SET_FILES WHERE TENANT_ID = 1002;查询结果如下:
+-----------+---------------+-------------+-------------------------+------------------------+---------+-------------+---------------------+----------------------------+---------------------+-------------------------------+-------------------------------+ | TENANT_ID | BACKUP_SET_ID | BACKUP_TYPE | PREV_FULL_BACKUP_SET_ID | PREV_INC_BACKUP_SET_ID | STATUS | FILE_STATUS | START_REPLAY_SCN | START_REPLAY_SCN_DISPLAY | MIN_RESTORE_SCN | MIN_RESTORE_SCN_DISPLAY | PATH | +-----------+---------------+-------------+-------------------------+------------------------+---------+-------------+---------------------+----------------------------+---------------------+-------------------------------+-------------------------------+ | 1002 | 1 | FULL | 0 | 0 | SUCCESS | AVAILABLE | 1757326402739265000 | 2025-09-08 18:13:22.739265 | 1757326563751672000 | 2025-09-08 18:16:03.751672000 | file:///data/nfs/backup/data | | 1002 | 2 | INC | 1 | 1 | SUCCESS | AVAILABLE | 1757326402739265000 | 2025-09-08 18:13:22.739265 | 1757326695246191000 | 2025-09-08 18:18:15.246191000 | file:///data/nfs/backup/data | | 1002 | 3 | FULL | 0 | 0 | SUCCESS | AVAILABLE | 1757326402739265000 | 2025-09-08 18:13:22.739265 | 1757326826319880000 | 2025-09-08 18:20:26.319880000 | file:///data/nfs/backup/data | | 1002 | 4 | FULL | 0 | 0 | SUCCESS | AVAILABLE | 1757326402739265000 | 2025-09-08 18:13:22.739265 | 1757326961311034000 | 2025-09-08 18:22:41.311034000 | file:///data/nfs/backup/data | | 1002 | 5 | FULL | 0 | 0 | SUCCESS | AVAILABLE | 1757326402739265000 | 2025-09-08 18:13:22.739265 | 1757327092469081000 | 2025-09-08 18:24:52.469081000 | file:///data/nfs/backup/data | | 1002 | 6 | FULL | 0 | 0 | SUCCESS | AVAILABLE | 1757326402739265000 | 2025-09-08 18:13:22.739265 | 1757327219591390000 | 2025-09-08 18:26:59.591390000 | file:///data/nfs/backup/data | +-----------+---------------+-------------+-------------------------+------------------------+---------+-------------+---------------------+----------------------------+---------------------+-------------------------------+-------------------------------+ 6 rows in set根据查询结果可知,租户 ID 为
1002的租户下,有 5 份全量备份和 1 份增量备份均在同一个备份路径下。其中:BACKUP_SET_ID为 1、3、4、5、6 的备份为全量备份。BACKUP_SET_ID为 2 的备份为增量备份,且其依赖BACKUP_SET_ID为 1 的全量备份。
按照清理要求:
在
BACKUP_SET_ID为 2 的增量备份未删除前,不能删除BACKUP_SET_ID为 1 的全量备份。如果待删除的备份集所在的备份路径为租户当前正在使用的备份路径,则需要保留一份最新的并且能够用于恢复的全量备份数据,其之前的数据备份可以删除。
一份备份是否“可用于恢复”,关键在于其所需的日志归档是否完整。例如,在本示例中,可以通过以下方式判断全量备份
BACKUP_SET_ID6 是否能够用于恢复:- 如果
BACKUP_SET_ID6 本身包含了补偿日志(发起数据备份时指定了PLUS ARCHIVELOG参数),则该备份集可直接用于恢复,在删除备份集时需要保留BACKUP_SET_ID6,可以删除该备份之前的其他备份集。 - 如果
BACKUP_SET_ID6 未包含补偿日志(发起数据备份时未指定PLUS ARCHIVELOG参数),则需要检查当前归档路径下的日志归档 Piece,确保存在从该备份集的START_REPLAY_SCN到MIN_RESTORE_SCN的完整且连续的日志归档 Piece。如果不存在满足条件的日志归档 Piece,则表示BACKUP_SET_ID6 不能用于恢复,需要按照相同的方法再确认上一个全量备份BACKUP_SET_ID5 是否能够用于恢复,以此类推。
- 如果
执行以下命令,删除指定的数据备份。
语句如下:
ALTER SYSTEM DELETE BACKUPSET backup_set_id[,backup_set_id,...] TENANT [=] tenant_name;其中:
backup_set_id:指定待删除的备份集的 ID,单条命令中支持同时指定多个数据备份集。同时指定多个backup_set_id进行清理时,要求所有backup_set_id均在同一个备份路径下。不支持在同一条命令中清理多个路径下的数据备份。tenant_name:指定待删除备份集的租户。
示例如下:
删除租户
mysql001的backup_set_id为 3 的数据备份集。obclient(root@sys)[(none)]> ALTER SYSTEM DELETE BACKUPSET 3 TENANT = mysql001;同时删除租户
mysql001的backup_set_id为 1、2、4 的 3 个数据备份集。obclient(root@sys)[(none)]> ALTER SYSTEM DELETE BACKUPSET 1,2,4 TENANT = mysql001;
用户租户清理本租户指定的数据备份集
用户租户的租户管理员登录到数据库。
说明
MySQL 租户的管理员用户为
root用户,Oracle 租户的管理员用户为SYS用户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql001#obdemo -p***** -A获取待清理的备份集的
backup_set_id。MySQL 模式Oracle 模式MySQL 模式下的查询示例如下:
obclient(root@mysql001)[(none)]> SELECT BACKUP_SET_ID, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, STATUS, FILE_STATUS, START_REPLAY_SCN, START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, MIN_RESTORE_SCN_DISPLAY, PATH FROM oceanbase.DBA_OB_BACKUP_SET_FILES;Oracle 模式下的查询示例如下:
obclient(SYS@oracle001)[SYS]> SELECT BACKUP_SET_ID, BACKUP_TYPE, PREV_FULL_BACKUP_SET_ID, PREV_INC_BACKUP_SET_ID, STATUS, FILE_STATUS, START_REPLAY_SCN, START_REPLAY_SCN_DISPLAY, MIN_RESTORE_SCN, MIN_RESTORE_SCN_DISPLAY, PATH FROM SYS.DBA_OB_BACKUP_SET_FILES;执行以下命令,删除指定的数据备份。
语句如下:
ALTER SYSTEM DELETE BACKUPSET backup_set_id[,backup_set_id,...];其中:
backup_set_id:指定待删除的备份集的 ID,单条命令中支持同时指定多个数据备份集,不同backup_set_id之间使用英文逗号间隔。同时指定多个backup_set_id进行清理时,要求所有backup_set_id均在同一个备份路径下。不支持在同一条命令中清理多个路径下的数据备份。tenant_name:指定待删除备份集的租户。
示例如下:
删除本租户
backup_set_id为 3 的数据备份集。obclient> ALTER SYSTEM DELETE BACKUPSET 3;同时删除本租户
backup_set_id为 1、2、4 的 3 个数据备份集。obclient> ALTER SYSTEM DELETE BACKUPSET 1,2,4;
清理指定的日志归档 Piece
注意事项
清理指定的日志归档 Piece 时,需要注意以下事项:
需要按照顺序清理日志归档 Piece。
清理当前归档路径中的 Piece 时,要求被清理的 Piece 不被当前数据备份路径中的任何数据备份所依赖。
判断待清理的 Piece 是否被某个数据备份集所依赖的方法如下:
在租户当前的备份路径中,找到一个时间比较长远的数据备份集。
查看该数据备份集的
START_REPLAY_SCN。系统租户
obclient(root@sys)[(none)]> SELECT * FROM oceanbase.CDB_OB_BACKUP_SET_FILES WHERE TENANT_ID = tenant_id AND BACKUP_SET_ID = set_id;用户租户
obclient(root@mysql001)[(none)]> SELECT * FROM oceanbase.DBA_OB_BACKUP_SET_FILES WHERE BACKUP_SET_ID = set_id;obclient(SYSt@oracl001)[SYS]> SELECT * FROM SYS.DBA_OB_BACKUP_SET_FILES WHERE BACKUP_SET_ID = set_id;
详细操作及说明,参见 查看数据备份结果。
查看待清理的 Piece 的
END_SCN。系统租户
obclient(root@sys)[(none)]> SELECT * FROM oceanbase.CDB_OB_ARCHIVELOG_PIECE_FILES WHERE TENANT_ID = tenant_id AND PIECE_ID = piece_id;用户租户
obclient(root@mysql001)[(none)]> SELECT * FROM oceanbase.DBA_OB_ARCHIVELOG_PIECE_FILES WHERE PIECE_ID = piece_id;obclient(SYSt@oracl001)[SYS]> SELECT * FROM SYS.DBA_OB_ARCHIVELOG_PIECE_FILES WHERE PIECE_ID = piece_id;
详细操作及说明,可参见 查看 Piece 信息。
将获取到的信息进行对比,如果待清理的 Piece 的
END_SCN大于或等于当前备份路径中某个数据备份的START_REPLAY_SCN,则表示该 Piece 被此数据备份集所依赖。
如果需要同时指定多个
PIECE_ID进行清理,则要求所有PIECE_ID均在同一个归档路径下。不支持在同一条命令中清理多个路径下的日志归档 Piece。
系统租户清理指定租户的指定日志归档 Piece
使用
root用户登录集群的sys租户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@sys#obdemo -p***** -A查看租户信息,获取租户的
TENANT_ID。本文档以租户为
mysql001为例,查询示例如下:obclient(root@sys)[(none)]> SELECT TENANT_ID, TENANT_NAME, TENANT_TYPE FROM oceanbase.DBA_OB_TENANTS WHERE TENANT_NAME = 'mysql001';查询结果如下:
+-----------+-------------+-------------+ | TENANT_ID | TENANT_NAME | TENANT_TYPE | +-----------+-------------+-------------+ | 1002 | mysql001 | USER | +-----------+-------------+-------------+ 1 row in set根据查询结果,该租户的
TENANT_ID为 1002。获取待清理的日志归档 Piece 的
piece_id。obclient(root@sys)[(none)]> SELECT TENANT_ID, ROUND_ID, PIECE_ID, STATUS, FILE_STATUS, START_SCN, START_SCN_DISPLAY, END_SCN, END_SCN_DISPLAY, PATH FROM oceanbase.CDB_OB_ARCHIVELOG_PIECE_FILES WHERE TENANT_ID = 1002;查询结果如下:
+-----------+----------+----------+--------+-------------+---------------------+----------------------------+---------------------+----------------------------+----------------------------------+ | TENANT_ID | ROUND_ID | PIECE_ID | STATUS | FILE_STATUS | START_SCN | START_SCN_DISPLAY | END_SCN | END_SCN_DISPLAY | PATH | +-----------+----------+----------+--------+-------------+---------------------+----------------------------+---------------------+----------------------------+----------------------------------+ | 1002 | 1 | 1 | FROZEN | AVAILABLE | 1757333158537074000 | 2025-09-08 20:05:58.537074 | 1757333218537074000 | 2025-09-08 20:06:58.537074 | file:///data/nfs/backup/archive1 | | 1002 | 1 | 2 | FROZEN | AVAILABLE | 1757333218537074000 | 2025-09-08 20:06:58.537074 | 1757333278537074000 | 2025-09-08 20:07:58.537074 | file:///data/nfs/backup/archive1 | | 1002 | 1 | 3 | FROZEN | AVAILABLE | 1757333278537074000 | 2025-09-08 20:07:58.537074 | 1757333338537074000 | 2025-09-08 20:08:58.537074 | file:///data/nfs/backup/archive1 | | 1002 | 1 | 4 | ACTIVE | AVAILABLE | 1757333338537074000 | 2025-09-08 20:08:58.537074 | 1757333398537074000 | 2025-09-08 20:09:58.537074 | file:///data/nfs/backup/archive1 | | 1002 | 2 | 5 | FROZEN | AVAILABLE | 1757333589335423000 | 2025-09-08 20:13:09.335423 | 1757333649335423000 | 2025-09-08 20:14:09.335423 | file:///data/nfs/backup/archive2 | | 1002 | 3 | 6 | FROZEN | AVAILABLE | 1757333769705693000 | 2025-09-08 20:16:09.705693 | 1757333829705693000 | 2025-09-08 20:17:09.705693 | file:///data/nfs/backup/archive3 | | 1002 | 3 | 7 | FROZEN | AVAILABLE | 1757333829705693000 | 2025-09-08 20:17:09.705693 | 1757333889705693000 | 2025-09-08 20:18:09.705693 | file:///data/nfs/backup/archive3 | | 1002 | 3 | 8 | ACTIVE | AVAILABLE | 1757333889705693000 | 2025-09-08 20:18:09.705693 | 1757333949705693000 | 2025-09-08 20:19:09.705693 | file:///data/nfs/backup/archive3 | | 1002 | 3 | 9 | FROZEN | AVAILABLE | 1757333949705693000 | 2025-09-08 20:19:09.705693 | 1757334009705693000 | 2025-09-08 20:20:09.705693 | file:///data/nfs/backup/archive3 | | 1002 | 3 | 10 | FROZEN | AVAILABLE | 1757334009705693000 | 2025-09-08 20:20:09.705693 | 1757334069705693000 | 2025-09-08 20:21:09.705693 | file:///data/nfs/backup/archive3 | +-----------+----------+----------+--------+-------------+---------------------+----------------------------+---------------------+----------------------------+----------------------------------+ 10 rows set根据查询结果可知,租户 ID 为
1002的租户下有 10 个日志归档 Piece,其中:PIECE_ID为 1、2、3、4 的日志归档 Piece 来源于同一归档路径file:///data/nfs/backup/archive1。PIECE_ID为 5 的日志归档 Piece 来源于归档路径file:///data/nfs/backup/archive2。PIECE_ID为 6、7、8、9、10 的日志归档 Piece 来源于归档路径file:///data/nfs/backup/archive3。
根据清理要求:
需要按顺序清理 Piece。例如,不能先清理
PIECE_ID为 2、3、4 中的一个或多个 Piece 之后,再清理PIECE_ID为 1 的 Piece;同样,也不能先清理PIECE_ID为 7、8、9、10 中的任意一个或多个 Piece 之后,再清理PIECE_ID为 6 的 Piece。可以按顺序同时清理其中的多个 Piece。例如,可以同时清理 1、2、3。
指定多个
PIECE_ID时,要求所有PIECE_ID均在同一个归档路径下。例如,不能同时清理PIECE_ID为 1、2、5 或 5、6、7 的 Piece。
执行以下命令,删除指定的日志归档 Piece。
语句如下:
ALTER SYSTEM DELETE ARCHIVELOG_PIECE piece_id[,piece_id,...] TENANT [=] tenant_name;其中:
piece_id:指定待删除的日志归档 Piece 的 ID,单条命令中支持同时指定多个 Piece。同时指定多个piece_id进行清理时,要求所有piece_id均在同一个备份路径下。不支持在同一条命令中清理多个路径下的日志归档 Piece。tenant_name:指定待删除日志归档 Piece 的租户。
示例如下:
删除租户
mysql001的piece_id为 5 的日志归档 Piece。obclient(root@sys)[(none)]> ALTER SYSTEM DELETE ARCHIVELOG_PIECE 5 TENANT = mysql001;同时删除租户
mysql001的piece_id为 6、7、8、9 的 4 个日志归档 Piece。obclient(root@sys)[(none)]> ALTER SYSTEM DELETE ARCHIVELOG_PIECE 6,7,8,9 TENANT = mysql001;
用户租户清理本租户指定的日志归档 Piece
用户租户的租户管理员登录到数据库。
说明
MySQL 租户的管理员用户为
root用户,Oracle 租户的管理员用户为SYS用户。连接示例如下,连接数据库时请以实际环境为准。
obclient -h10.xx.xx.xx -P2883 -uroot@mysql001#obdemo -p***** -A获取待清理的日志归档 Piece 的
piece_id。MySQL 模式Oracle 模式MySQL 模式下的查询示例如下:
obclient(root@mysql001)[(none)]> SELECT ROUND_ID, PIECE_ID, STATUS, FILE_STATUS, START_SCN, START_SCN_DISPLAY, END_SCN, END_SCN_DISPLAY, PATH FROM oceanbase.DBA_OB_ARCHIVELOG_PIECE_FILES;Oracle 模式下的查询示例如下:
obclient(SYS@oracle001)[SYS]> SELECT ROUND_ID, PIECE_ID, STATUS, FILE_STATUS, START_SCN, START_SCN_DISPLAY, END_SCN, END_SCN_DISPLAY, PATH FROM SYS.DBA_OB_ARCHIVELOG_PIECE_FILES;执行以下命令,删除指定的日志归档 Piece。
语句如下:
ALTER SYSTEM DELETE ARCHIVELOG_PIECE piece_id[,piece_id,...];其中:
piece_id:指定待删除的日志归档 Piece 的 ID,单条命令中支持同时指定多个 Piece。同时指定多个piece_id进行清理时,要求所有piece_id均在同一个备份路径下。不支持在同一条命令中清理多个路径下的日志归档 Piece。tenant_name:指定待删除日志归档 Piece 的租户。
示例如下:
删除本租户
piece_id为 5 的日志归档 Piece。obclient> ALTER SYSTEM DELETE ARCHIVELOG_PIECE 5;同时删本租户
piece_id为 6、7、8、9 的 4 个日志归档 Piece。obclient> ALTER SYSTEM DELETE ARCHIVELOG_PIECE 6,7,8,9;