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