本文描述在异机恢复中 locate_file_by_log_id 出现 max_valid_index_info min_log_id_ bigger than log_id 报错 -4016 的解决办法。
适用版本
OceanBase 数据库 V2.x 和 V3.x 版本。
问题现象
异机恢复遇到下述报错。
observer.log.20230307182246:[2023-03-07 18:22:40.852446] ERROR [ARCHIVE] locate_file_by_log_id (ob_archive_log_file_store.cpp:170) [100057][0][YB4215785273-0005F4E741BFA9A0-0-0] [lt=6] [dc=0] max_valid_index_info min_log_id_ bigger than log_id(ret=-4016, ret="OB_ERR_UNEXPECTED", pg_key={tid:1107208209440367, partition_id:0, part_cnt:0}, log_id=1, max_valid_index_info={magic_:16713, record_len_:144, version_:1, is_effective_:1, data_file_id_:161, input_bytes_:0, output_bytes_:0, clog_epoch_id_:1672458255762122, accum_checksum_:2016804159, min_log_id_:2403567, min_log_ts_:1672467932900274, max_log_id_:2412207, max_checkpoint_ts_:1676562176714238, max_log_submit_ts_:1676559806505282, round_start_ts_:1, round_start_log_id_:1, round_snapshot_version_:0, round_log_submit_ts_:1672458255768379, round_clog_epoch_id_:1, round_accum_checksum_:0, checksum_:2975736908}) BACKTRACE:0xf6da5ef 0x52cb4ef 0x54305d1 0x54301ff 0x542fecc 0x9b9df31 0x9ae9a80 0x9ae8f3a 0x9b2011f 0x9b1372e 0x9b13384 0x9b18955 0x9b17d28 0x5232620 0x679a3ee 0xf5b9993 0xf5b97ef 0xf858abf
问题原因
在进行异机恢复操作时,发现有索引的 max_valid_index_info 和 min_log_id_ bigger 比集群的 log_id 大,原因是原来的集群中存在状态为 unusable 及 error 的索引。
解决方法
可通过下述步骤临时解决问题。
- 在备份的源集群删掉
unuseable和error的索引,后重建这些索引。 - 进行每日合并和基线备份。
- 重新操作恢复。
如果想彻底解决问题,仍然需要升级版本,目前已修复的版本如下:
- OceanBase 数据库 V3.2.3 BP8 (oceanbase-3.2.3.3-108000062023041511) 及之后版本。
- OceanBase 数据库 V3.2.4 BP2 (oceanbase-3.2.4.2-102000042023022717) 及之后版本。