一、Oracle的Drop Table陳述句
首先,我們來看一下Oracle Drop Table的語法格式,

解釋一下里面的引數:
schema
- Schema表示方案名稱,這里可以理解為用戶名,預設為當前用戶下的表,比如,要洗掉scott用戶下的emp表,drop table scott.emp
purge
- purge可選項,如果開啟了回收站(oracle 10g以后,回收站默認是開啟的)功能,不帶purge選項,表示洗掉的表放進回收站,空間不回收 ,使用flashbask可以閃回該表,帶purge選項,則表示將表洗掉,釋放空間,
cascade constraints
- 可選項,如果有其它表關聯到要洗掉的表的主鍵列或唯一鍵列(要洗掉的表是主表(父表),從表(子表)有外鍵關聯到這張表),那么,直接用drop table會報錯,這時候如果想要強制洗掉這張表,就需要加上cascade constraints選項,
二、閃回洗掉:Flashback Drop
使用閃回洗掉功能,可以撤消 DROP TABLE 陳述句產生的影響,而不需要求助于傳統時間點恢復,這是由回收站實作的,通過 DBA_RECYCLEBIN 視圖可查詢回收站,
- 查看當前資料庫的回收站功能是否開啟
conn / as sysdba select value from v$parameter where name='recyclebin';
- 執行drop table陳述句
使用scott用戶登錄 SQL> conn scott/tiger Connected. 查看當前用戶下的表 SQL> select * from tab; TNAME TABTYPE CLUSTERID -------------------- ------- ---------- BONUS TABLE DEPT TABLE EMP TABLE EMP1 TABLE SALGRADE TABLE 洗掉一張表 SQL> drop table emp1; Table dropped. 查看當前用戶下的表 SQL> select * from tab; TNAME TABTYPE CLUSTERID -------------------- ------- ---------- BIN$opkhRg3T0MPgVaUg TABLE q/kbkw==$0 BONUS TABLE DEPT TABLE EMP TABLE SALGRADE TABLE
- 通過回收站中的物件名稱查詢表的資料
下面的方式是錯誤的: select * from BIN$opkhRg3T0MPgVaUgq/kbkw==$0; 需要加上雙引號: select * from "BIN$opkhRg3T0MPgVaUgq/kbkw==$0";
- 查看回收站
show recyclebin;
- flashback table的語法格式

在執行閃回表操作期間,資料庫獲取閃回串列中所有指定的報表獨立DML鎖,當正在恢復到之前狀態時,這些鎖阻止對表的任何操作,閃回表操作在單個事物中執行,不管閃回表中指定表的數量,要么所有的表都恢復到早期狀態,要么都沒恢復,如果任何表的閃回表操作失敗,那么整個陳述句都失敗,閃回操作完成時,表中的資料與表之前的時間點一直,但是,FLASHBACK TABLE到SCN或時間戳不保存rowid,FLASHBACK TABLE TO BEFORE DROP不能恢復參考約束,資料庫不能恢復與表關聯的早期結構的統計資訊,表當前的索引是恢復,并反映還原點表的狀態,如果該索引在還原點不存在,資料更新索引里來反映還原點表的狀態,然而,如果索引是在當前時間和還原點之間被洗掉,是不能恢復,
- 執行閃回洗掉
flashback table emp1 to before drop; 也可以通過回收站中的名字執行閃回: flashback table “BIN$opkhRg3T0MPgVaUgq/kbkw==$0” to before drop;
- 清慷訓收站
purge recyclebin;
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/7327.html
標籤:Oracle
下一篇:【趙強老師】SQL的字符函式
