恢复的原理,请查看关于该恢复主题的第一篇博文:
http://fly1116.blog.51cto.com/8301004/1337681
      在数据库非归档状态,没有任何的备份情况下,通过操作系统命令rm,误删除了某一个表空间下所有数据文件,要如何恢复呢
      1、数据库版本11.1.0.7.0和数据库处于非归档状态

SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.1.0.7.0 - 64bit Production
PL/SQL Release 11.1.0.7.0 - Production
CORE    11.1.0.7.0      Production
TNS for Linux: Version 11.1.0.7.0 - Production
NLSRTL Version 11.1.0.7.0 - Production
SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            /archivelog
Oldest online log sequence     31
Current log sequence           33

    2、在fly用户下创建fly表,在sys用户下创建表fly_sys,表记录分别为:2256800和70525

SQL> conn fly/fly
Connected.
SQL> create table fly as select * from dba_objects;
Table created.
SQL> insert into fly select * from fly;
70525 rows created.
SQL> /
141050 rows created.
SQL> /
282100 rows created.
SQL> /
564200 rows created.
SQL> /
1128400 rows created.
SQL> commit;
Commit complete.
SQL> select count(*) from fly;
COUNT(*)
----------
2256800
SQL> conn sys/oracle as sysdba
Connected.
SQL> drop table fly_sys purge;
Table dropped.
SQL> create table fly_sys as select * from dba_objects;
Table created.
SQL> select count(*) from fly_sys;
COUNT(*)
----------
70525

    3、删除fly表空间下的数据文件

SQL> col file_name format a80
SQL> select file_name from dba_data_files where tablespace_name='FLY';
FILE_NAME
--------------------------------------------------------------------------------
/home/oracle/oradata/fly/datafiles/fly01.dbf
SQL> col file_name format a60
SQL> select file_name from dba_data_files where tablespace_name='FLY';
FILE_NAME
------------------------------------------------------------
/home/oracle/oradata/fly/datafiles/fly01.dbf
SQL> host rm /home/oracle/oradata/fly/datafiles/fly01.dbf
SQL> host ls /home/oracle/oradata/fly/datafiles/fly01.dbf
ls: /home/oracle/oradata/fly/datafiles/fly01.dbf: No such file or directory

    4、fly用户创建表报错

SQL> create table fly008 as select * from fly;
create table fly008 as select * from fly
*
ERROR at line 1:
ORA-01116: error in opening database file 7
ORA-01110: data file 7: '/home/oracle/oradata/fly/datafiles/fly01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3

    5、停止监听,kill通过监听连接过来的进程

oracle@fly007:~> lsnrctl stop
LSNRCTL for Linux: Version 11.1.0.7.0 - Production on 09-DEC-2013 17:02:56
Copyright (c) 1991, 2008, Oracle.  All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.46.200.5)(PORT=1521)))
The command completed successfully
oracle@fly007:~> ps aux | grep LOCAL=NO | grep -v grep | awk '{print $2}' | xargs kill -9
oracle@fly007:~>

    6、查看dbw0进程pid,查看哪些数据文件被删除了,拷贝被删除的数据文件到原来的位置

oracle@fly007:~> ps aux | grep dbw0 | grep -v grep
oracle    1257  0.1  4.3 3430848 352280 ?      Ss   15:36   0:01 ora_dbw0_apple
oracle@fly007:~> cd /proc/1257/fd
oracle@fly007:/proc/1257/fd> ls -l | grep delete
lrwx------ 1 oracle oinstall 64 2013-12-09 15:55 10 -> /home/oracle/product/11g/db/dbs/lkinstapple (deleted)
lrwx------ 1 oracle oinstall 64 2013-12-09 15:55 27 -> /home/oracle/oradata/fly/datafiles/fly01.dbf (deleted)
oracle@fly007:/proc/1257/fd> cp 27 /home/oracle/oradata/fly/datafiles/fly01.dbf
oracle@fly007:/proc/1257/fd>

    7、对数据文件进行offline,然后recover datafile

SQL> conn sys/oracle as sysdba
Connected.
SQL> alter database datafile '/home/oracle/oradata/fly/datafiles/fly01.dbf' offline; //由于未开归档,不能进行offline的操作
alter database datafile '/home/oracle/oradata/fly/datafiles/fly01.dbf' offline
*
ERROR at line 1:
ORA-01145: offline immediate disallowed unless media recovery enabled
SQL> alter database datafile '/home/oracle/oradata/fly/datafiles/fly01.dbf' offline drop; //需要使用offline drop
Database altered.
SQL> recover datafile '/home/oracle/oradata/fly/datafiles/fly01.dbf';
Media recovery complete.
SQL> alter database datafile '/home/oracle/oradata/fly/datafiles/fly01.dbf' online;

      8、查看表的数据,完全恢复

SQL> conn fly/fly
Connected.
SQL> select count(*) from fly;
COUNT(*)
----------
2256800
SQL> conn sys/oracle as sysdba
Connected.
SQL> select count(*) from fly_sys;
COUNT(*)
----------
70525
SQL>