淘先锋技术网

首页 1 2 3 4 5 6 7

说到 Oracle 数据库的表,一定有不少人听说过 bin$ 表,那么这个表格是用来干嘛的呢?它又是怎么被创建出来的呢?下面我们来详细探讨一下 bin$ 表。

bin$ 表,又称为回收站表,是 Oracle 数据库中的一张特殊表。用来存储已经被删除了的表的元数据,这里所谓的元数据指的是表的各种信息,如表名、列名、列宽、约束、索引等。当用户删除一张表的时候,该表的数据不会立即被删除,而是交由 Oracle 数据库暂时存储在回收站中。这时 Oracle 数据库会自动创建一个名字以 BIN$ 为开头的回收站表,其中包含了被删除的表的元数据。

CREATE TABLE emp (
empno    NUMBER(4),
ename    VARCHAR2(10),
job      VARCHAR2(9),
mgr      NUMBER(4),
hiredate DATE,
sal      NUMBER(7, 2),
comm     NUMBER(7, 2),
deptno   NUMBER(2)
);
DROP TABLE emp;
SELECT table_name, original_name
FROM recyclebin;
TABLE_NAME                     ORIGINAL_NAME
------------------------------ ------------------------------
BIN$RzszTe6FSmDV5QEAABAAJQ==$0 EMP

在上面的代码中,我们以 emp 表为例。当我们执行 DROP TABLE emp; 的时候,而且我们会发现,此时 emp 表并未从数据库中消失。如果我们再执行一次 SELECT table_name, original_name FROM recyclebin; 命令,我们就会看到这样的结果:TABLE_NAME 显示为 BIN$ 开头的一串字符,而 ORIGINAL_NAME 显示的是我们刚才删除的表的名称。这里 BIN$ 开头的一串字符就是回收站表的名称,而这个表格中存储的就是我们刚才删除的表 emp 的元数据。

要恢复被删除的表也相对简单,对于本例,可以执行如下 SQL 语句:

FLASHBACK TABLE "BIN$RzszTe6FSmDV5QEAABAAJQ==$0" TO BEFORE DROP;

执行上述语句即可将 emp 表重新恢复出来,就好像我们从未删除过这个表一样。在企业中,bin$ 表是非常重要的,它可以让企业在误删除表格的时候,以最快的速度将表格恢复回来,为企业节省大量的时间和人力。

除了手工 DROP TABLE 外,当表的所有索引和约束被删除时,或者表没有被备份过时,Oracle 的自动级联删除等情况下 Oracle 数据库也会自动将表统一存放到回收站中,我们无法再次使用表名访问这个已删除的表。想要将它恢复,必须使用回收站中的名字进行访问。

综上所述,bin$ 表是 Oracle 数据库为了保护数据的安全性,而设计的一种特殊表格。在删除了表的时候,这个表能够将被删除表的元数据保存到回收站中,并且可以在需要的时候快速恢复表。企业使用 Oracle 数据库时不妨考虑使用 bin$ 表,保护企业的数据安全,提高企业的运营效率。