oracle 小议如何从表空间 删除 数据文件

Oracle不提供如删除表。

视图一样删除数据文件的方法,数据文件是表空间的一部分,所以不能“移走”表空间。

在对表空间/数据文件进行任何脱机、删除之前,首先对数据库进行一个全备份。

如果数据文件是所在表空间的唯一的数据文件,你只要简单地删除表空间即可:

DROP TABLESPACE INCLUDING CONTENTS;

你可以运行下面的命令来查询表空间包含多少数据文件。

select file_name, tablespace_name

from dba_data_files

where tablespace_name ='';

DROP TABLESPACE命令从Oracle数据字典删除表空间、数据文件和表空间的内容。Oracle不会再访问该表空间中的任何内容。物理地删除文件需要使用操作系统命令(Oracle从不物理地删除文件注:本文是针对8i或者之前,9i可以使用including datafile选项来删除物理文件>),依赖你的操作系统平台,有的操作系统需要Oracle完全关闭才才可以删除(例如在WINDOWS NT 中需要关闭数据库,停掉相应的服务,在有的情况下Oracle还可能持有文件锁)。

如果你的表空间有多个数据文件,而你不需要表空间中的内容,或者你可以很容易重新生产表空间的内容,你可以使用DROP TABLESPACE INCLUDING CONTENTS;命令来从Oracle数据字典删除表空间、数据文件和表空间的内容。Oracle不会再访问该表空间中的任何内容。然后重新创建表空间并重新导入数据。

如果你的表空间有多个数据文件,而你还需保留该表空间中的其它数据文件中的内容,则你必须首先export出该表空间中的所有内容。为了确定表空间中包含那些内容,运行:

select owner,segment_name,segment_type

from dba_segments

where tablespace_name=''

export出你想保留的内容。如果export结束,你可以使用DROP TABLESPACE tablespace INCLUDING CONTENTS. 这样永久删除表空间的内容,使用操作系统命令物理删除数据文件,按所需数据文件重新创建表空间,把数据import至表空间。

注意:

ALTER DATABASE DATAFILE OFFLINE DROP命令不能允许你删除数据文件,它的目的是脱机该数据文件以删除表空间。如果在归档模式下,使用ALTER DATABASE DATAFILE OFFLINE DROP来代替OFFLINE DROP。一旦数据文件脱机,Oracle不会再访问该数据文件的内容,但它仍然是表空间的一部分。这个数据文件在控制文件中标记OFFLINE,在数据库启动时不会对它与控制文件进行SCN的比较。在控制文件中保留这个数据文件的入口是方便以后的恢复。

如果你不想按照上述方法来删除表空间,还有其它一些解决方法。

1.         如果你想删除数据文件的原因是因为分配了不合适的文件大小,你可以考虑RESIZE命令。

2.         如果你不小心增加了一个数据文件,而这个文件还没有分配空间,你可以使用

ALTER DATABASE DATAFILE RESIZE;命令使其小于5个 Oracle块大小,如果数据文件的大小小于这个,Oracle将不会进行扩展数据文件。在以后,Oracle可以重建的时候来剔除这个不正确的文件。

上一篇:使用 React.js 和应用缓存构建快速同步应用程序


下一篇:产品解读 | 敏捷版数据库场景 一站式快速构建企业全场景数据库管理平台