注册
DM8回收站中对象闪回和清除顺序测试
专栏/培训园地/ 文章详情 /

DM8回收站中对象闪回和清除顺序测试

codePanda 2025/12/03 38 0 0
摘要

一、结论

  1. 闪回默认按 LIFO(后进先出) 挑选:
    FLASHBACK TABLE panda.num TO BEFORE DROP; 永远拿到 最后删的那个版本
  2. 清除默认按 FIFO(先进先出) 挑选:
    PURGE TABLE panda.num; 永远清掉 最早进站的版本

闪回拿最新的,清除丢最旧的;想精准,直接点名 BIN$xxx。

二、实验

2.1创建环境

清空回收站,创建六组数据依次删除

purge recyclebin; create table panda.num (id int); insert into panda.num values(1); commit; drop table panda.num; create table panda.num (id int); insert into panda.num values(2); commit; create table panda.num (id int); insert into panda.num values(3); commit; create table panda.num (id int); insert into panda.num values(4); commit; create table panda.num (id int); insert into panda.num values(5); commit;

2.2 闪回测试

假设,闪回默认找回最新一次误删;清除默认优先清掉最旧的垃圾。此时恢复,会优先恢复 DROPTIME 时间最新的数据。

select * FROM dba_recyclebin order by droptime desc; dbmt@DAMENG:5236 SQL> select * FROM dba_recyclebin order by droptime desc; OWNER OBJECT_NAME ORIGINAL_NAME OPERATION TYPE TS_NAME CREATETIME DROPTIME PARTITION_NAME BASE_OBJECT ----- ----------- ------------- --------- ----- ------- ------------------- ------------------- -------------- ----------- PANDA BIN$1546$0 NUM DROP TABLE DATA 2025-10-31:14:49:31 2025-10-31:14:51:12 NULL 1546 PANDA BIN$1545$0 NUM DROP TABLE DATA 2025-10-31:14:48:31 2025-10-31:14:49:25 NULL 1545 PANDA BIN$1544$0 NUM DROP TABLE DATA 2025-10-31:14:47:29 2025-10-31:14:48:30 NULL 1544 PANDA BIN$1543$0 NUM DROP TABLE DATA 2025-10-31:14:46:39 2025-10-31:14:47:23 NULL 1543 PANDA BIN$1542$0 NUM DROP TABLE DATA 2025-10-31:14:45:24 2025-10-31:14:45:31 NULL 1542 已用时间: 1.367(毫秒). 执行号:23857.

第一次闪回drop恢复的是最后删除的num里面存放数据 5

dbmt@DAMENG:5236 SQL> flashback table panda.num to before drop; 已用时间: 39.768(毫秒). 执行号:23858. dbmt@DAMENG:5236 SQL> select * from panda.num; ID ----------- 5 已用时间: 12.450(毫秒). 执行号:23859.

第二次闪回drop恢复的是 4,避免重名恢复成 num4 ,第三次闪回drop恢复的是 3,避免重名 恢复成 num3

