适用版本
OceanBase 数据库 V2.x、V3.x 版本。
问题描述
执行以下命令报错 failed to do clean(ret=-4009)。
obclient> alter system delete backupset 294;
问题原因
曾经变更过 backup_dest,原来的 backup_dest 目录已删除或者无法访问,导致清理任务失败。
解决方法
手工删除系统表中历史备份的残留信息,并将历史备份文件设置为 DELETED 状态。
删除内部表的任务记录。根据老的 backup_dest 目录来删除。
obclient> DELETE from __all_backup_task_history where backup_dest='cos://ob-bkt-125xxxxxxx/test?host=cos.km.csp.cloud.xxxxxxxx.com&access_id=xxxxxxxxxxxxxxxx&access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxx&appid=125xxxxxxx'; obclient> DELETE from __all_backup_log_archive_status_history where backup_dest='cos://ob-bkt-125xxxxxxx/test?host=cos.km.csp.cloud.xxxxxxxx.com&access_id=xxxxxxxxxxxxxxxx&access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxx&appid=125xxxxxxx';修改内部表的记录状态。根据老的 backup_dest 目录来修改。
obclient> UPDATE __all_backup_set_files set file_status='DELETED' where backup_dest='cos://ob-bkt-125xxxxxxx/test?host=cos.km.csp.cloud.ynhtbank.com&access_id=xxxxxxxxxxxxxxxx&access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxx&appid=125xxxxxxx'; obclient> UPDATE __all_backup_piece_files set file_status='DELETED' where backup_dest='cos://ob-bkt-125xxxxxxx/test?host=cos.km.csp.cloud.ynhtbank.com&access_id=xxxxxxxxxxxxxxxx&access_key=xxxxxxxxxxxxxxxxxxxxxxxxxxx&appid=125xxxxxxx';
OceanBase 数据库清理机制
在 V2.x/V3.x 是以租户为单位清理租户所有的过期备份(包括日志和数据),清理完一个租户才会清理下一个租户,不是以 backup_set 维度来进行清理。清理备份完成后,会自动更新内核备份相关的基表数据信息,比如:
- 删除内部表的任务记录:
__all_backup_task_history/__all_backup_log_archive_status_history - 修改内部表的记录状态:
__all_backup_set_files/__all_backup_piece_files