误删Oracle数据文件的恢复方法
2012-05-16 09:39
941 查看
今天尝试了一下,在Linux下删除一个数据文件,然后进行回复。
环境:数据库在Open的状态,然后rm -rf users.dbf (删除users表空间),最后找回users.dbf文件。
在回复的时候,回复的方法跟数据库的版本关系不大(因为是物理文件),只是跟操作系统有一定的关系,如:Red hat Linux , Solaris Linux 等等。
下面进行演示:
删除users表空间.
通过命令,我们可以看到当前数据库实例的dbwr的PID。因为我同一台主机上有两个实例,故有2个。
一个为prod,另一个为oms。
4、因为dbwr会打开所有数据文件的句柄。所以可以进入proc目录进行查找,格式为:cd /prod/PID/fd此处,fd为文件描述符。
我们可以清楚的看到 /u01/app/oracle/oradata/prod/disk2/users01.dbf (deleted) 的字样,表示此文件已经被删掉了。
通过cp命令,把语句柄拷贝回原来的位置。
cp 24 /u01/app/oracle/oradata/prod/disk2/users01.dbf
此处的24为其给出的编号。
执行以下SQL命令:
至此,回复完成!
我们可以发现,建立成功了,说明回复成功,
环境:数据库在Open的状态,然后rm -rf users.dbf (删除users表空间),最后找回users.dbf文件。
在回复的时候,回复的方法跟数据库的版本关系不大(因为是物理文件),只是跟操作系统有一定的关系,如:Red hat Linux , Solaris Linux 等等。
下面进行演示:
删除users表空间.
1、我们首先进入Sqlplus,然后执行SQL语句:
1234567891011121314 | 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.dbf7 rows selected.SQL> !rm /u01/app/oracle/oradata/prod/disk2/users01.dbf |
2、此时,users表空间已经被删除了,我们已经无法在users表空间上建立表了。
尝试在users表空间上建立名字为abcd123的表,已经没法建立了。1 2 3 4 5 6 7 8 9 | 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。
123 | $ ps -ef|grep dbw0|grep -v greporacle 11872 1 0 21:46 ? 00:00:00 ora_dbw0_prodoracle 11951 1 0 21:47 ? 00:00:01 ora_dbw0_oms |
4、因为dbwr会打开所有数据文件的句柄。所以可以进入proc目录进行查找,格式为:cd /prod/PID/fd此处,fd为文件描述符。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | [oracle@prod fd]$ cd /proc/11872/fd [oracle@prod fd]$ ls -l total 30 lr-x------ 1 oracle dba 64 May 14 22:47 0 -> /dev/null lr-x------ 1 oracle dba 64 May 14 22:47 1 -> /dev/null lrwx------ 1 oracle dba 64 May 14 22:47 10 -> /u01/app/oracle/product/10.2.0/db_1/rdbms/audit/ora_11859.aud lr-x------ 1 oracle dba 64 May 14 22:47 11 -> /dev/zero lr-x------ 1 oracle dba 64 May 14 22:47 12 -> /dev/zero lr-x------ 1 oracle dba 64 May 14 22:47 13 -> /u01/app/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb lrwx------ 1 oracle dba 64 May 14 22:47 14 -> /u01/app/oracle/product/10.2.0/db_1/dbs/hc_prod.dat lrwx------ 1 oracle dba 64 May 14 22:47 15 -> /u01/app/oracle/product/10.2.0/db_1/dbs/lkPROD lrwx------ 1 oracle dba 64 May 14 22:47 16 -> /u01/app/oracle/oradata/prod/disk1/control01.ctl lrwx------ 1 oracle dba 64 May 14 22:47 17 -> /u01/app/oracle/oradata/prod/disk2/control02.ctl lrwx------ 1 oracle dba 64 May 14 22:47 18 -> /u01/app/oracle/oradata/prod/disk3/control03.ctl lrwx------ 1 oracle dba 64 May 14 22:47 19 -> /u01/app/oracle/oradata/prod/disk4/system01.dbf lr-x------ 1 oracle dba 64 May 14 22:47 2 -> /dev/null lrwx------ 1 oracle dba 64 May 14 22:47 20 -> /u01/app/oracle/oradata/prod/disk2/undotbs01.dbf lrwx------ 1 oracle dba 64 May 14 22:47 21 -> /u01/app/oracle/oradata/prod/disk5/sysaux01.dbf lrwx------ 1 oracle dba 64 May 14 22:47 22 -> /u01/app/oracle/oradata/prod/disk5/bigtbs01.dbf lrwx------ 1 oracle dba 64 May 14 22:47 23 -> /u01/app/oracle/oradata/prod/disk5/indx01.dbf lrwx------ 1 oracle dba 64 May 14 22:47 24 -> /u01/app/oracle/oradata/prod/disk2/users01.dbf (deleted) lrwx------ 1 oracle dba 64 May 14 22:47 25 -> /u01/app/oracle/oradata/prod/disk3/oltp01.dbf lrwx------ 1 oracle dba 64 May 14 22:47 26 -> /u01/app/oracle/oradata/prod/disk1/temp01.dbf lrwx------ 1 oracle dba 64 May 14 22:47 27 -> /u01/app/oracle/oradata/prod/disk3/lmtemp201.dbf lrwx------ 1 oracle dba 64 May 14 22:47 28 -> /u01/app/oracle/oradata/prod/disk4/lmtemp201.dbf lr-x------ 1 oracle dba 64 May 14 22:47 29 -> /u01/app/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb lr-x------ 1 oracle dba 64 May 14 22:47 3 -> /dev/null lr-x------ 1 oracle dba 64 May 14 22:47 4 -> /dev/null l-wx------ 1 oracle dba 64 May 14 22:47 5 -> /u01/app/oracle/admin/udump/prod_ora_11859.trc l-wx------ 1 oracle dba 64 May 14 22:47 6 -> /u01/app/oracle/admin/bdump/alert_prod.log lrwx------ 1 oracle dba 64 May 14 22:47 7 -> /u01/app/oracle/product/10.2.0/db_1/dbs/hc_prod.dat l-wx------ 1 oracle dba 64 May 14 22:47 8 -> /u01/app/oracle/admin/bdump/alert_prod.log lrwx------ 1 oracle dba 64 May 14 22:47 9 -> /u01/app/oracle/product/10.2.0/db_1/dbs/lkinstprod (deleted) [oracle@prod 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命令:1234567891011 | 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。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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> |
我们可以发现,建立成功了,说明回复成功,
相关文章推荐
- 误删Oracle数据文件的恢复方法
- Linux 平台下 误删 oracle 数据文件的恢复方法
- ORACLE Linux 平台下 误删 oracle 数据文件的恢复方法
- Oracle drop 或者误删表数据恢复的两种实用方法
- Linux ext3/ext4误删文件,数据恢复方法
- [Oracle]如果误删了某个数据文件,又没有被备份,能否恢复?
- ORACLE 11G没有备份文件参数文件在异机通过rman备份恢复找回被误删的数据
- oracle误删数据恢复方法小结
- win8文件误删的数据恢复方法
- oracle误删数据恢复方法
- oracle数据文件被误操作删除了恢复方法
- ORACLE误删数据文件目录恢复
- oracle数据被误删或更新的恢复方法
- Linux ext3/ext4误删文件,数据恢复方法
- 误删oracle表,恢复表结构及数据方法
- 误删oracle数据文件的错误恢复
- Oracle 误删数据的恢复方法
- Oracle误删数据文件的恢复
- oracle误删数据恢复方法
- oracle RMAN模拟数据文件丢失简单恢复方法