Skip to content

适用虚谷数据库版本

v12.9



适用虚谷数据库版本

v12.9


回收站

📄字数 4.3K
👁️阅读量 加载中...

回收站是所有被删除表以及表的相关依赖对象的一个逻辑存储容器。回收站提供了一种安全的数据恢复机制,当表对象被意外删除时,可以通过回收站的表对象进行查找,并单独将此对象恢复到原始状态,从而无需通过恢复数据库或从备份中进行恢复等复杂操作,这会使得数据库的管理和维护更加方便简单。

一、控制回收站

回收站默认关闭,使用该功能时可通过 enable_recycle 参数开启,该参数为全局参数且立即生效,不同用户设置后所有用户都可以感知。

1.1 查看是否开启回收站

1.1.1 语法格式

1.1.2 参数说明

enable_recycle:控制是否开启回收站(T为开启/F为关闭)

1.1.3 示例

  • 示例1

回收站功能关闭状态

sql
SQL> SHOW enable_recycle;
+----------------+
| ENABLE_RECYCLE |
+----------------+
| F              |
+----------------+

1.2 开启回收站

1.2.1 语法格式

回收站可以通过此语法开启(立即生效),或者在启动数据库时将xugu.ini中的enable_recycle参数设置为true(默认为false)也可以开启。

1.2.2 示例

  • 示例1

开启回收站。

sql
SQL> SET enable_recycle ON;

SQL> SHOW enable_recycle;
+----------------+
| ENABLE_RECYCLE |
+----------------+
| T              |
+----------------+

1.3 关闭回收站

1.3.1 语法格式

回收站可以通过此语法关闭(立即生效),或者在启动数据库时将xugu.ini中的enable_recycle参数设置为false也可以关闭。

1.3.2 示例

  • 示例1

关闭回收站。

sql
SQL> SET enable_recycle OFF;

SQL> SHOW enable_recycle;
+----------------+
| ENABLE_RECYCLE |
+----------------+
| F              |
+----------------+

二、 删表是否进入回收站

2.1 语法格式

和删除表语法一致。

2.2 参数说明

  • IF EXISTS:表不存在时,使用IF EXISTS会打印警告信息,不报错;不使用IF EXISTS会报错处理。
  • sche_name:模式名,模式名可不写,默认当前模式。
  • tab_name:表名。
  • CASCADE|RESTRICT:表对象存在依赖是否强制删除。CASCADE强制删除,RESTRICT报错(默认报错)。
  • PURGE:是否进入回收站,不写PURGE则进入回收站,写PURGE则直接删除。

2.3 删表进入回收站

表会被逻辑删除,将表对象以及表相依赖的非外键约束、索引、触发器放入回收站。

  • 示例1
sql
SQL> CREATE TABLE tab_recyc(a INT,b VARCHAR,c INT,CONSTRAINT pk_table1 PRIMARY KEY(a));

SQL> DROP TABLE tab_recyc;

注意

外键约束会直接删除,不进入回收站。

2.4 删表不进入回收站

表会被实际删除,以及和表相依赖的索引、约束、触发器、同义词全部删除。

  • 示例1
sql
SQL> CREATE TABLE tab_recyc2(a INT,b VARCHAR,c INT,CONSTRAINT pk_table1 PRIMARY KEY(a));

SQL> DROP TABLE tab_recyc2 PURGE;

三、 查询回收站

当前可通过以下方式查询回收站对象:系统表SYS_RECYCLEBIN,系统视图 USER_RECYCLEBIN、以及USER_RECYCLEBIN的公共同义词RECYCLEBIN
回收站中的对象名称由"BIN$"做为前缀。回收站中的约束对象是通过系统表SYS_CONSTRAINTS和系统视图DBA_CONSTRAINTSUSER_CONSTRAINTSALL_CONSTRAINTS进行查询。

3.1 系统表

3.1.1 SYS_RECYCLEBIN

用于记录所有库中被删除对象的信息(如表、分区、索引、索引分区、触发器),存储其定义和删除时间,不包含实际数据。字段详细含义请参见 系统表章节

  • 示例1
