ablog

不器用で落着きのない技術者のメモ

データファイルを削除しようとすると ORA-03262 エラー

不要なデータファイルを削除しようとすると、

$ 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

データファイル削除成功!