oracle分區表完全刪除的辦法,處理刪不掉的不規則表名

Oracle分區表完全刪除的辦法
當對一個再也不使用的分區表進行drop後,查詢user_tab_partitions視圖發現出現以下不規則的分區表表名:
SQL> select distinct table_name from user_tab_partitions;
BIN$l+Pv5l1jCMXgQKjAyQFA0A==$0
這樣很容易致使本身寫的"自動增長表的分區"的存過發生錯誤,所以爲了不再修改存過,只能把這些不規則的表名刪除才行.現提供以下方法完全刪除這些不規則的表名.oracle

其實當咱們執行drop table tablename的時候,不是直接把表刪除掉,而是放在了回收站裏,能夠經過查詢user_recyclebin查看被刪除的表信息.這樣,回收站裏的表信息就能夠被恢復或完全清除。
經過查詢回收站user_recyclebin獲取被刪除的表信息,若是想恢復被drop掉的表,能夠使用以下語句進行恢復
flashback table <user_recyclebin.object_name or user_recyclebin.original_name> to before drop;
上面的語句是將回收站裏的表恢復爲原表名稱
flashback table <user_recyclebin.object_name or user_recyclebin.original_name> to before drop rename to <new_table_name>;
將回收站裏的表恢復爲指定的新表名稱,表中數據不會丟失。.net

若要完全刪除表,則使用語句:drop table <table_name> purge;這樣drop後的表就不被放入回收站
若是是清除回收站中指定的表,能夠使用語句purge table <table_name>;
若是是清除當前用戶回收站全部的表,能夠使用語句purge recyclebin;
若是是清除全部用戶的回收站:purge dba_recyclebin;
到此,按上面的方法清除回收站的數據後,再查詢user_tab_partitions視圖,發現不規則表名已經沒有了
SQL> select distinct table_name from user_tab_partitions;
no rows selectedblog

在此順便再提一下truncate操做後不釋放空間的解決辦法
Truncate不支持回滾,而且不能truncate一個帶有外鍵的表,若是要刪除首先要取消外鍵,而後再刪除。
truncate table 後,有可能表空間仍沒有釋放,能夠使用以下語句:
alter table 表名稱 deallocate   UNUSED KEEP 0;
注意若是不加KEEP 0的話,表空間是不會釋放的。
例如:
alter table tablename deallocate   UNUSED KEEP 0;
或者:
TRUNCATE TABLE tablename DROP STORAGE才能釋放表空間。get

例如: truncate table  tablename DROP STORAGE;flash

 

轉載自:http://blog.csdn.NET/passion_wang/article/details/6089387it

相關文章
相關標籤/搜索