sql
SQL> SELECT * FROM SYS_RECYCLEBIN;
+-------+---------+-----------+---------------+-------------+------------------+-----------+--------------------------+----------------+--------------------------+------------+-----------+-----------+
| DB_ID | USER_ID | OBJECT_ID | RELATEDOBJ_ID | OBJECT_TYPE | OBJECT_TYPE_NAME | SCHEMA_ID |       OBJECT_NAME        |  RECYCLE_NAME  |       DROPED_TIME        | CAN_UNDROP | CAN_PURGE | RESERVED1 |
+-------+---------+-----------+---------------+-------------+------------------+-----------+--------------------------+----------------+--------------------------+------------+-----------+-----------+
| 1     | 1       | 1048606   | 1048606       | 5           | Table            | 1         | TAB_RECYC                | BIN$0800000007 | 2025-06-17 15:53:40.218  | YES        | YES       | <NULL>    |
| 1     | 1       | 1048607   | 1048606       | 10          | Index            | 1         | PK_IDX_S1786217501755531 | BIN$0E00000000 | 2025-06-17 15:53:40.218  | NO         | YES       | <NULL>    |
+-------+---------+-----------+---------------+-------------+------------------+-----------+--------------------------+----------------+--------------------------+------------+-----------+-----------+

3.2 系统视图

3.2.1 DBA_RECYCLEBIN

查询当前库下所有用户的所有回收站对象,字段详细含义请参见系统视图章节

  • 示例1
sql
SQL> SELECT * FROM DBA_RECYCLEBIN;
+-------+---------+-----------+---------------+-------------+------------------+-----------+--------------------------+----------------+--------------------------+------------+-----------+-----------+
| DB_ID | USER_ID | OBJECT_ID | RELATEDOBJ_ID | OBJECT_TYPE | OBJECT_TYPE_NAME | SCHEMA_ID |       OBJECT_NAME        |  RECYCLE_NAME  |       DROPED_TIME        | CAN_UNDROP | CAN_PURGE | RESERVED1 |
+-------+---------+-----------+---------------+-------------+------------------+-----------+--------------------------+----------------+--------------------------+------------+-----------+-----------+
| 1     | 1       | 1048606   | 1048606       | 5           | Table            | 1         | TAB_RECYC                | BIN$0800000007 | 2025-06-17 15:53:40.218  | YES        | YES       | <NULL>    |
| 1     | 1       | 1048607   | 1048606       | 10          | Index            | 1         | PK_IDX_S1786217501755531 | BIN$0E00000000 | 2025-06-17 15:53:40.218  | NO         | YES       | <NULL>    |
+-------+---------+-----------+---------------+-------------+------------------+-----------+--------------------------+----------------+--------------------------+------------+-----------+-----------+

3.2.2 USER_RECYCLEBIN

查询当前用户的所有回收站对象,字段详细含义请参见 系统视图章节

  • 示例1
sql
SQL> SELECT * FROM USER_RECYCLEBIN;
+-------+---------+-----------+---------------+-------------+------------------+-----------+--------------------------+----------------+--------------------------+------------+-----------+-----------+
| DB_ID | USER_ID | OBJECT_ID | RELATEDOBJ_ID | OBJECT_TYPE | OBJECT_TYPE_NAME | SCHEMA_ID |       OBJECT_NAME        |  RECYCLE_NAME  |       DROPED_TIME        | CAN_UNDROP | CAN_PURGE | RESERVED1 |
+-------+---------+-----------+---------------+-------------+------------------+-----------+--------------------------+----------------+--------------------------+------------+-----------+-----------+
| 1     | 1       | 1048606   | 1048606       | 5           | Table            | 1         | TAB_RECYC                | BIN$0800000007 | 2025-06-17 15:53:40.218  | YES        | YES       | <NULL>    |
| 1     | 1       | 1048607   | 1048606       | 10          | Index            | 1         | PK_IDX_S1786217501755531 | BIN$0E00000000 | 2025-06-17 15:53:40.218  | NO         | YES       | <NULL>    |
+-------+---------+-----------+---------------+-------------+------------------+-----------+--------------------------+----------------+--------------------------+------------+-----------+-----------+

3.3 公共同义词

3.3.1 RECYCLEBIN

查询当前用户下回收站信息,USER_RECYCLEBIN的公共同义词。

  • 示例1