dbmt@DAMENG:5236 SQL> flashback table panda.num to before drop rename to num4; 已用时间: 48.968(毫秒). 执行号:23860. dbmt@DAMENG:5236 SQL> dbmt@DAMENG:5236 SQL> select * from panda.num4; ID ----------- 4 已用时间: 11.135(毫秒). 执行号:23861. dbmt@DAMENG:5236 SQL> select * FROM dba_recyclebin order by droptime desc; OWNER OBJECT_NAME ORIGINAL_NAME OPERATION TYPE TS_NAME CREATETIME DROPTIME PARTITION_NAME BASE_OBJECT ----- ----------- ------------- --------- ----- ------- ------------------- ------------------- -------------- ----------- PANDA BIN$1544$0 NUM DROP TABLE DATA 2025-10-31:14:47:29 2025-10-31:14:48:30 NULL 1544 PANDA BIN$1543$0 NUM DROP TABLE DATA 2025-10-31:14:46:39 2025-10-31:14:47:23 NULL 1543 PANDA BIN$1542$0 NUM DROP TABLE DATA 2025-10-31:14:45:24 2025-10-31:14:45:31 NULL 1542 已用时间: 2.245(毫秒). 执行号:23862. dbmt@DAMENG:5236 SQL> flashback table panda.num to before drop rename to num3; 已用时间: 47.288(毫秒). 执行号:23863. dbmt@DAMENG:5236 SQL> dbmt@DAMENG:5236 SQL> select * from panda.num3; ID ----------- 3 已用时间: 12.394(毫秒). 执行号:23865. dbmt@DAMENG:5236 SQL> select * FROM dba_recyclebin order by droptime desc; OWNER OBJECT_NAME ORIGINAL_NAME OPERATION TYPE TS_NAME CREATETIME DROPTIME PARTITION_NAME BASE_OBJECT ----- ----------- ------------- --------- ----- ------- ------------------- ------------------- -------------- ----------- PANDA BIN$1543$0 NUM DROP TABLE DATA 2025-10-31:14:46:39 2025-10-31:14:47:23 NULL 1543 PANDA BIN$1542$0 NUM DROP TABLE DATA 2025-10-31:14:45:24 2025-10-31:14:45:31 NULL 1542 已用时间: 1.301(毫秒). 执行号:23864.

2.3清除测试

清除的是最早删除的那个 num 表,第一次清除的应该是最早删除,也就是drop时间是 2025-10-31:14:45:31的

dbmt@DAMENG:5236 SQL> purge table panda.num; <<<< 必须在自己用户下 purge table panda.num; [-2106]:无效的表或视图名[BIN$1542$0]. 已用时间: 7.944(毫秒). 执行号:0. panda@DAMENG:5236 SQL> select * FROM dba_recyclebin order by droptime desc; OWNER OBJECT_NAME ORIGINAL_NAME OPERATION TYPE TS_NAME CREATETIME DROPTIME PARTITION_NAME BASE_OBJECT ----- ----------- ------------- --------- ----- ------- ------------------- ------------------- -------------- ----------- PANDA BIN$1543$0 NUM DROP TABLE DATA 2025-10-31:14:46:39 2025-10-31:14:47:23 NULL 1543 PANDA BIN$1542$0 NUM DROP TABLE DATA 2025-10-31:14:45:24 2025-10-31:14:45:31 NULL 1542 <<<< 这条数据最早先被清楚 已用时间: 17.162(毫秒). 执行号:24905. panda@DAMENG:5236 SQL> panda@DAMENG:5236 SQL> purge table panda.num; 已用时间: 73.420(毫秒). 执行号:24906. panda@DAMENG:5236 SQL> panda@DAMENG:5236 SQL> select * FROM dba_recyclebin order by droptime desc; OWNER OBJECT_NAME ORIGINAL_NAME OPERATION TYPE TS_NAME CREATETIME DROPTIME PARTITION_NAME BASE_OBJECT ----- ----------- ------------- --------- ----- ------- ------------------- ------------------- -------------- ----------- PANDA BIN$1543$0 NUM DROP TABLE DATA 2025-10-31:14:46:39 2025-10-31:14:47:23 NULL 1543 已用时间: 1.311(毫秒). 执行号:24907.

三、实验速览

操作 实际对象(按 DROPTIME) 结果
第1次闪回 2025-10-31 14:51:12(最新) 得到值 5
第2次闪回 2025-10-31 14:49:25(次新) 得到值 4
第1次清除 2025-10-31 14:45:31(最早) 被清理

四、避免踩坑

  1. 同名多版本场景,永远显式指定回收站名——方向感瞬间归零:
FLASHBACK TABLE "BIN$1543$0" TO BEFORE DROP; -- 精确找回任意版本 PURGE TABLE "BIN$1546$0"; -- 精确清掉任意版本
  1. 一次只想“全站清空”用全局命令,不受 FIFO 影响:
PURGE RECYCLEBIN; -- 当前用户 PURGE DBA_RECYCLEBIN; -- SYSDBA 清所有

社区地址:
https://eco.dameng.com

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服