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)

时间: 2025-01-10 15:38:17

Invalid segment BIN$xxx and dba_recyclebin was empty (回收站空,释放无效的BIN$xx空间)的相关文章

ORA-10635: Invalid segment or tablespace type

上周星期天在迁移数据时,碰到了ORA-10635: Invalid segment or tablespace type 错误,当时的操作环境如下: 操作系统版本: [[email protected] scripts]$ more /etc/issue Red Hat Enterprise Linux ES release 4 (Nahant Update 6) 数据库版本  : SQL> select * from v$version; BANNER --------------------

php empty 和空字符串区别

php empty 和空字符串区别 如果 var 是非空或非零的值,则 empty() 返回 FALSE.换句话说,"".0."0".NULL.FALSE.array().var $var; 以及没有任何属性的对象都将被认为是空的,如果 var 为空,则返回 TRUE. 除了当变量没有置值时不产生警告之外,empty() 是 (boolean) var 的反义词. PHP中有很多函数功能类似,却有着细微的差别...is_null, empty, isset, uns

java——解决java.io.StreamCorruptedException: invalid stream header: xxx

这个错误是由序列化引起的,可能的原因以及解决方法: 1.kryo对于集合(比如 Map)的反序列化会失效,报这个错误,解决办法比较暴力,不用kryo了,直接用java原生方法. 2.使用Java原生方法要注意,序列化和反序列化的方式,不能直接使用str.getBytes()获取二进制流,应该使用序列化方式获取二进制流: https://blog.csdn.net/weixin_33881050/article/details/87100661 3.对于Map仍然序列化失败,这时候可以将Map对象

empty()函数经典详解

<?php /** * 当var不存在,返回TRUE; * 当var存在,并且是一个非空非零的值(真值)时返回 FALSE 否则返回 TRUE . * 以下的东西被认为是空的: * * 1."" (空字符串) * 2.0 (作为整数的0) * 3.0.0 (作为浮点数的0) * 4."0" (作为字符串的0) * 5.NULL * 6.FALSE * 7.array() (一个空数组) * 8.$var; (一个声明了,但是没有值的变量) */ $a; $b

Oracle手工生成段建议(Segment Advisor)

一.描写叙述 从oracle 10g開始,oracle引入了段顾问(Segment Advisor),用于检查数据库中是否有与存储空间相关的建议,而且从10gR2開始,oracle自己主动调度并执行一个段顾问作业,定时分析数据库中的段,并将分析结果放在内部表中.可是非常多情况下,作为DBA,我们都会将oracle自带的各种调度作业(统计信息收集.段顾问.SQL顾问等等)禁用,进而通过手工进行控制执行类似作业(或者为了节省资源).因此非常多情况下,我们都没实用到段顾问这个非常实用的功能.这篇文章就

C#中string.Empty和&quot;&quot;、null的区别

string.Empty是string类的一个静态常量,而""则表示一个空字符串. string是一种特殊的引用类型,它的null值则表示没有分配内存. 使用ILSpy反编译String类,可以看到string.Equalus方法重写了Object的Equalus()方法:先比较引用,再比较字符串的内容,地址相同,值必相同. 1 // 重写Object方法 2 [__DynamicallyInvokable, ReliabilityContract(Consistency.WillNo

myeclipse中导入js报如下错误Syntax error on token &quot;Invalid Regular Expression Options&quot;, no accurate correc

今天在使用bootstrap的时候引入的js文件出现错误Syntax error on token "Invalid Regular Expression Options", no accurate correc: 大概意思就是无效的表达式什么的,具体解决方法如下: 1.选中报错的js文件或报错内容.2.右键选择 MyEclipse-->Exclude From Validation .3.再右键选择 MyEclipse-->Run Validation 即可. 本文参照h

string 新常量 Empty

不知道什么时候支持的这个. procedure TForm1.FormCreate(Sender: TObject); var Tmp: string; begin Tmp := 'Hello World'; SMG(Tmp); // 输出 Hello World SMG(Tmp.Empty); // 输出空 SMG(String.Empty); // 输出空 SMG(Tmp); // 依然输出 Hello World end; 注意,这个空的用法. 原文地址:https://www.cnblo

The remote certificate is invalid according to the validation procedure

The remote certificate is invalid according to the validation procedure   根据验证过程中远程证书无效 I'm calling an ASP.NET web service from an ASP.NET web application. The two applications are on different servers. The web service requires SSL and presents the a