签到成功

知道了

CNDBA社区CNDBA社区

归档模式下误删非系统数据文件恢复

2018-03-15 20:59 4203 0 原创 oracle维护
作者: shmily

参考戴老板博客实验:
http://blog.csdn.net/tianlesoftware/article/details/44082283http://www.cndba.cn/asker/article/2686

环境:
数据库版本:11.2.0.4(归档模式)
操作系统:oracle linux 6.3http://www.cndba.cn/asker/article/2686

创建测试表空间,测试数据

http://www.cndba.cn/asker/article/2686
http://www.cndba.cn/asker/article/2686

SQL> create tablespace test datafile '/opt/oracle/oradata/orcl/test01.dbf' size 100M;

Tablespace created.

SQL> create user test identified by test default tablespace test;   

User created.

SQL> grant dba to test;

Grant succeeded.

SQL> conn test/test;
Connected.
SQL> create table test1 as select * from all_users;

Table created.

SQL> create table test2 as select * from all_users;

Table created.

SQL> create table test3 as select * from all_users;

Table created.

故障模拟
在操作系统直接删除数据文件

http://www.cndba.cn/asker/article/2686

# cd /opt/oracle/oradata/
# rm -rf test01.dbf

此时

SQL> select count(1) from test1;   

  COUNT(1)
----------
        31

SQL> select count(2) from test2;

  COUNT(2)
----------
        31

SQL> insert into test1 select * from test2;

31 rows created.

SQL> commit;  

Commit complete.

对表的查询插入并没有感觉到影响,因为我们的操作系统是Linux,当数据文件从操作系统级别被rm掉,但之前打开该文件的进程仍然持有相应的文件句柄,所以指向的文件仍然可以读写,并且该文件的文件描述符可以从/proc目录中获得,也可以利用这个句柄恢复文件。

恢复
dbwr进程会打开所有数据文件的句柄,在proc目录中可以查到这些数据文件的信息,目录名是进程PID,fd表示文件描述符。
检查dbwr的进程PID:

[root@localhost orcl]# ps -ef|grep dbw
oracle    4216     1  0 Mar15 ?        00:00:02 ora_dbw0_orcl
root      7353  7308  0 09:00 pts/3    00:00:00 grep dbw
[root@localhost orcl]# cd /proc/4216/fd
[root@localhost fd]# ls -l
total 0
lr-x------. 1 oracle oinstall 64 Mar 16 09:00 0 -> /dev/null
l-wx------. 1 oracle oinstall 64 Mar 16 09:00 1 -> /dev/null
lrwx------. 1 oracle oinstall 64 Mar 16 09:00 10 -> /opt/oracle/product/11.2.0/db_1/dbs/lkORCL
lr-x------. 1 oracle oinstall 64 Mar 16 09:00 11 -> /opt/oracle/product/11.2.0/db_1/rdbms/mesg/oraus.msb
l-wx------. 1 oracle oinstall 64 Mar 16 09:00 2 -> /dev/null
lrwx------. 1 oracle oinstall 64 Mar 16 09:00 256 -> /opt/oracle/oradata/orcl/control01.ctl
lrwx------. 1 oracle oinstall 64 Mar 16 09:00 257 -> /opt/oracle/fast_recovery_area/orcl/control02.ctl
lrwx------. 1 oracle oinstall 64 Mar 16 09:00 258 -> /opt/oracle/oradata/orcl/system01.dbf
lrwx------. 1 oracle oinstall 64 Mar 16 09:00 259 -> /opt/oracle/oradata/orcl/sysaux01.dbf
lrwx------. 1 oracle oinstall 64 Mar 16 09:00 260 -> /opt/oracle/oradata/orcl/undotbs01.dbf
lrwx------. 1 oracle oinstall 64 Mar 16 09:00 261 -> /opt/oracle/oradata/orcl/users01.dbf
lrwx------. 1 oracle oinstall 64 Mar 16 09:00 262 -> /opt/oracle/oradata/orcl/temp01.dbf
lrwx------. 1 oracle oinstall 64 Mar 16 09:00 263 -> /opt/oracle/oradata/orcl/test01.dbf (deleted)
lr-x------. 1 oracle oinstall 64 Mar 16 09:00 3 -> /dev/null
lr-x------. 1 oracle oinstall 64 Mar 16 09:00 4 -> /dev/null
lr-x------. 1 oracle oinstall 64 Mar 16 09:00 5 -> /dev/null
lr-x------. 1 oracle oinstall 64 Mar 16 09:00 6 -> /opt/oracle/product/11.2.0/db_1/rdbms/mesg/oraus.msb
lr-x------. 1 oracle oinstall 64 Mar 16 09:00 7 -> /proc/4216/fd
lr-x------. 1 oracle oinstall 64 Mar 16 09:00 8 -> /dev/zero
lrwx------. 1 oracle oinstall 64 Mar 16 09:00 9 -> /opt/oracle/product/11.2.0/db_1/dbs/hc_orcl.dat

