ITPub博客

首页 > 数据库 > Oracle > ORACLE在drop大表后,resize重设数据文件大小

ORACLE在drop大表后,resize重设数据文件大小

原创 Oracle 作者:gavin_oracle 时间:2015-04-13 15:50:27 0 删除 编辑


情景再现:

之前练习的时候,scott用户创建了一个两千万行的表emp3,导致scott用户的默认表空间的数据文件增长很大。
练习结束后,drop掉emp3表后,想通过resize重设users表空间数据文件的大小。

SCOTT@prod>select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BONUS                          TABLE
DEPT                           TABLE
EMP                            TABLE
EMP3                           TABLE
PLAN_TABLE                     TABLE
SALGRADE                       TABLE
TEST                           TABLE

drop表emp3前:
SCOTT@prod>select count(*) from emp3;

  COUNT(*)
----------
  20000000

[root@rh131:prod]$ls -lh users01.dbf 
-rw-r----- 1 oracle oinstall 2.7G Apr 13 14:26 users01.dbf

drop表emp3后
SCOTT@prod>drop table emp3;

Table dropped.

[root@rh131:prod]$ls -lh users01.dbf 
-rw-r----- 1 oracle oinstall 2.7G Apr 13 14:26 users01.dbf

大小没有变化
查看各个数据文件真实的使用空间
SYS@prod>col file_name for a50;
SYS@prod>select file_name, sum(e.bytes)/1024/1024 as MB
  2  from dba_extents e join dba_data_files f on e.file_id=f.file_id
  3  group by file_name;

FILE_NAME                                                  MB
-------------------------------------------------- ----------
/u01/app/oracle/oradata/prod/system01.dbf            748.4375
/dsk1/oradata/prod/undotbs101.dbf                        1.25
/dsk1/oradata/prod/users01.dbf                          12.25
/dsk2/oradata/prod/undotbs202.dbf                           9
/u01/app/oracle/oradata/prod/sysaux01.dbf             557.625
/u01/app/oracle/oradata/prod/example01.dbf            309.125
/u01/app/oracle/oradata/prod/sptbs01.dbf               144.75
/dsk1/oradata/prod/undotbs201.dbf                       5.875

8 rows selected.

resize重设数据文件大小
SYS@prod>alter database datafile '/dsk1/oradata/prod/users01.dbf' resize 15m;
alter database datafile '/dsk1/oradata/prod/users01.dbf' resize 15m
*
ERROR at line 1:
ORA-03297: file contains used data beyond requested RESIZE value

报错说文件包含使用的数据大小超过我resize的大小


再次查看scott的拥有的表
SCOTT@prod>select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
BIN$E5bCqFNOE47gUwEAAH9LAQ==$0 TABLE
BONUS                          TABLE
DEPT                           TABLE
EMP                            TABLE
PLAN_TABLE                     TABLE
SALGRADE                       TABLE
TEST                           TABLE

7 rows selected.

发现多了一个名字很怪的表。
其实,
1、从oracle10g开始删除数据库表的时候并不是真正删除,而是放到了recyclebin中,这个过程类似 windows里面删除的文件会被临时放到回收站中。
2、删除的表系统会自动给他重命名就是你看到的 【BIN$】开头的名字
3、通过 show recyclebin 命令可以查看被删掉的表的详细信息,或者查询
    select * from recyclebin;
4、可以收回表
    flashback table emp3 to before drop;
5、可以清空回收站
     purge recyclebin;
6、如果不想删除的表经过回收站
    可以drop table emp3 purge;
    或者停用数据库的回收战功能
     alter system set recyclebin = off;

清空回收站后,再resize就成功了!!!


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/30136543/viewspace-1571841/ ,如需转载,请注明出处,否则将追究法律责任。

下一篇: 没有了~
请登录后发表评论 登录
全部评论

注册时间:2015-02-12

  • 博文量
    3
  • 访问量
    18661