oracle flashback table怎么只回滚表中部分数据?

像下面的语句是将t_user表全表数据都回滚到指定日期,我想只回滚一部分,比如加个where条件name='张三' 应该怎么弄?
alter table sys.t_user enable row movement;
flashback table sys.t_user to timestamp TO_TIMESTAMP('2023-06-20 13:36:00','yyyy-mm-dd hh24:mi:ss');

alter table sys.t_user disable row movement

Oracle Flashback Table 是一种数据库特性,可以用来恢复表中的数据到某个时间点。如果你只需要回滚表中部分数据,可以考虑以下两种方法:

    使用 Oracle Flashback Query

    Oracle Flashback Query 是一种查询特性,可以在不影响当前数据的情况下查询历史数据。你可以使用 Flashback Query 查询到需要回滚的数据,然后使用 INSERT INTO SELECT 语句将数据插入到一个临时表中,最后使用 MERGE 语句将临时表的数据合并到原表中。以下是一个示例:

在这个示例中,我们使用 Flashback Query 查询到需要回滚的数据,并将数据插入到一个临时表中。然后使用 MERGE 语句将临时表的数据合并到原表中,实现数据回滚。

    使用 Oracle Data Pump

    Oracle Data Pump 是一种数据库导出和导入工具,可以选择导出指定的表或数据。你可以使用 Data Pump 将需要回滚的数据导出到一个文件中,然后使用 IMPDP 工具将数据导入到另一个表中,最后使用 MERGE 语句将新表的数据合并到原表中。以下是一个示例:

在这个示例中,我们使用 Data Pump 将需要回滚的数据导出到一个文件中,然后使用 IMPDP 工具将数据导入到一个新表中。使用 MERGE 语句将新表的数据合并到原表中,实现数据回滚。

需要注意的是,以上两种方法都需要谨慎操作,确保不会影响到其他数据。同时,也需要备份好原始数据,以免出现意外情况。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2023-06-20

使用 Oracle Flashback Table 无法只回滚表中部分数据,该功能只能将整张表恢复到先前的状态。如果需要只回滚部分数据,可以考虑使用如下方法:

    使用 Oracle Flashback Query 查询要回滚的数据,并将其导出为备份。

    将备份数据重新插入表中并提交事务。

    如果需要删除原始数据,请使用 DELETE 语句删除它们。

    请注意,在执行上述操作之前,应该对数据库和表进行备份以防止不可逆的数据损失。

本回答被提问者采纳
相似回答