Flashback queries
seekdb supports record-level flashback queries, which allow users to retrieve data from a historical version. You can use the AS OF SNAPSHOT syntax to perform flashback queries.
seekdb supports flashback queries by setting the undo_retention parameter. After you set the undo_retention parameter, you can perform flashback queries to retrieve data from multiple versions between T - undo_retention and the current time T. The default value of the undo_retention parameter is 1800 seconds. For more information about the undo_retention parameter, see undo_retention.
Considerations
When you use the undo_retention parameter to perform a flashback query, note the following:
-
The value of the
undo_retentionparameter specifies the time range during which data can be flashback queried. Data that is modified after the specified time cannot be flashback queried. -
If the table queried is moved to the recycle bin, you must restore the table from the recycle bin before you perform a flashback query.
For more information about how to restore a recycle bin object, see Restore a recycle bin object.
-
Assume that the current time is
T. After you set theundo_retentionparameter, if a DDL operation is performed within theT - undo_retentiontime range, the following applies:-
For a column addition operation, the new columns have default values when you perform a flashback query before the operation.
-
For a table creation, table deletion, or column deletion operation, an error is returned when you perform a flashback query before the operation.
-
-
Flashback queries require additional storage space to retain historical data. If you increase the value of the
undo_retentionparameter, the storage space required for historical data increases. We recommend that you monitor the storage space after you increase the value of theundo_retentionparameter.
Prerequisites
Before you perform a flashback query by using the undo_retention parameter, you must modify the value of the undo_retention parameter. The default value of the undo_retention parameter is 1800 seconds.
-
Log in to seekdb as the
rootuser.The following example shows how to connect to the database. Replace the actual environment with the parameters in the example.
mysql -h127.0.0.1 -uroot -P2881 -
Execute the following statement to modify the value of the
undo_retentionparameter.The following example shows how to modify the value of the
undo_retentionparameter:ALTER SYSTEM SET undo_retention=900;For more information about the
undo_retentionparameter, see undo_retention.
Perform a flashback query
-
Log in to seekdb.
The following example shows how to connect to the database. Replace the actual environment with the parameters in the example.
mysql -h127.0.0.1 -uroot -P2881 -
Perform a flashback query on a table.
Assume that the value of the
undo_retentionparameter is900and that you have a table namedtable1. The following example shows how to specify a historical time by using theAS OF SNAPSHOTclause and perform a flashback query to retrieve data from the table at the specified historical time.SELECT * FROM table1 AS OF SNAPSHOT 1597306800000000000;In the preceding example,
1597306800000000000is a timestamp in nanoseconds. The timestamp starts at 08:00:00 on August 1970 in Beijing Time. You can convert the time to be queried to a timestamp as needed.For example, to flashback query data from the table at 16:20:00 on August 13, 2020, you can convert the time to a timestamp as follows:
SELECT time_to_usec('2020-08-13 16:20:00') * 1000;
+--------------------------------------------+
| time_to_usec('2022-01-01 00:00:00') * 1000 |
+--------------------------------------------+
| 1597306800000000000 |
+--------------------------------------------+
1 row in set