首頁  >  文章  >  資料庫  >  Linux下利用文件描述符恢复的成功失败实验

Linux下利用文件描述符恢复的成功失败实验

WBOY
WBOY原創
2016-06-07 16:48:57926瀏覽

恢复数据的方法很多,比如冷热备份、闪回数据库等等,如果是直接从操作系统OS层面删除数据文件,在Linux/Unix环境下,有一些优选

数据误删除是作为初级运维人员常常遇到的“低级错误”,一些有经验的老手有时也在疲劳、不冷静的情况下“马失前蹄”。一旦误删除数据文件,尽快采用影响最小、最迅速的手段恢复数据库是第一要务。
 
恢复数据的方法很多,比如冷热备份、闪回数据库等等,如果是直接从操作系统OS层面删除数据文件,在Linux/Unix环境下,有一些优选手段可以使用。其中之一就是文件描述符(File Description)。

--------------------------------------分割线 --------------------------------------

推荐阅读:

RMAN 配置归档日志删除策略

Oracle基础教程之通过RMAN复制数据库

RMAN备份策略制定参考内容

RMAN备份学习笔记

Oracle数据库备份加密 RMAN加密

--------------------------------------分割线 --------------------------------------

1、聊聊File Description
 
 

不同的操作系统,在实现CPU管理、内存管理和存储文件管理的时候,采用不同的方式手段。
 
在Linux和Unix里面,采用文件描述符进行文件管理。一个进程要打开文件,是调用操作系统内核功能,,内核返回一个文件描述符。对文件的读写操作也通过这个描述符进行操作。操作系统删除一个文件的时候,是要确定文件所有文件描述符都是释放掉之后,才会最后删除。
 
我们的误操作,如果是发生在正在运行的数据库系统中,文件虽然在操作系统上删除不可见了。但是数据库Oracle进程中还会保有一些存在的文件描述符,借用这些文件描述符,我们是可能找到文件信息,来恢复数据文件的。
 
所以,一旦发生了误删除动作,切忌三点:心态冷静、断开应用、维护现场不关库。
 
但是,在实际中,这种可以快速恢复的技术,并不是百分之百成功的。使用文件描述符恢复数据需要数据库不能关闭、数据库进程不能“自动剔除”数据文件等。本文从两个实验着手,介绍一下操作方法和前提。
 
 

2、实验环境搭建
 
 

我们选择Linux 2.6内核和Oracle 11g进行试验。注意:在生产环境下,绝对不能进行这样的实验。进行试验的时候,也需要完备的备份。
 
 

[oracle@bspdev ~]$ uname -a
 
Linux bspdev.localdomain 2.6.18-308.el5 #1 SMP Tue Feb 21 20:05:41 EST 2012 i686 i686 i386 GNU/Linux
 
 

SQL> select * from v$version;
 
BANNER
 
--------------------------------------------------------------------------------
 
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
 
PL/SQL Release 11.2.0.1.0 - Production
 
CORE 11.2.0.1.0 Production
 
TNS for Linux: Version 11.2.0.1.0 - Production
 
NLSRTL Version 11.2.0.1.0 – Production
 
 

创建专门的表空间、用户和数据表,用于进行试验。
 
 

SQL> create tablespace rmdtest datafile '/u01/oradata/WILSON/datafile/rmdtest01.dbf' size 1000m
 
  2  extent management local uniform size 1m
 
  3  segment space management auto;
 
 

Tablespace created
 
 

SQL> create user rmtest identified by rmtest default tablespace rmdtest;
 
User created
 
 

SQL> grant resource, connect to rmtest;
 
Grant succeeded
 
 

SQL> grant select any dictionary to rmtest;
 
Grant succeeded
 
 

SQL> create table rm_tab as select * from dba_objects;
 
Table created
 
 

SQL> insert into rm_tab select * from rm_tab;
 
72731 rows inserted
 
 

SQL> commit;
 
Commit complete
 
 

数据表T,在实验环境的表空间文件里面。
 
 

SQL> select tablespace_name, bytes/1024/1024 M from dba_segments where owner='RMTEST' and segment_name='RM_TAB';
 
TABLESPACE_NAME                        M
 
------------------------------ ----------
 
RMDTEST                                17
 
 

确保有一份好的备份!
 
 

RMAN> list backup;
 
 

List of Backup Sets
 
===================
 
BS Key  Type LV Size      Device Type Elapsed Time Completion Time
 
------- ---- -- ---------- ----------- ------------ ---------------
 
135    Full    1.39G      DISK        00:03:13    02-FEB-14     

        BP Key: 135  Status: AVAILABLE  Compressed: NO  Tag: TAG20140202T012300
 
(篇幅原因,有省略……)
 
        Piece Name:

        Piece Name: /u01/flash_recovery_area/WILSON/autobackup/2014_02_02/o1_mf_s_838430779_9gtckx4s_.bkp
 
  SPFILE Included: Modification time: 02-FEB-14
 
  SPFILE db_unique_name: WILSON
 
  Control File Included: Ckp SCN: 5370719      Ckp time: 02-FEB-14
 
 

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn