当前位置: 代码迷 >> Oracle管理 >> 一个头疼的有关问题:oracle默认表空间由于误导数据库被撑大,现在小弟我把表删除了,但空间大小没降下来,如何解决
  详细解决方案

一个头疼的有关问题:oracle默认表空间由于误导数据库被撑大,现在小弟我把表删除了,但空间大小没降下来,如何解决

热度:403   发布时间:2016-04-24 04:02:57.0
一个头疼的问题:oracle默认表空间由于误导数据库被撑大,现在我把表删除了,但空间大小没降下来,怎么解决?
做过压缩处理,但也没效果,现在大约有5G大小的空间,据了解,新安装完,顶多一G空间吧?
------解决思路----------------------
你不会导入到了 SYSTEM 表空间了吧?

假定,你没有导入到 SYSTEM .

方法1. 把该表空间的数据导出来,删除重建 ,再导入
方法2. 使用 move ,建一个TBSA 表空间,把数据都移过来,删除原来表空间,再重命名TBSA。
------解决思路----------------------
如果时间允许,并且你这也是一个新库,没什么数据,就重建一个库吧,这个操作比较简单,出错少。

不然,真要一点一点的去调整,时间用的比较长不说,还可能把数据字典折腾坏了。
------解决思路----------------------
1、完全不要的表先truncate然后delete
2、如果直接delete了,用purge处理垃圾箱中的表,因为delete并不直接删除表;
做完如上操作后,可以收缩表空间文件大小
参考如下:
 如果盲目去操作,oracle会报ora-03297错误。表示在所定义的空间之后有数据存在,不能收缩。我们不得不查出最后的数据所处的位置, 然后表空间设置到稍比这位置大一点的大小。
  1. 查该数据文件中数据处在最大位置
    select max(block_id) from dba_extents where file_id=15;
      max(block_id)
        383497 
    查询file_id,也可在toad工具tablespace直接看到。
    seect file#,name from v$datafile;
  2. 查出最大块位置
   select 383497*8/1024 from dual;
      2996.0703125
    这说明该文件中最大使用块位于2996M与3000M之间,
  3. 修改表空间(也可用toad工具界面修改)
    ALTER DATABASE TEMPFILE '/opt/oracle/oradata/gctwp101/temp02.dbf' RESIZE 3000M;
------解决思路----------------------
删除意味着有一部分空间是可用的了。 但是 数据文件是不会缩小的。
------解决思路----------------------
http://blog.chinaunix.net/uid-15108676-id-2749522.html
楼主搜索‘收缩表空间的文件’
------解决思路----------------------
引用:
http://blog.chinaunix.net/uid-15108676-id-2749522.html
楼主搜索‘收缩表空间的文件’
正解
------解决思路----------------------
表空间内文件不止有数据,光删除表不一定有用。一般要使用到工具进行压缩和清除,不过建议还留着,万一出问题还有个备份
  相关解决方案