zoukankan      html  css  js  c++  java
  • Invalid segment BIN$xxx and dba_recyclebin was empty (回收站空,释放无效的BIN$xx空间)

    近来有套库空间紧张,发现有很大BIN$开头的TABLE partition,index partition 类型的段,查询确认是2个月前删除的对象,手动清空过dba_recyclebin使用purge,但都过去几天了,后来dba_recyclebin一直为空,发现对象BIN$XX还存在,ORACLE 在处理大的分区表时在开启RECYCLEBIN的情况有时会出现这种异常情况,下面记录一下这个CASE。

    SQL> select * from v$version;

    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
    PL/SQL Release 11.2.0.3.0 - Production
    CORE 11.2.0.3.0 Production
    TNS for HPUX: Version 11.2.0.3.0 - Production
    NLSRTL Version 11.2.0.3.0 - Production

    SQL> select bytes,segment_type,owner,tablespace_name,segment_name from dba_segments where segment_name like 'BIN$%'

    BYTES SEGMENT_TYPE OWNER TABLESPACE_NAME SEGMENT_NAME
    -------------------- ------------------ --------------- ------------------------------ ------------------------------
    5,006,950,400 INDEX PARTITION CDR CDR_INX7 BIN$Du34GVECb4zgVAAfKQ3k2w==$0
    13,659,799,552 INDEX PARTITION CDR CDR3 BIN$Du34GVECb4zgVAAfKQ3k2w==$0
    1,048,576 INDEX PARTITION CDR CDR3 BIN$Du34GVECb4zgVAAfKQ3k2w==$0
    80,321,970,176 TABLE PARTITION CDR CDR_INX5 BIN$Du34GVEDb4zgVAAfKQ3k2w==$0
    84,739,620,864 TABLE PARTITION CDR CDR4 BIN$Du34GVEDb4zgVAAfKQ3k2w==$0
    80,260,104,192 TABLE PARTITION CDR CDR_T1 BIN$Du34GVEDb4zgVAAfKQ3k2w==$0
    80,747,692,032 TABLE PARTITION CDR CDR_INX8 BIN$Du34GVEDb4zgVAAfKQ3k2w==$0
    ...

    select object_id from dba_objects where object_name like 'BIN%';
    --省略

    SQL> @oid 578398

    owner object_name object_type SUBOBJECT_NAME CREATED LAST_DDL_TIME status DATA_OBJECT_ID
    ------------------------- ------------------------------ ------------------ ------------------------------ ----------------- ----------------- --------- --------------
    CDR BIN$Du34GVEDb4zgVAAfKQ3k2w==$0 TABLE PARTITION GPRS312_MAX 20140722 22:27:02 20140828 17:14:30 VALID 592609

    SQL> select * from dba_tables where table_name='BIN$Du34GVEDb4zgVAAfKQ3k2w==$0';

    no rows selected

    SQL> select * from dba_tables where table_name like 'BIN%';

    no rows selected
    SQL> select 1 from cdr."BIN$Du34GVEDb4zgVAAfKQ3k2w==$0" partition(GPRS312_01) where rownum<2;

    1
    ----------
    1

    SQL> select * from dba_recyclebin;

    no rows selected

    SQL> select count(*) from dba_tab_partitions where table_name='BIN$Du34GVEDb4zgVAAfKQ3k2w==$0';

    COUNT(*)
    ----------
    31

    TIP:
    当分区表在RECYCLEBIN开启的情况下:
    drop N partition ,partitioon 会直接删除而不会进recyclebin
    drop table, 表信息会从DBA_TABLES 消失,dba_tab_partition 重命名为BIN$开头的对象,其它TRIGER,INDEX同类同,但同时会在DBA_RECYCLEBIN中记录table的BIN 和原表名及删除时的一些信息,而且可以使用BIN$开头的表名查询表记录。

    试着去删除

    SQL> purge index cdr."BIN$Du34GVECb4zgVAAfKQ3k2w==$0";
    purge index cdr."BIN$Du34GVECb4zgVAAfKQ3k2w==$0"
    *
    ERROR at line 1:
    ORA-38307: object not in RECYCLE BIN

    SQL> drop table cdr."BIN$Du34GVEDb4zgVAAfKQ3k2w==$0";
    drop table cdr."BIN$Du34GVEDb4zgVAAfKQ3k2w==$0"
    *
    ERROR at line 1:
    ORA-38301: can not perform DDL/DML over objects in Recycle Bin
    解决方法:

    SQL> ALTER SESSION SET RECYCLEBIN=OFF;
    Session altered.

    SQL> drop table cdr."BIN$Du34GVEDb4zgVAAfKQ3k2w==$0";
    Table dropped.
    如果session级关闭recyclebin不可以,可以尝试在实例级关闭或重启实例后再次尝试删除,本次清理释放了2T的空间。

    O对删除大分区表时的最佳实践:
    Demantra Large Table Partitions and Using the Flashback Recycle bin, recyclebin, dba_recyclebin and sys.RECYCLEBIN$ Purge Best Practice (文档 ID 1962730.1)

  • 相关阅读:
    火狐中,设置align="center"失效的解决方法
    爱学习的你,不知道这五个神奇网站怎么行
    详解Linux运维工具:运维流程管理、运维发布变更、运维监控告警
    运维工程师必备技能:网络排错思路讲解
    非常全的Linux基础知识点
    Linux系统CPU占用率较高问题排查思路
    MySQL数据库参数优化
    Linux查看硬件配置
    JumpServer堡垒机安装笔记
    nginx的安装和负载均衡例子(RHEL/CentOS7.4)
  • 原文地址:https://www.cnblogs.com/travel6868/p/5016958.html
Copyright © 2011-2022 走看看