說到 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$ 表,保護企業的數據安全,提高企業的運營效率。