• oracle分区表彻底删除的办法,处理删不掉的不规则表名


    Oracle分区表彻底删除的办法
    当对一个不再使用的分区表进行drop后,查询user_tab_partitions视图发现出现如下不规则的分区表表名:
    SQL> select distinct table_name from user_tab_partitions;
    BIN$l+Pv5l1jCMXgQKjAyQFA0A==$0
    这样很容易导致自己写的"自动增加表的分区"的存过发生错误,因此为了避免再修改存过,只能把这些不规则的表名删除才行.现提供如下方法彻底删除这些不规则的表名.

    其实当我们执行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>;
    将回收站里的表恢复为指定的新表名称,表中数据不会丢失。

    若要彻底删除表,则使用语句: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 selected

    在此顺便再提一下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才能释放表空间。

    例如: truncate table  tablename DROP STORAGE;

    转载自:http://blog.csdn.NET/passion_wang/article/details/6089387

  • 相关阅读:
    js将图片转换为base64
    java 后台将base64字符串保存为图片
    mysql truncate drop delete的区别
    java的反射机制
    mysql的三大范式
    EasyUi datagrid鼠标的悬停效果
    SimpleDateFormat关于时间类的一些常用处理
    mysql修改表字段属性类型
    Spring Boot 之注解@Component @ConfigurationProperties(prefix = "sms")
    tomcat如何修改发布目录
  • 原文地址:https://www.cnblogs.com/xiaoliu66007/p/7474231.html
Copyright © 2020-2023  润新知