Oracle 删除表空间回收磁盘空间

Posted catoop

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle 删除表空间回收磁盘空间相关的知识,希望对你有一定的参考价值。

1、查询表空间和表空间数据库文件路径

SQL> select * from dba_data_files;

2、删除表空间

SQL> drop tablespace 表空间名称;

3、再次查询表空间的数据库文件对应表空间名称是否还存在

SQL> select * from dba_data_files;

4、手工删除表空间物理文件

表空间被删除后,表空间的数据文件并不会被系统回收并释放,所以还需要手工删除它。

[root@localhost orcl] rm -rf 表空间数据文件路径

如果想在删除表空间时和数据文件一同删除,可以按照如下命令操作:

SQL> drop tablespace 表空间名称 including contents and datafiles;

注意事项:

1、删除表空间之前记得断开所有用户连接,否则可能出现无法删除的报错。

2、删除表空间之后查看服务器磁盘占用情况,如果发现和删除前的是一样的没有变化,则使用命令 lsof -n | grep deleted 找到刚才删除的dbf文件(后边会有一个deleted的标识),查看对应的pid,直接kill掉就可以了(这是因为这些被删除的表空间数据文件还被数据库进程所持有,在进程关闭之前磁盘空间是不会释放的,如果想要验证该方法的可用性把数据库重启一次就可以了,数据库重启的效果等同于使用kill命令)。

如下SQL可以更直观的查看表空间统计情况:

select a.tablespace_name                      "表空间名称",
       b.FILE_NAME                            "表空间文件",
       total / 1024 / 1024                    "大小M",
       FREE / 1024 / 1024                     "剩余大小M",
       (TOTAL - FREE) / 1024 / 1024           "使用大小M",
       ROUND((TOTAL - FREE) / TOTAL, 4) * 100 "使用率"
from (select tablespace_name, sum(bytes) free from dba_free_space group by tablespace_name) a,
     (select tablespace_name, FILE_NAME, sum(bytes) total from dba_data_files group by tablespace_name, FILE_NAME) b
where a.tablespace_name = b.tablespace_name;

(END)

以上是关于Oracle 删除表空间回收磁盘空间的主要内容,如果未能解决你的问题,请参考以下文章

表删除后回收磁盘空间

oracle数据库创建自动增长的表空间语句怎么写?

如何检查Oracle的归档空间是不是满了

数据文件resize回收空间

oracle数据库创建自动增长的表空间语句怎么写?

如何查看oracle剩余表空间