bin$表头的Oracle回收站

来源:这里教程网 时间:2026-03-03 20:49:36 作者:

Oracle回收站(RECYCLEBIN)详解 前言 RECYCLEBIN 1. What Is the Recycle Bin? Recycle Bin对象命名 2.查询管理Recycle Bin(开闭状态、信息等) 2.1 Recycle Bin开闭状态 2.1.1 查询Recycle Bin开闭状态 2.1.2 设置Recycle Bin开闭状态 2.2 查询Recycle Bin 2.3 操作Recycle Bin 2.3 恢复Recycle Bin中对象 2.4 删除Recycle Bin中对象 前言 今天查询库中表时,发现了表名以BIN$开头的对象(如下图),发现无法直接查询,百度了下,发现是RECYCLEBIN(回收站)中的对象,虽然之前也了解到Oracle回收站的知识,不过有些模糊了,特此重新整理学习下。 RECYCLEBIN 1. What Is the Recycle Bin? 作为Oracle10g的新特性之一,Recycle Bin存储着被删除对象(这些对象都是BIN$开头)。该对象可以是表及表相关的所有对象(如索引、约束、嵌套表等),值得注意的是,这些被删除对象仍然占据着原先对象的物理空间。 在以下来两种情况下,Oracle会回收该删除对象占用的空间: (用户)从回收站中显式的purge该对象(specifically purged from the recycle bin); 当表空间不足时,Oracle根据DROPSCN自动的逐一删除这些对象(they must be purged by the database because of tablespace space constraints); Recycle Bin对象命名 当删除一个对象时,系统会为该对象的回收站对象进行命名,格式为: BIN$unique_id$version 1 其中, unique_id是26字符,且全局唯一的系列; version是数据库的版本号(version is a version number assigned by the database); 数据库的每个用户都拥有自己的recycle bin,如果该用户不是SYSDBA权限的话,也只能访问自己的recycle bin,下面,简单介绍下Recycle Bin的常用操作。 2.查询管理Recycle Bin(开闭状态、信息等) 2.1 Recycle Bin开闭状态 回收站功能,默认是打开的。 2.1.1 查询Recycle Bin开闭状态 我们可以通过以下语句,查看 SQL> show parameter recyclebin; 1 根据Value值判断,on/off(建议开着,以防万一)。 2.1.2 设置Recycle Bin开闭状态 如果是针对某个session做操作,用alter session;如果是所有session,用alter system。 如果使用alter system,则需要重启数据库*(因为该初始化参数,不是动态的 This parameter is not dynamic, so a database restart is required when you change it with an ALTER SYSTEM statement)*。 关闭 ALTER SESSION SET recyclebin = OFF; ALTER SYSTEM SET recyclebin = OFF SCOPE = SPFILE; 1 2 3 开启 ALTER SESSION SET recyclebin = ON; ALTER SYSTEM SET recyclebin = ON SCOPE = SPFILE; 1 2 3 2.2 查询Recycle Bin SELECT * FROM RECYCLEBIN; SELECT * FROM DBA_RECYCLEBIN; -- DBA权限 1 2 当然,如果只想查找某一类对象。如表,可以使用: SELECT * FROM RECYCLEBIN WHERE TYPE='TABLE'; 1 更进一步,我们甚至可以直接查询该被删除对象,但需要使用双引号包裹: SELECT * FROM "BIN$yrMKlZaVMhfgNAgAIMenRA==$0"; 1 2.3 操作Recycle Bin 2.3 恢复Recycle Bin中对象 通过flashback语句: FLASHBACK TABLE table_name TO BEFORE DROP     [RENAME TO new_table_name ]; 1 2 如: FLASHBACK TABLE SZ_RST_RENKOUKUAIZHAO15_ALL_W TO BEFORE DROP; 1 2.4 删除Recycle Bin中对象 我们可以彻底清空删除对象及其相关的对象,并且释放其存储空间。 我们可以通过RECYCLEBIN对象的表名或者原始表名,进行删除。如下两句话,可以达到同一个目的: 单个对象 PURGE TABLE BIN$jsleilx392mk2=293$0; PURGE TABLE int_admin_emp; 1 2 3 我们也可以一次性清空回收站中某个表空间的数据,或者,某个用户在某个表空间的数据,如下: PURGE TABLESPACE example; -- 该表空间下的所有用户的对象 PURGE TABLESPACE example USER oe; --该表空间下的某一用户的对象 1 2 清空某一用户的所有表空间下的对象(常用): PURGE RECYCLEBIN; 1 如果是DBA用户,可以一次性清空所有用户的所有表空间的对象: PURGE DBA_RECYCLEBIN; 1 最后补充一点,如果删表的时候,我们就确定不需要该数据,可以直接Drop的时候purge: DROP TABLE TABLE_NAME PURGE; ————————————————                          原文链接:https://blog.csdn.net/qq_36743482/article/details/86741365

相关推荐