Linux下利用文件描述符恢复的成功失败实验
1、测试环境准备
[oracle@redhat3 ~]$ uname -a
Linux redhat3 2.6.32-573.el6.x86_64 #1 SMP Wed Jul 1 18:23:37 EDT 2015 x86_64 x86_64 x86_64 GNU/Linux
[oracle@redhat3 ~]$ sqlplus / as sysdba
set pagesize 999
SQL*Plus: Release 11.2.0.4.0 Production on Fri Mar 16 05:13:19 2018
Copyright (c) 1982, 2013, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
SQL> SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
PL/SQL Release 11.2.0.4.0 - Production
CORE 11.2.0.4.0 Production
TNS for Linux: Version 11.2.0.4.0 - Production
NLSRTL Version 11.2.0.4.0 - Production
创建专门的表空间、用户和数据表,用于进行试验。
create tablespace rmdtest datafile '/u01/app/oracle/oradata/inf/rmdtest01.dbf' size 50m extent management local uniform size 1m segment space management auto;
create user rmtest identified by rmtest default tablespace rmdtest;
grant resource, connect to rmtest;
grant select any dictionary to rmtest;
conn rmtest/rmtest
create table rm_tab as select * from dba_objects;
insert into rm_tab select * from rm_tab;
select tablespace_name, bytes/1024/1024 M from dba_segments where owner='RMTEST' and segment_name='RM_TAB';
2、开始实验
删除数据文件。
[oracle@redhat3 inf]$ rm rmdtest01.dbf
删除之后,借助文件描述符,我们还是可以查询的。
SQL> SQL> select count(*) from rmtest.rm_tab;
COUNT(*)
----------
173304
查找dbwr进程,确定进程编号。
[oracle@redhat3 inf]$ ps -ef | grep dbw
oracle 2537 1 0 04:24 ? 00:00:00 ora_dbw0_inf
oracle 3313 2925 0 05:33 pts/0 00:00:00 grep dbw
使用lsof –p确定文件描述符信息。
[oracle@redhat3 inf]$ lsof -p 2537
oracle 2537 oracle 256u REG 253,0 10043392 651611 /u01/app/oracle/oradata/inf/control01.ctl
oracle 2537 oracle 257u REG 253,0 10043392 651613 /u01/app/oracle/fast_recovery_area/inf/control02.ctl
oracle 2537 oracle 258uW REG 253,0 817897472 651602 /u01/app/oracle/oradata/inf/system01.dbf
oracle 2537 oracle 259uW REG 253,0 566239232 651604 /u01/app/oracle/oradata/inf/sysaux01.dbf
oracle 2537 oracle 260uW REG 253,0 471867392 651606 /u01/app/oracle/oradata/inf/undotbs01.dbf
oracle 2537 oracle 261uW REG 253,0 9183232 651608 /u01/app/oracle/oradata/inf/users01.dbf
oracle 2537 oracle 262uW REG 253,0 2252349440 655877 /u01/app/oracle/oradata/inf/inf01.dbf
oracle 2537 oracle 264uW REG 253,0 81797120 651634 /u01/app/oracle/oradata/inf/temp01.dbf
oracle 2537 oracle 265uW REG 253,0 52436992 657854 /u01/app/oracle/oradata/inf/rmdtest01.dbf (deleted)
注意:lsof是描述文件描述符最好的工具,其中包括FD列。我们从dbwr的连接中,找到了rmdtest01.dbf的信息行。其中FD=265uW。这个265就表示了连接文件的名称。
联合dbwr的进程编号2537,我们在目录/proc/2537/fd中找到所有的文件符。
[oracle@redhat3 inf]$ cd /proc/2537/fd
[oracle@redhat3 fd]$
[oracle@redhat3 fd]$ pwd
/proc/2537/fd
[oracle@redhat3 fd]$ ls -l
total 0
lr-x------ 1 oracle oinstall 64 Mar 16 05:35 0 -> /dev/null
l-wx------ 1 oracle oinstall 64 Mar 16 05:35 1 -> /dev/null
lrwx------ 1 oracle oinstall 64 Mar 16 05:35 10 -> /u01/app/oracle/11.2.0.4/dbs/lkINF
lr-x------ 1 oracle oinstall 64 Mar 16 05:35 11 -> /u01/app/oracle/11.2.0.4/rdbms/mesg/oraus.msb
lrwx------ 1 oracle oinstall 64 Mar 16 05:35 12 -> socket:[20147]
l-wx------ 1 oracle oinstall 64 Mar 16 05:35 2 -> /dev/null
lrwx------ 1 oracle oinstall 64 Mar 16 05:35 256 -> /u01/app/oracle/oradata/inf/control01.ctl
lrwx------ 1 oracle oinstall 64 Mar 16 05:35 257 -> /u01/app/oracle/fast_recovery_area/inf/control02.ctl
lrwx------ 1 oracle oinstall 64 Mar 16 05:35 258 -> /u01/app/oracle/oradata/inf/system01.dbf
lrwx------ 1 oracle oinstall 64 Mar 16 05:35 259 -> /u01/app/oracle/oradata/inf/sysaux01.dbf
lrwx------ 1 oracle oinstall 64 Mar 16 05:35 260 -> /u01/app/oracle/oradata/inf/undotbs01.dbf
lrwx------ 1 oracle oinstall 64 Mar 16 05:35 261 -> /u01/app/oracle/oradata/inf/users01.dbf
lrwx------ 1 oracle oinstall 64 Mar 16 05:35 262 -> /u01/app/oracle/oradata/inf/inf01.dbf
lrwx------ 1 oracle oinstall 64 Mar 16 05:35 264 -> /u01/app/oracle/oradata/inf/temp01.dbf
lrwx------ 1 oracle oinstall 64 Mar 16 05:35 265 -> /u01/app/oracle/oradata/inf/rmdtest01.dbf (deleted)
lr-x------ 1 oracle oinstall 64 Mar 16 05:35 3 -> /dev/null
lr-x------ 1 oracle oinstall 64 Mar 16 05:35 4 -> /dev/null
lr-x------ 1 oracle oinstall 64 Mar 16 05:35 5 -> /dev/null
lr-x------ 1 oracle oinstall 64 Mar 16 05:35 6 -> /u01/app/oracle/11.2.0.4/rdbms/mesg/oraus.msb
lr-x------ 1 oracle oinstall 64 Mar 16 05:35 7 -> /proc/2537/fd
lr-x------ 1 oracle oinstall 64 Mar 16 05:35 8 -> /dev/zero
lrwx------ 1 oracle oinstall 64 Mar 16 05:35 9 -> /u01/app/oracle/11.2.0.4/dbs/hc_inf.dat
这个265对应的文件还存在,就是已经被删除的那个rmdtest01.dbf文件。进行拷贝出来。
[oracle@redhat3 fd]# cp 265 /u01/app/oracle/oradata/inf/rmdtest01res.dbf
[oracle@redhat3 inf]$ pwd
/u01/app/oracle/oradata/inf
[oracle@redhat3 inf]$ ll
total 4318668
-rw-r----- 1 oracle oinstall 10043392 Mar 16 05:52 control01.ctl
-rw-r----- 1 oracle oinstall 2252349440 Mar 16 05:30 inf01.dbf
-rw-r----- 1 oracle oinstall 52429312 Jan 29 06:54 redo01.log
-rw-r----- 1 oracle oinstall 52429312 Mar 16 05:30 redo02.log
-rw-r----- 1 oracle oinstall 52429312 Mar 16 05:51 redo03.log
-rw-r----- 1 oracle oinstall 52436992 Mar 16 05:50 rmdtest01res.dbf
-rw-r----- 1 oracle oinstall 566239232 Mar 16 05:47 sysaux01.dbf
-rw-r----- 1 oracle oinstall 817897472 Mar 16 05:37 system01.dbf
-rw-r----- 1 oracle oinstall 81797120 Mar 14 10:32 temp01.dbf
-rw-r----- 1 oracle oinstall 5251072 Dec 22 10:36 test01.dbfbak
-rw-r----- 1 oracle oinstall 471867392 Mar 16 05:47 undotbs01.dbf
-rw-r----- 1 oracle oinstall 9183232 Mar 16 05:30 users01.dbf
拷贝出来之后,最好进行一定转换。先将其offline,之后进行控制文件中的rename动作,最后recover和online操作。具体流程常见笔者专门的文章
SQL> select TABLESPACE_NAME,FILE_ID,STATUS,FILE_NAME,BYTES/1024/1024 from dba_data_files;
TABLESPACE_NAME FILE_ID STATUS FILE_NAME BYTES/1024/1024
-------------------- ---------- --------- ------------------------------------------------------------ ---------------
RMDTEST 7 AVAILABLE /u01/app/oracle/oradata/inf/rmdtest01.dbf 50
USERS 4 AVAILABLE /u01/app/oracle/oradata/inf/users01.dbf 8.75
UNDOTBS1 3 AVAILABLE /u01/app/oracle/oradata/inf/undotbs01.dbf 450
SYSAUX 2 AVAILABLE /u01/app/oracle/oradata/inf/sysaux01.dbf 540
SYSTEM 1 AVAILABLE /u01/app/oracle/oradata/inf/system01.dbf 780
INF 5 AVAILABLE /u01/app/oracle/oradata/inf/inf01.dbf 2148
SQL> alter database datafile 7 offline;
Database altered.
SQL> alter database rename file '/u01/app/oracle/oradata/inf/rmdtest01.dbf' to '/u01/app/oracle/oradata/inf/rmdtest01res.dbf';
Database altered.
SQL> recover datafile 7;
Media recovery complete.
SQL> alter database datafile 7 online;
Database altered.
使用rman中的recovery advisor工具,来判断错误是否存在。
[oracle@redhat3 inf]$ rman target /
Recovery Manager: Release 11.2.0.4.0 - Production on Fri Mar 16 05:55:20 2018
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
connected to target database: INF (DBID=2613824471)
RMAN> list failure;
using target database control file instead of recovery catalog
no failures found that match specification
Linux下利用文件描述符恢复的成功失败实验的更多相关文章
- Linux Linux下最大文件描述符设置
Linux下最大文件描述符设置 by:授客 QQ:1033553122 1. 系统可打开最大文件描述符设置 查看系统可打开最大文件描述符 # cat /proc/sys/fs/file-max 6 ...
- Linux下的文件描述符
文件描述符是一个简单的整数,用以标明每一个被进程所打开的文件和socket.第一个打开的文件是0,第二个是1,依此类推.Unix 操作系统通常给每个进程能打开的文件数量强加一个限制.更甚的是,unix ...
- Linux中的文件描述符与打开文件之间的关系
Linux中的文件描述符与打开文件之间的关系 导读 内核(kernel)利用文件描述符(file descriptor)来访问文件.文件描述符是非负整数.打开现存文件或新建文件时,内核会返回一个文件描 ...
- Linux exec与文件描述符
看到好几篇文章讲述exec都是一知半解,所以我尽量说的清楚明白一些.本文首先讲述Linux文件描述符,然后是exec,最后举例说明exec I/O重定向及其用法. 概念:exec命令用于调用并执行指令 ...
- Linux中的文件描述符与打开文件之间的关系------------每天进步一点点系列
http://blog.csdn.net/cywosp/article/details/38965239 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文件. ...
- (转)Linux中的文件描述符
本文转自:http://blog.csdn.net/cywosp/article/details/38965239 作者:cywosp 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为 ...
- [svc]linux中的文件描述符(file descriptor)和文件
linux中的文件描述符(file descriptor)和文件 linux为了实现一切皆文件的设计哲学,不仅将数据抽象成了文件,也将一切操作和资源抽象成了文件,比如说硬件设备,socket,磁盘,进 ...
- (转)Linux中的文件描述符与打开文件之间的关系
转:http://blog.csdn.net/cywosp/article/details/38965239 1. 概述 在Linux系统中一切皆可以看成是文件,文件又可分为:普通文件.目录文 ...
- Linux系统编程--文件描述符的复制dup()和dup2()【转】
本文转载自:http://blog.csdn.net/tennysonsky/article/details/45870459 dup() 和 dup2() 是两个非常有用的系统调用,都是用来复制一个 ...
随机推荐
- koa
koa 链接: 官网: https://koa.bootcss.com/# 入门: http://www.ruanyifeng.com/blog/2017/08/koa.html 进阶: https: ...
- eclipse向tomcat部署站点发现没有class文件。
其实大部分解决办法在网上都有的,例如这里: https://blog.csdn.net/shiyuehit/article/details/53262807 eclipse下无法自动编译或编译失败等问 ...
- 转:mongoDB 修改 ulimit
转自:http://blog.yucanlin.cn/2015/03/23/mongodb-%E4%BF%AE%E6%94%B9-ulimit/ mongoDB 修改 ulimit 一切都源于mong ...
- 大数据项目之_15_电信客服分析平台_01&02_项目背景+项目架构+项目实现+数据生产+数据采集/消费(存储)
一.项目背景二.项目架构三.项目实现3.1.数据生产3.1.1.数据结构3.1.2.编写代码3.1.3.打包测试3.2.数据采集/消费(存储)3.2.1.数据采集:采集实时产生的数据到 kafka 集 ...
- using eclipse to write c programe
参考:http://developer.51cto.com/art/200906/126363.htm http://www.cnblogs.com/feisky/archive/2010/03/21 ...
- CentOS6.5安装图形用户界面
CentOS 6.5 安装图形界面 安装的时候没有安装图像界面.安装步骤如下: 1.yum -y groupinstall Desktop 2.yum -y groupinstall "X ...
- 2017-10-29—英语发音的一些技巧总结
学习了这么多年英语还是一句口语也说不出口,大家一定像我一样有hin多的f*k想说. 在很小的时候我们就学了英语音标,知道了有前元音.中元音.后元音(很多同志多年不用应该已经把这些忘得差不多了,like ...
- sybase central 报 NullPointerException 解决
准备发布版本,但是要创建数据库的时候遇到了问题,发现之前可以正常打开的sybase Central 现在无法打开了.苦恼一段时间后找到如下解决方法. 报错如下: 解决如下: 正常打开:
- XVII Open Cup named after E.V. Pankratiev. GP of Tatarstan
A. Arithmetic Derivative 形如$p^p(p是质数)$的数的比值为$1$,用$k$个这种数相乘得到的数的比值为$k$,爆搜即可. #include<cstdio> # ...
- MySQL中count函数使用方法详解
count函数是用来统计表中或数组中记录的一个函数,下面我来介绍在MySQL中count函数用法与性能比较吧. count(*) 它返回检索行的数目, 不论其是否包含 NULL值. SELECT ...