sql
SQL> SELECT * FROM RECYCLEBIN;
+-------+---------+-----------+---------------+-------------+------------------+-----------+--------------------------+----------------+--------------------------+------------+-----------+-----------+
| DB_ID | USER_ID | OBJECT_ID | RELATEDOBJ_ID | OBJECT_TYPE | OBJECT_TYPE_NAME | SCHEMA_ID |       OBJECT_NAME        |  RECYCLE_NAME  |       DROPED_TIME        | CAN_UNDROP | CAN_PURGE | RESERVED1 |
+-------+---------+-----------+---------------+-------------+------------------+-----------+--------------------------+----------------+--------------------------+------------+-----------+-----------+
| 1     | 1       | 1048606   | 1048606       | 5           | Table            | 1         | TAB_RECYC                | BIN$0800000007 | 2025-06-17 15:53:40.218  | YES        | YES       | <NULL>    |
| 1     | 1       | 1048607   | 1048606       | 10          | Index            | 1         | PK_IDX_S1786217501755531 | BIN$0E00000000 | 2025-06-17 15:53:40.218  | NO         | YES       | <NULL>    |
+-------+---------+-----------+---------------+-------------+------------------+-----------+--------------------------+----------------+--------------------------+------------+-----------+-----------+

四、操作回收站表对象

当前仅支持通过回收站表名进行SELECT,其余DML/DDL操作均不支持。

  • 示例1
sql
SQL> SELECT * FROM "BIN$0800000007";
+---+----+---+
| A | B  | C |
+---+----+---+
| 1 | aa | 1 |

五、恢复表

指定表名或回收站表名将其恢复到原始状态,若指定的表名在回收站中存在同名,则恢复的是最迟进入回收站的表对象。并且为了避免恢复后重名报错,也可以在恢复时进行重命名。非外键约束进入回收站后,当恢复表时,约束会自动恢复。

5.1 语法格式

5.2 参数说明

tab_name:原表名或回收站中的表名。
new_name:恢复时对表名重命名。

5.3 示例

  • 示例1
    根据原表名恢复。
sql
SQL> FLASHBACK TABLE tab_recyc TO BEFORE DROP;

SQL> SELECT * FROM tab_recyc;
+---+----+---+
| A | B  | C |
+---+----+---+
| 1 | aa | 1 |
+---+----+---+

六、清理回收站

回收站是逻辑存储容器,依赖于原有表所占空间。如果不对回收站进行清除操作,回收站中的表对象会一直存在,导致空间一直被占用。所以回收站提供PURGE命令来清除回收站对象,以及原有的DROP数据库/用户/模式也会清除回收站对象,从而释放空间。

6.1 清理表

清理表时与此表相关的索引,触发器也同时清理。若是存在同名表,则清理最早进入回收站的。

6.1.1 语法格式

6.1.2 参数说明

old_tab_name:进入回收站前的原表名。
recycle_tab_name:回收站中的唯一表名,BIN$ 为前缀。

6.1.3 示例

  • 示例1
    使用进入回收站前的原表名清理。
sql
SQL> PURGE TABLE tab_recyc;

6.2 清理索引

若是存在同名表的同名索引,则清理最早进入回收站的。不支持单独清理主键索引,只能跟随表的清理而清理。

6.2.1 语法格式

6.2.2 参数说明

old_tab_name:进入回收站前的原表名。
old_idx_name:进入回收站前的原索引名。
recycle_tab_name:回收站中的唯一表名,BIN$ 为前缀。
recycle_idx_name:回收站中的唯一索引名,BIN$ 为前缀。

6.2.3 示例

  • 示例1

清理普通索引

sql
SQL> PURGE INDEX tab_recyc.idx1;
  • 示例2
    清理主键索引
sql
SQL> PURGE INDEX BIN$0800000007.BIN$0E00000000;
Error: [E12015] 不允许删除主键索引BIN$0E00000000

6.3 当前用户的所有对象

6.3.1 语法格式

  • 示例1
sql
SQL> PURGE RECYCLEBIN;

6.4 当前库下所有用户的所有对象

6.4.1 语法格式

当前用户需要DBA权限。

  • 示例1
sql
SQL> PURGE DBA_RECYCLEBIN;

6.5 删除库,用户,模式

删除库、用户、模式时,回收站中若存在该库、用户、模式的所属对象,也会将回收站中的对象删除。