关于 OceanBase 的闪回查询(Flashback Query)机制,以下说法正确的是?

关于 OceanBase 的闪回查询(Flashback Query)机制,以下说法正确的是?

A. 闪回查询依赖 Undo 日志中的历史数据版本,可以查询任意过去时间点的数据,不受保留时长限制。

B. 执行闪回查询时,需要先开启租户的回收站功能,并将待查询的表放入回收站后才能查询其历史数据。

C. 用户可以使用 SELECT ... AS OF TIMESTAMP 语法查询某个表在过去某个时间点的数据快照,但该时间点必须在系统配置的 undo_retention 范围内。

D. 闪回查询只能用于查询已提交的数据,且无法查询 DDL 操作(如加列、删列)之前的历史数据。

解析
OceanBase 支持通过 AS OF TIMESTAMPAS OF SNAPSHOT 子句执行闪回查询,读取过去某个时间点的数据版本。可查询的时间范围受 undo_retention 参数控制(默认 1800 秒),超出该时间的历史版本可能被后台垃圾回收线程清理,无法再查询。

  • A 错误 :不能查询任意过去时间点,只能查询 undo_retention 窗口内的历史版本,超过该时间的数据版本会被清除。
  • B 错误 :闪回查询不需要开启回收站 ,也不需要表在回收站中。回收站用于恢复被 DROP 的表,而闪回查询针对的是表内已提交的历史数据行。
  • C 正确AS OF TIMESTAMP 语法用于指定快照时间点,该时间点必须在 undo_retention 窗口内(以及租户可用的历史版本范围内)。
  • D 错误 :闪回查询可以查询 DDL 操作(如加列、删列)之前 的数据,只要在该 DDL 操作的提交时间点之前的数据快照仍然可用。但需要注意 DDL 会重置表的版本链,实际操作中可能受限制,原则上只要历史版本未被清理即可查询。更准确的表述是:闪回查询无法跨越 TRUNCATE 操作(因为物理删除),但对于 ADD/DROP COLUMN 等 Schema 变更,通常可查询变更前的状态。D 的说法“无法查询 DDL 之前的数据”过于绝对,故不正确。

正确答案:C

选C
A错误,闪回查询依赖 undo_retention 参数控制的历史数据保留时长,只能查询只能查询 undo_retention 窗口内的数据,不能查询任意过去时间点。超出该范围的数据可能已被系统回收。

B错误,闪回查询与回收站是两个独立的功能。闪回查询直接查询表的历史版本数据,不需要将表放入回收站。回收站用于恢复被 DROP 删除的表对象,而非用于闪回查询。

C正确,这是闪回查询的核心机制。undo_retention 参数(默认 1800 秒)决定了历史数据的最低保留时长,用户只能查询该时间范围内的历史版本数据。

D错误,前半句正确:闪回查询只能查询已提交的数据。但后半句不准确:对于加列操作,闪回查询仍可查询历史数据,加列操作不影响闪回查询(新列显示默认值),但删列/删表会报错。

选C

选C

答案C

打卡