ITPub博客

首页 > 数据库 > 数据库开发技术 > 10G删除空数据文件

10G删除空数据文件

原创 数据库开发技术 作者:cccgw 时间:2009-06-01 11:15:26 0 删除 编辑

sys@ORCL>alter tablespace users drop datafile
2 '/u01/app/oracle/oradata/orcl/users02.dbf';

对于DataGuard,不能使用这个命令,否则redo会坏掉使得备库要重做。到10204还需打上Genernal Bundle。

[@more@]

作者 :OoNiceDream【转载时请务必以超链接形式标明文章原始出处和作者信息】
链接:http://www.dbaroad.com/archives/2009/05/10g_drop_datafile.html

Oracle 9I、10G都可以采用:Alter database datafile file_name offline drop;来删除数据文件,但当数据文件为非空时,存放在该数据文件上的数据就无法读据了:

SYS@sky> alter database datafile
  2  'E:USERS03.DBF' offline drop;
 
数据库已更改。
 
SYS@sky> select count(*) from test01;
select count(*) from test01
                     *
ERROR 位于第 1 行:
ORA-00376: 此时无法读取文件 6
ORA-01110: 数据文件 6: 'E:USERS03.DBF'

采用该命令来删除数据文件,相关数据字典信息是无法清除的:

SYS@sky> select FILE#,TS#,name,status from v$datafile
  2  where ts#=4;
 
FILE#  TS# NAME                              STATUS
----- ---- --------------------------------- -------
    2    4 E:USERS02.DBF                    ONLINE
    4    4 E:USERS01.DBF                    ONLINE
    6    4 E:USERS03.DBF                    RECOVER

不过这条命令在恢复时还是很挺有用的,比如只恢复某个表空间的数据时,其它表空间的数据文件就可以offline drop了。

从Oracle 10G R2开始,可以采用:Alter tablespace tablespace_name drop datafile file_name;来删除一个空数据文件,并且相应的数据字典信息也会清除:

sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files 
  2  where tablespace_name='USERS';
 
FILE_ID FILE_NAME                                    TABLESPACE_NAME
------- -------------------------------------------- ------------------
      4 /u01/app/oracle/oradata/orcl/users01.dbf     USERS
 
sys@ORCL>alter tablespace users add datafile
  2  '/u01/app/oracle/oradata/orcl/users02.dbf' size 5M autoextend off;
 
Tablespace altered.
 
sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files
  2  where tablespace_name='USERS';
 
FILE_ID FILE_NAME                                    TABLESPACE_NAME
------- -------------------------------------------- -------------------
      4 /u01/app/oracle/oradata/orcl/users01.dbf     USERS
      9 /u01/app/oracle/oradata/orcl/users02.dbf     USERS
 
sys@ORCL>drop table test;
 
Table dropped.
 
sys@ORCL>create table test tablespace users
  2  as 
  3  select * from dba_objects;
 
Table created.
 
sys@ORCL>select SEGMENT_NAME,FILE_ID,BLOCKS from dba_extents
  2  where file_id=9;
 
SEGMENT_NAME                      FILE_ID     BLOCKS
------------------------------ ---------- ----------
TEST                                    9          8
TEST                                    9          8
TEST                                    9          8
TEST                                    9          8
TEST                                    9          8
TEST                                    9          8
TEST                                    9          8
TEST                                    9          8
TEST                                    9          8
TEST                                    9          8
TEST                                    9          8
TEST                                    9          8
TEST                                    9          8
TEST                                    9          8
TEST                                    9          8
TEST                                    9        128
TEST                                    9        128
 
17 rows selected.
 
sys@ORCL>alter table test move tablespace PERFSTAT;
 
Table altered.
 
sys@ORCL>select SEGMENT_NAME,FILE_ID,BLOCKS from dba_extents
  2  where file_id=9;
 
no rows selected
 
sys@ORCL>alter tablespace users drop datafile
  2  '/u01/app/oracle/oradata/orcl/users02.dbf';
 
Tablespace altered.
 
sys@ORCL>select file_id,file_name,tablespace_name from dba_data_files
  2  where tablespace_name='USERS';
 
FILE_ID FILE_NAME                                    TABLESPACE_NAME
------- -------------------------------------------- ---------------------
      4 /u01/app/oracle/oradata/orcl/users01.dbf     USERS
 
sys@ORCL>

当然如果数据文件是非空的,drop时就有提示了:

sys@ORCL>alter tablespace users drop datafile
  2  '/u01/app/oracle/oradata/orcl/users02.dbf';
alter tablespace users drop datafile
*
ERROR at line 1:
ORA-03262: the file is non-empty

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/668365/viewspace-1022666/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2012-08-27

  • 博文量
    82
  • 访问量
    1035051