可以看到有一条263delete的记录,就是被删除的数据文件http://www.cndba.cn/asker/article/2686http://www.cndba.cn/asker/article/2686

直接cp该句柄文件名回原位置

# cp 263 /opt/oracle/oradata/orcl/test01.dbf

因为数据库一直是open的,那么SCN也会不断的变化,我们cp出来的数据文件和数据库当前的信息不一致,所以我们需要进行recover:

SQL> alter database datafile '/opt/oracle/oradata/orcl/test01.dbf' offline;

Database altered.

SQL> recover datafile '/opt/oracle/oradata/orcl/test01.dbf' ;
ORA-00283: recovery session canceled due to errors
ORA-01110: data file 5: '/opt/oracle/oradata/orcl/test01.dbf'
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/opt/oracle/oradata/orcl/test01.dbf'

查看alert日志http://www.cndba.cn/asker/article/2686

Fri Mar 16 09:09:57 2018
Errors in file /opt/oracle/diag/rdbms/orcl/orcl/trace/orcl_dbw0_4216.trc:
ORA-01157: cannot identify/lock data file 5 - see DBWR trace file
ORA-01110: data file 5: '/opt/oracle/oradata/orcl/test01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 13: Permission denied
Additional information: 9
Media Recovery failed with error 1110

怀疑是权限问题查看数据文件归属

[oracle@localhost orcl]$ ll -lrt
total 1639468
-rw-r-----. 1 oracle oinstall  52429312 Mar 15 22:00 redo01.log
-rw-r-----. 1 oracle oinstall  30416896 Mar 15 22:00 temp01.dbf
-rw-r-----. 1 oracle oinstall  52429312 Mar 15 22:05 redo02.log
-rw-r-----. 1 oracle oinstall   5251072 Mar 15 22:10 users01.dbf
-rw-r-----. 1 oracle oinstall 775954432 Mar 16 09:05 system01.dbf
-rw-r-----. 1 root   root     104865792 Mar 16 09:07 test01.dbf
-rw-r-----. 1 oracle oinstall 545267712 Mar 16 09:11 sysaux01.dbf
-rw-r-----. 1 oracle oinstall  78651392 Mar 16 09:11 undotbs01.dbf
-rw-r-----. 1 oracle oinstall  52429312 Mar 16 09:11 redo03.log
-rw-r-----. 1 oracle oinstall   9748480 Mar 16 09:12 control01.ctl

果然,在cp回删除数据文件的时候是在root用户下操作的,造成了恢复过来的数据文件权限问题,修改权限

[root@localhost orcl]# chown -R oracle:oinstall test01.dbf 
[root@localhost orcl]# ll -lrt
total 1639468
-rw-r-----. 1 oracle oinstall  52429312 Mar 15 22:00 redo01.log
-rw-r-----. 1 oracle oinstall  30416896 Mar 15 22:00 temp01.dbf
-rw-r-----. 1 oracle oinstall  52429312 Mar 15 22:05 redo02.log
-rw-r-----. 1 oracle oinstall   5251072 Mar 15 22:10 users01.dbf
-rw-r-----. 1 oracle oinstall 104865792 Mar 16 09:07 test01.dbf
-rw-r-----. 1 oracle oinstall 545267712 Mar 16 09:11 sysaux01.dbf
-rw-r-----. 1 oracle oinstall  78651392 Mar 16 09:16 undotbs01.dbf
-rw-r-----. 1 oracle oinstall 775954432 Mar 16 09:16 system01.dbf
-rw-r-----. 1 oracle oinstall  52429312 Mar 16 09:16 redo03.log
-rw-r-----. 1 oracle oinstall   9748480 Mar 16 09:17 control01.ctl

重新做recover恢复

http://www.cndba.cn/asker/article/2686

SQL> recover datafile '/opt/oracle/oradata/orcl/test01.dbf' ;
Media recovery complete.
SQL> alter database datafile '/opt/oracle/oradata/orcl/test01.dbf' online;

Database altered.

恢复完成,备份,进行一起正常启停

http://www.cndba.cn/asker/article/2686

版权声明:本文为博主原创文章,未经博主允许不得转载。

恢复

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
shmily

shmily

关注
  • 22
    原创
  • 0
    翻译
  • 2
    转载
  • 11
    评论
  • 访问:142155次
  • 积分:141
  • 等级:初级会员
  • 排名:第23名
精华文章
    热门文章
      Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

      AI QQ群