...
...
...
首先,添加测试用数据文件TEST04.dbf
SQL> alter tablespace test01 add datafile '/app/oradata/datafile/TEST04.dbf' size 10m;
Tablespace altered.
SQL> select name,status from v$datafile where name like '%TEST0%';
NAME STATUS
-------------------------------------------------- --------------
/app/oradata/datafile/TEST02.dbf OFFLINE
/app/oradata/datafile/TEST01.dbf ONLINE
/app/oradata/datafile/TEST03.dbf ONLINE
/app/oradata/datafile/TEST04.dbf ONLINE
SQL> alter database datafile '/app/oradata/datafile/TEST04.dbf' offline;
alter database datafile '/app/oradata/datafile/TEST04.dbf' offline
*
ERROR at line 1:
ORA-01145: 除非启用了介质恢复, 否则不允许立即脱机
SQL> alter database datafile '/app/oradata/datafile/TEST04.dbf' offline drop;
Database altered.
SQL> select name,status from v$datafile where name like '%TEST0%';
NAME STATUS
-------------------------------------------------- --------------
/app/oradata/datafile/TEST02.dbf OFFLINE
/app/oradata/datafile/TEST01.dbf ONLINE
/app/oradata/datafile/TEST03.dbf ONLINE
/app/oradata/datafile/TEST04.dbf RECOVER
SQL> alter database recover datafile '/app/oradata/datafile/TEST04.dbf';
Database altered.
SQL> alter database datafile '/app/oradata/datafile/TEST04.dbf' online;
Database altered.
SQL> select name,status from v$datafile where name like '%TEST0%';
NAME STATUS
-------------------------------------------------- --------------
/app/oradata/datafile/TEST02.dbf OFFLINE
/app/oradata/datafile/TEST01.dbf ONLINE
/app/oradata/datafile/TEST03.dbf ONLINE
/app/oradata/datafile/TEST04.dbf ONLINE
可以看到,非归档模式下,不允许直接 offline 数据文件,必须增加 drop 选项。而对于RECOVER状态的文件同样可以恢复回去。
既然datafile都被删除,是否可以删除对于的数据文件记录咧?
SQL> alter tablespace test01 drop datafile '/app/oradata/datafile/TEST02.dbf';
alter tablespace test01 drop datafile '/app/oradata/datafile/TEST02.dbf'
*
ERROR at line 1:
ORA-03264: 无法删除本地管理的表空间中的脱机数据文件
可以看到,offline的数据文件是不允许被删除的。那再试试删除online的数据文件
SQL> select TABLESPACE_NAME ,file_id,ONLINE_STATUS from dba_data_files;
TABLESPACE_NAME FILE_ID ONLINE_STATUS
------------------------------ ---------- --------------
...
TEST_DB 5 ONLINE
TEST_DB 6 ONLINE
...
SQL> alter tablespace TEST_DB drop datafile 5;
alter tablespace TEST_DB drop datafile 5
*
ERROR at line 1:
ORA-03263: 无法删除表空间 TEST_DB 的第一个文件
SQL> alter tablespace TEST_DB drop datafile 6;
alter tablespace TEST_DB drop datafile 6
*
ERROR at line 1:
ORA-03262: 文件非空
必须找到位于该数据文件上的对象(
dba_extents),移动到其他表空间后(
alter table test move tablespace test01),再删除。
由此可见,datafile不能轻易被删除了。
删除表空间却简单:
SQL> drop tablespace test01 including contents and datafiles;
Tablespace dropped.
这样,表空间相关的数据文件也一并被删除了。