---
title: "闪回查询多数据库版本 | OceanBase 文档中心"
description: 闪回查询多数据库版本 本节主要介绍 OceanBase 数据库的闪回查询多数据库版本的示例和使用限制。 OceanBase 数据库提供了记录级别的闪回查询（Flashback Query）功能，该功能允许用户获取某个历史版本的数据。其中，Oracle 模式支持 AS OF SCN 和 AS OF TIMESTAMP …
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*P8CuR4UJ_FkAAAAAAAAAAAAADiGDAQ/original) OceanBase 数据库分布式版 - V 3.2.3 企业版 LTS

# 闪回查询多数据库版本

更新时间：2023-12-20 17:10:37

本节主要介绍 OceanBase 数据库的闪回查询多数据库版本的示例和使用限制。

OceanBase 数据库提供了记录级别的闪回查询（Flashback Query）功能，该功能允许用户获取某个历史版本的数据。其中，Oracle 模式支持 `AS OF SCN`和 `AS OF TIMESTAMP` 两种语法来查询；MySQL 模式支持通过 `AS OF SNAPSHOT` 语法来查询。

## 闪回查询支持的方式

OceanBase 数据库当前支持通过以下两种方式来进行闪回查询：

- 创建 Restore Point

  当用户创建了 Restore Point，则可使用闪回查询功能查询 Restore Point 点对应的数据版本。 Restore Point 的创建及使用的相关操作请参见 [Restore Point](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355059)。
 - 设置 `undo_retention` 变量

  当用户设置 `undo_retention` 变量后，即可使用闪回查询功能查询当前时间 `T` 到 `T - undo_retention` 时间范围内的任意多版本数据。

  本节主要介绍如何通过设置 `undo_retention` 变量来进行闪回查询。

## 注意事项

使用 `undo_retention` 变量进行闪回查询时，需要注意以下事项：

- 假设 `undo_retention` 变量设置的时间为 T0，变量设置后对 T0 之前的数据不起作用，对 T0 之后的数据才起作用。
 - 如果被查询的表已经被删除进了回收站，则需要先将该表从回收站中恢复。

  闪回表的相关操作请参见 [闪回回收站对象](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355058)。
 - 假设当前时间为 `T`，设置 `undo_retention` 变量后，如果在 `T - undo_retention` 时间段内有 DDL 操作，系统会用最新的数据字典解释表的数据。对于 DDL 操作发生前产生的数据，被删除的列的数据将变成删除状态，新添加列的数据则设为 Default 值。

## 设置变量

在通过 `undo_retention` 变量进行闪回查询前，需要先修改 `undo_retention` 变量的值。`undo_retention` 变量的默认值为 `1800`，单位为秒。

1. 租户管理员登录到对应的租户。
 2. 执行以下语句，修改 `undo_retention` 变量的值。

   示例如下：

   ```sql
   obclient> SET GLOBAL undo_retention=900;

   ```

   更多 `undo_retention` 变量的说明信息请参见 [undo_retention](https://www.oceanbase.com/docs/enterprise-oceanbase-database-cn-10000000000355386)。

## MySQL 模式下的闪回查询

假设，当前 `undo_retention` 变量设置的值为 `900`，用户有一个表 `table1`。

通过 `AS OF SNAPSHOT`指定历史时间并闪回查询单表在该历史时间点的状态的数据的示例如下：

```sql
obclient> SELECT * FROM table1 AS OF SNAPSHOT 1582807800000000;

```

其中，`1582807800000000` 为时间戳，需要您根据待查询的时间自行转换，单位为微秒。

## Oracle 模式下的闪回查询

假设当前 `undo_retention` 变量配置的值为 `900`，用户有 3 个表 `table1`、`table2`、`expr1`。

闪回查询的使用示例如下：

- 通过 `TIMESTAMP` 指定的历史时间并闪回查询一张单表在该历史时间中的状态的数据。

  ```sql
  obclient> SELECT * FROM table1 AS OF TIMESTAMP TO_TIMESTAMP('2020-08-13 16:20:00','yyyy-mm-dd hh24:mi:ss');

  ```
 - 通过 `TIMESTAMP` 指定的历史时间并闪回查询多表在该历史时间中的状态的数据。

  ```sql
  obclient> SELECT * FROM table1,table2 AS OF TIMESTAMP TO_TIMESTAMP('2020-08-13 16:20:00','yyyy-mm-dd hh24:mi:ss');

  ```
 - 通过 `SCN` 指定历史时间并闪回查询单表在该历史时间点的状态的数据。

  ```sql
  obclient> SELECT * FROM table1 AS OF SCN 1582807800000000;

  ```

 上一篇 下一篇 ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
