如果是在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 |