今天又有朋友問到,當向一個表空間錯誤的添加了一個數據文件,如何來將這個文件刪除?
如果是在Oracle10g之前,刪除一個表空間中的數據文件後,其文件在數據庫數據字典中會仍然存在,除非你刪除表空間,否則文件信息不會清除。
但是從Oracle10gR2開始,Oracle允許我們徹底刪除一個空文件,不留痕跡。
但是注意:如果你向SYSTEM表空間錯誤的添加了一個文件,那麼就讓它在哪裡好了,不要動。
對於普通表空間,則可以參考以下步驟處理。
數據庫版本Oracle10gR2:
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle
Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production
向USERS表空間增加一個數據文件:
SQL> alter
tablespace users add datafile '/opt/Oracle/oradata/eygle/users02.dbf' size 10M;
Tablespace altered.
SQL> select
file#,name from v$datafile;
FILE# NAME
---------- --------------------------------------------------
1 /opt/Oracle/oradata/eygle/system01.dbf
2 /opt/Oracle/oradata/eygle/undotbs01.dbf
3 /opt/Oracle/oradata/eygle/sysaux01.dbf
4 /opt/Oracle/oradata/eygle/users01.dbf
5 /opt/Oracle/oradata/eygle/users02.dbf
5 rows selected.
確認表空間文件信息:
SQL> select file_name,file_id from dba_data_files where tablespace_name='USERS';
FILE_NAME FILE_ID
-------------------------------------------------- ----------
/opt/Oracle/oradata/eygle/users02.dbf 5
/opt/Oracle/oradata/eygle/users01.dbf 4
確認表空間未被存儲占用:
SQL> select segment_name,file_id,blocks from dba_extents where file_id=5;
no rows selected
刪除表空間中的空數據文件:
SQL> alter
tablespace users drop datafile '/opt/Oracle/oradata/eygle/users02.dbf';
Tablespace altered.
檢查數據字典,這個空文件的信息已經被徹底清除了:
SQL> select file_name,file_id from dba_data_files where tablespace_name='USERS';
FILE_NAME FILE_ID
-------------------------------------------------- ----------
/opt/Oracle/oradata/eygle/users01.dbf 4