不要なデータファイルを削除しようとすると、
$ su - oracle $ sqlplus / as sysdba SQL> alter tablespace users drop datafile '/u02/oradata/orcl/users002.dbf'; * ERROR at line 1: ORA-03262: the file is non-empty
と怒られた。
SQL> set linesize 200 SQL> col owner for a10 SQL> col segment_name for a30 SQL> col segment_type for a20 SQL> select e.owner, e.segment_name, e.segment_type, count(1) cnt from dba_data_files f, dba_extents e where f.file_name = '/u02/oradata/orcl/users002.dbf' and f.file_id = e.file_id group by e.owner, e.segment_name, e.segment_type; OWNER SEGMENT_NAME SEGMENT_TYPE CNT ---------- ------------------------------ -------------------- ---------- SCOTT EMP_PK INDEX 1 SCOTT EMP TABLE 1
データファイルにセグメントが残ってる。
必要なセグメントなので他の表領域に移動させる。
SQL> alter table scott.emp move tablespace scott_data; SQL> alter index scott.emp_pk rebuild online scott_indx;
確認すると、
SQL> select e.owner, e.segment_name, e.segment_type, count(1) cnt from dba_data_files f, dba_extents e where f.file_name = '/u02/oradata/orcl/users002.dbf' and f.file_id = e.file_id group by e.owner, e.segment_name, e.segment_type; no rows selected
空っぽになった。
SQL> alter tablespace users drop datafile '/u02/oradata/orcl/users002.dbf'; Tablespace altered. SQL> exit $ ls -l /u02/oradata/orcl/tbs_users002.dbf ls: /u02/oradata/orcl/users002.dbf: No such file or directory
データファイル削除成功!