SQL> select file_name,file_id from dba_data_files where tablespace_name='TEST';
FILE_NAME FILE_ID
------------------------------ ----------
/oradata/june/test.dbf 6
/oradata/june/test1.dbf 9
/oradata/june/test2.dbf 10
SQL> select distinct owner,segment_name from dba_Extents where FILE_ID=6;
OWNER SEGMENT_NAME
------------------------------ --------------------
TEST EMPLOYEES
TEST ORDERS
TEST BFW_TEST
TEST B1
TEST STRACE
TEST T1
TEST TEST
TEST SYS_C0011275
TEST TEST2
TEST A2
TEST HOTEL
OWNER SEGMENT_NAME
------------------------------ --------------------
TEST EMP2
TEST T
TEST IDX_T
已选择14行。
SQL> select distinct owner,segment_name from dba_Extents where FILE_ID=9;
OWNER SEGMENT_NAME
------------------------------ --------------------
TEST T10
TEST T500
TEST B1
TEST DEPT
TEST EMP3
TEST A1
TEST IDX_EMP_EMPNO
TEST T100
TEST T1
TEST EMP_1
TEST EMP
OWNER SEGMENT_NAME
------------------------------ --------------------
TEST DUPES
TEST TEST3
TEST DEPT_1
TEST IDX_EMP_ENAME
TEST PK_DEPT
TEST KEY
已选择17行。
可以看到表T1 在数据文件6,9中有
SQL> select count(*) from t1;
COUNT(*)
----------
72607
SQL> alter tablespace test drop datafile '/oradata/june/test1.dbf' ;
alter tablespace test drop datafile '/oradata/june/test1.dbf'
*
第 1 行出现错误:
ORA-03262: 文件非空
可以看到,只有非空的数据文件才能进行删除,已经写入数据的数据文件不能进行删除。
尝试
alter database datafile '/oradata/june/test1.dbf' offline drop
SQL> alter database datafile '/oradata/june/test1.dbf' offline drop;
数据库已更改。
SQL> select count(*) from t1;
select count(*) from t1
*
第 1 行出现错误:
ORA-00376: 此时无法读取文件 9
ORA-01110: 数据文件 9: '/oradata/june/test1.dbf'
/oradata/june/test1.dbf数据文件中有t1表的数据
SQL> recover datafile 9;
完成介质恢复。
SQL> alter database datafile '/oradata/june/test1.dbf' online;
数据库已更改。
SQL> select count(*) from t1;
COUNT(*)
----------
72607