环境:数据库在Open的状态,然后rm -rf users.dbf (删除users表空间),最后找回users.dbf文件。
在回复的时候,回复的方法跟数据库的版本关系不大(因为是物理文件),只是跟操作系统有一定的关系,如:Red hat Linux , Solaris Linux 等等。
下面进行演示:
删除users表空间.
1、我们首先进入Sqlplus,然后执行SQL语句:
select name from v$datafile;
NAME
--------------------------------------------------------------------------------
/u01/app/oracle/oradata/prod/disk4/system01.dbf
/u01/app/oracle/oradata/prod/disk2/undotbs01.dbf
/u01/app/oracle/oradata/prod/disk5/sysaux01.dbf
/u01/app/oracle/oradata/prod/disk5/bigtbs01.dbf
/u01/app/oracle/oradata/prod/disk5/indx01.dbf
/u01/app/oracle/oradata/prod/disk2/users01.dbf
/u01/app/oracle/oradata/prod/disk3/oltp01.dbf
7 rows selected.
SQL> !rm /u01/app/oracle/oradata/prod/disk2/users01.dbf今天尝试了一下,在Linux下删除一个数据文件,然后进行回复。
2、此时,users表空间已经被删除了,我们已经无法在users表空间上建立表了。
尝试在users表空间上建立名字为abcd123的表,已经没法建立了。
SQL> create table abcd123 tablespace users as select * from v$instance;
create table abcd123 tablespace users as select * from v$instance
*
ERROR at line 1:
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u01/app/oracle/oradata/prod/disk2/users01.dbf'
ORA-27041: unable to open file
Linux Error: 2: No such file or directory
Additional information: 3
3、确认dbwr进程PID
通过命令,我们可以看到当前数据库实例的dbwr的PID。因为我同一台主机上有两个实例,故有2个。
一个为prod,另一个为oms。
$ ps -ef|grep dbw0|grep -v grep
oracle 11872 1 0 21:46 ? 00:00:00 ora_dbw0_prod
oracle 11951 1 0 21:47 ? 00:00:01 ora_dbw0_oms
4、因为dbwr会打开所有数据文件的句柄。所以可以进入proc目录进行查找,格式为:
cd /prod/PID/fd
我们可以清楚的看到 /u01/app/oracle/oradata/prod/disk2/users01.dbf (deleted) 的字样,表示此文件已经被删掉了。
5、进行恢复
通过cp命令,把语句柄拷贝回原来的位置。
cp 24 /u01/app/oracle/oradata/prod/disk2/users01.dbf
此处的24为其给出的编号。
6、进入recovery
执行以下SQL命令:
SQL> alter database datafile 6 offline;
Database altered.
SQL> recover datafile 6;
Media recovery complete.
SQL> alter database datafile 6 online;
Database altered.
SQL>
至此,回复完成!
7、测试
我们重新尝试在users 表空间上建立一个table
SQL> create table abcd123 tablespace users as select * from v$instance;
Table created.
SQL> select * from abcd123;
INSTANCE_NUMBER INSTANCE_NAME
--------------- ----------------
HOST_NAME
----------------------------------------------------------------
VERSION STARTUP_T STATUS PAR THREAD# ARCHIVE LOG_SWITCH_WAIT
----------------- --------- ------------ --- ---------- ------- ---------------
LOGINS SHU DATABASE_STATUS INSTANCE_ROLE ACTIVE_ST BLO
---------- --- ----------------- ------------------ --------- ---
1 prod
prod
10.2.0.1.0 16-APR-12 OPEN NO 1 STARTED
ALLOWED NO ACTIVE PRIMARY_INSTANCE NORMAL NO
SQL>
我们可以发现,建立成功了,说明回复成功,