我10gR2环境上重演了一下您提到的问题,结论是删除没有问题。
1.创建包含两个数据文件的表空间
sec@ora10g> create tablespace TBS_SEC_D datafile '/oracle/oradata/ora10g/tbs_sec_d01.dbf' size 10m, '/oracle/oradata/ora10g/tbs_sec_d02.dbf' size 10m;
Tablespace created.
2.查看数据文件状态
sec@ora10g> col name for a60
sec@ora10g> select file#,status,name from v$datafile where name like '%sec%';
FILE# STATUS NAME
---------- ------- ------------------------------------------------------------
5 ONLINE /oracle/oradata/ora10g/tbs_sec_d01.dbf
10 ONLINE /oracle/oradata/ora10g/tbs_sec_d02.dbf
3.确认操作系统上两个数据文件确实存在
sec@ora10g> !ls -l /oracle/oradata/ora10g/tbs_sec*
-rw-r----- 1 oracle oinstall 10493952 Nov 25 13:36 /oracle/oradata/ora10g/tbs_sec_d01.dbf
-rw-r----- 1 oracle oinstall 10493952 Nov 25 13:36 /oracle/oradata/ora10g/tbs_sec_d02.dbf
4.模拟误删除其中一个数据文件
sec@ora10g> !rm -f /oracle/oradata/ora10g/tbs_sec_d02.dbf
5.确认文件已删除
sec@ora10g> !ls -l /oracle/oradata/ora10g/tbs_sec*
-rw-r----- 1 oracle oinstall 10493952 Nov 25 13:36 /oracle/oradata/ora10g/tbs_sec_d01.dbf
6.此时查看数据文件状态,状态没有异常
sec@ora10g> select file#,status,name from v$datafile where name like '%sec%';
FILE# STATUS NAME
---------- ------- ------------------------------------------------------------
5 ONLINE /oracle/oradata/ora10g/tbs_sec_d01.dbf
10 ONLINE /oracle/oradata/ora10g/tbs_sec_d02.dbf
7.手工将误删除的文件offline drop,成功
sec@ora10g> alter database datafile '/oracle/oradata/ora10g/tbs_sec_d02.dbf' offline drop;
Database altered.
8.此时,该文件的状态为“RECOVER”
sec@ora10g> select file#,status,name from v$datafile where name like '%sec%';
FILE# STATUS NAME
---------- ------- ------------------------------------------------------------
5 ONLINE /oracle/oradata/ora10g/tbs_sec_d01.dbf
10 RECOVER /oracle/oradata/ora10g/tbs_sec_d02.dbf
9.顺便演示一下offline drop另外一个正常的数据文件
sec@ora10g> alter database datafile '/oracle/oradata/ora10g/tbs_sec_d01.dbf' offline drop;
Database altered.
10.状态均变为“RECOVER”
sec@ora10g> select file#,status,name from v$datafile where name like '%sec%';
FILE# STATUS NAME
---------- ------- ------------------------------------------------------------
5 RECOVER /oracle/oradata/ora10g/tbs_sec_d01.dbf
10 RECOVER /oracle/oradata/ora10g/tbs_sec_d02.dbf
11.演示删除表空间,成功。
sec@ora10g> drop tablespace TBS_SEC_D including contents and datafiles;
Tablespace dropped.
12.最后确认,删除的很彻底。
sec@ora10g> select file#,status,name from v$datafile where name like '%sec%';
no rows selected
sec@ora10g> !ls -l /oracle/oradata/ora10g/tbs_sec*
ls: /oracle/oradata/ora10g/tbs_sec*: No such file or directory
因此,请问,您使用的数据库和操作系统的版本是什么?
还有一个思路,如果有备份,可以先将误删除的数据文件恢复回来,然后再正常删除(如果确实需要删除的话)。
secooler