10G刪除空資料檔案

cccgw發表於2009-06-01

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

對於DataGuard,不能使用這個命令,否則redo會壞掉使得備庫要重做。到10204還需打上Genernal Bundle。

[@more@]

作者 :【轉載時請務必以超連結形式標明文章原始出處和作者資訊】
連結:

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部落格 ” ,連結:http://blog.itpub.net/668365/viewspace-1022666/,如需轉載,請註明出處,否則將追究法律責任。

相關文章