作者:david_zhang@sh 【转载时请以超链接形式标明文章】
链接:http://www.cnblogs.com/david-zhang-index/archive/2012/03/20/2408844.html?updated=1
一 DataFile脱机或联机的两种方法:
① ALTER DATABASE 语句修改单独的DataFile
② ALTER TABLESPACE 语句修改所有的DataFile
1.在NOARCHIVELOG模式下使DataFile脱机
1 SQL>alter database datafile '/u01/app/oracle/oradata/oracle/users01.dbf' offline drop/offline for drop;
该命令不会删除数据文件,只是将数据文件的状态更改为recover,,offline drop与offlline for drop没有区别,offline之后都需要进行recover才可以online,offline drop命令相当于把一个数据文件至于离线状态,并且需要恢复,数据文件的相关信息还会存在数据字典和控制文件中
2.在ARCHIVRLOG模式下使DataFile脱机
1 alter database datafile '/u01/app/oracle/oradata/oracle/users01.dbf' offline
example: SQL>alter database datafile '/u01/app/oracle/oradata/oracle/users01.dbf' offline; SQL>alter database datafile '/u01/app/oracle/oradata/oracle/users01.dbf' online;
3.修改TableSpace中所有DataFile
SQL>alter tablespace users offline;
当表空间脱机时,表空间里所有的数据文件将自动脱机,当表空间联机时,数据文件自动联机,无需介质恢复,数据文件脱机,但再联机时需要介质恢复,datafile被offline 时不会触发文件检查点,tablespace被offline时会触发文件检查点,当触发文件检查点时,数据文件scn号才会一致,这也是为什么online datafile需要media recovery而online tablespace不需要的原因。
注:修改某TableSpace中的所有数据文件,但是TableSpace本身的状态不改变
二 使用ALTER TABLESPACE命令删除表空间的数据文件
1 SQL>alter tablesapce users drop datafile '/u01/app/oracle/oradata/oracle/users01.dbf';
Oracle 10G R2开始,该语句可以来删除一个数据文件,并且相应的数据字典信息控制文件和磁盘上的文件也会清除,删除之后的原数据文件序列号可以重用
example: SQL>select file_name,online_status from dba_data_files; FILE_NAME ONLINE_STATUS /u01/app/oracle/oradata/oracle/users01.dbf recovery
1 SQL>alter tablespace users drop datafile '/u01/app/oracle//oracle/users01.dbf'; 2 3 ERROR at line 1: 4 5 ORA-03263: cannot drop the first file of tablespace users
因为数据文件被offline,所以才报错
注:该语句只能是datafile online的时候才可以使用,如果说对应的数据文件已经是offline for drop,那么仅针对 dictionary managed tablespaces 可用
三 删除表空间
SQL> drop tablespace users including contents and datafiles;