Oracle因为本身的多重验证机制所有在删除表空间时不像MySQL中删除database一样,可以通过外部的删除直接删除掉database文件夹就可以删除掉database,当然这两者是2种不同的东西,在此仅用于举例说明。在Oracle中表空间相当于系统中的硬盘,Oracle可以通过修改配置表空间来对Oracle下的数据进行存储,所以在Oracle下表空间是非常重要的,尤其是在表空间文件处理不当都会造成Oracle的不稳定,在此就说一说如何正确的删除Oracle的表空间。

   删除表空间时,需要确定在没有数据使用时或者该表空间的数据确定不要时候才能继续,所以在任何删除之前,需要让表空间离线,如下:

SQL> alter tablespace tablespace_name offline;

在使表空间正确的离线后,才能对表空间进行正确的删除的操作,而删除表空间又分为几种情况,使用也很简单,如下:

--删除空的表空间,但是不包含物理文件
SQL> drop tablespace tablespace_name;
--删除非空表空间,但是不包含物理文件
SQL> drop tablespace tablespace_name including contents;
--删除空表空间,包含物理文件
SQL> drop tablespace tablespace_name including datafiles;
--删除非空表空间,包含物理文件
SQL> drop tablespace tablespace_name including contents and datafiles;
--如果其他表空间中的表有外键等约束关联到了本表空间中的表的字段,就要加上CASCADE CONSTRAINTS
SQL> drop tablespace tablespace_name including contents and datafiles CASCADE CONSTRAINTS;

要注意的是这些操作都需要使用DBA用户才能操作,而在需要删除表空间的物理文件时需要格外的注意,不然一旦删除表空间的物理文件,Oracle的数据是无法恢复的,Oracle的表空间物理文件的路径在创建表空间时就有定义,当然如果忘记了,可以查询Oracle的系统表来查询:

SQL> select file_name,tablespace_name from dba_data_files;

如何是在删除表空间时忘记删除相应的物理文件,需要在Oracle停止后直接用系统手工删除其物理文件,切记不可在Oracle运行时直接删除

当然,还有更多的查询方式在以前有写过Oracle下的常用的系统表和系统视图,在此就不做过多的说明,需要的可以参看:http://jim123.blog.51cto.com/4763600/1947872