ITPub博客

首页 > 数据库 > Oracle > 【备份恢复】无备份在线恢复非关键数据文件

【备份恢复】无备份在线恢复非关键数据文件

原创 Oracle 作者:kiran1990 时间:2016-12-15 12:00:30 0 删除 编辑
当误删除表空间数据文件(特指非关键数据文件,而不是关键数据文件),则可以在不备份就可以修复数据文件,但有个前提,即不能关库,假如已经关库了,则没有备份,只能offline再删除表空间;

1.创建测试表空间
SYS@PROD1>create tablespace ts_test datafile '/u01/app/oracle/oradata/PROD1/ts_01.dbf' size 20m;

Tablespace created.

2.创建测试表
SYS@PROD1>create table t1 tablespace ts_test as select 1 id from dual;

Table created.

SYS@PROD1>select * from t1;

       ID
----------
        1

3.删除数据文件
SYS@PROD1>create table t2 tablespace ts_test as select 1 id from dual;

Table created.

SYS@PROD1>drop table t2 purge;
drop table t3 purge
          *
ERROR at line 1:
ORA-01116: error in opening database file 6
ORA-01110: data file 6: '/u01/app/oracle/oradata/PROD1/ts_01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3    

5.切记,此时不要关闭数据库

6.查看DBWR进程的pid
[oracle@host01 PROD1]$ ps -ef | grep dbw|grep -v grep
oracle   15630     1  0 10:55 ?        00:00:00 ora_dbw0_PROD1

7.找到句柄
[oracle@host01 PROD1]$ ll -rt /proc/15630/fd
total 0
lrwx------ 1 oracle oinstall 64 Dec 15 11:43 9 -> /u01/app/oracle/product/11.2.0/dbhome_1/dbs/hc_PROD1.dat
lr-x------ 1 oracle oinstall 64 Dec 15 11:43 8 -> /dev/zero
lr-x------ 1 oracle oinstall 64 Dec 15 11:43 7 -> /proc/15630/fd
lr-x------ 1 oracle oinstall 64 Dec 15 11:43 6 -> /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/mesg/oraus.msb
lr-x------ 1 oracle oinstall 64 Dec 15 11:43 5 -> /dev/null
lr-x------ 1 oracle oinstall 64 Dec 15 11:43 4 -> /dev/null
lr-x------ 1 oracle oinstall 64 Dec 15 11:43 3 -> /dev/null
lrwx------ 1 oracle oinstall 64 Dec 15 11:43 265 -> /u01/app/oracle/oradata/PROD1/ts_01.dbf (deleted)
lrwx------ 1 oracle oinstall 64 Dec 15 11:43 264 -> /u01/app/oracle/oradata/PROD1/temp01.dbf
lrwx------ 1 oracle oinstall 64 Dec 15 11:43 263 -> /u01/app/oracle/oradata/PROD1/example01.dbf
lrwx------ 1 oracle oinstall 64 Dec 15 11:43 262 -> /u01/app/oracle/oradata/PROD1/users01.dbf
lrwx------ 1 oracle oinstall 64 Dec 15 11:43 261 -> /u01/app/oracle/oradata/PROD1/undotbs01.dbf
lrwx------ 1 oracle oinstall 64 Dec 15 11:43 260 -> /u01/app/oracle/oradata/PROD1/sysaux01.dbf
lrwx------ 1 oracle oinstall 64 Dec 15 11:43 259 -> /u01/app/oracle/oradata/PROD1/system01.dbf
lrwx------ 1 oracle oinstall 64 Dec 15 11:43 258 -> /u01/app/oracle/oradata/PROD1/control03.ctl
lrwx------ 1 oracle oinstall 64 Dec 15 11:43 257 -> /u01/app/oracle/fast_recovery_area/PROD1/control02.ctl
lrwx------ 1 oracle oinstall 64 Dec 15 11:43 256 -> /u01/app/oracle/oradata/PROD1/control01.ctl
l-wx------ 1 oracle oinstall 64 Dec 15 11:43 2 -> /dev/null
lr-x------ 1 oracle oinstall 64 Dec 15 11:43 13 -> /u01/app/oracle/product/11.2.0/dbhome_1/rdbms/mesg/oraus.msb
lrwx------ 1 oracle oinstall 64 Dec 15 11:43 10 -> /u01/app/oracle/product/11.2.0/dbhome_1/dbs/lkPROD1
l-wx------ 1 oracle oinstall 64 Dec 15 11:43 1 -> /dev/null
lr-x------ 1 oracle oinstall 64 Dec 15 11:43 0 -> /dev/null

8.将找到的句柄拷贝回来
[oracle@host01 PROD1]$ cp /proc//15630/fd/265 /u01/app/oracle/oradata/PROD1/ts_01.dbf

9.查看数据文件状态
SYS@PROD1>select file#,name,status from v$datafile;

    FILE# NAME                                               STATUS
---------- -------------------------------------------------- -------
        1 /u01/app/oracle/oradata/PROD1/system01.dbf         SYSTEM
        2 /u01/app/oracle/oradata/PROD1/sysaux01.dbf         ONLINE
        3 /u01/app/oracle/oradata/PROD1/undotbs01.dbf        ONLINE
        4 /u01/app/oracle/oradata/PROD1/users01.dbf          ONLINE
        5 /u01/app/oracle/oradata/PROD1/example01.dbf        ONLINE
        6 /u01/app/oracle/oradata/PROD1/ts_01.dbf            ONLINE

6 rows selected.

10.将6号数据文件offline
SYS@PROD1>alter database datafile 6 offline;

Database altered.

再次查看数据文件状态
SYS@PROD1>select file#,status,name from v$datafile;

    FILE# STATUS  NAME
---------- ------- --------------------------------------------------
        1 SYSTEM  /u01/app/oracle/oradata/PROD1/system01.dbf
        2 ONLINE  /u01/app/oracle/oradata/PROD1/sysaux01.dbf
        3 ONLINE  /u01/app/oracle/oradata/PROD1/undotbs01.dbf
        4 ONLINE  /u01/app/oracle/oradata/PROD1/users01.dbf
        5 ONLINE  /u01/app/oracle/oradata/PROD1/example01.dbf
        6 RECOVER /u01/app/oracle/oradata/PROD1/ts_01.dbf

6 rows selected.

11.恢复数据文件
SYS@PROD1>recover datafile 6;
Media recovery complete.

12.将6号数据文件online
SYS@PROD1>alter database datafile 6 online;

Database altered.

13验证.(文件已经修复回来了)
SYS@PROD1>! ls /u01/app/oracle/oradata/PROD1/ts_01.dbf
/u01/app/oracle/oradata/PROD1/ts_01.dbf

SYS@PROD1>select * from t1;

       ID
----------
        1

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/31400681/viewspace-2130651/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2016-10-08

  • 博文量
    61
  • 访问量
    21174