暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

oracle 10g for Solaris 10 误删除数据文件恢复过程

半个IT人 2016-10-13
395


问题描述: 
现场环境介绍:oracle 10g 单机库,操作系统:solaris 10,现场运维人员在例行巡检时发现三区WEB数据库表空间使用率过高,咨询赵老师,赵老师让他删除一些表的数据,他没有理解意思,直接把数据文件删除,共删除5个数据文件,所幸没有进行过数据库及操作系统的重启操作,否则后面的恢复将会非常麻烦(PS:现场如果出现误删除数据文件操作,切勿进行其它操作,最好切断应用避免新数据的入库操作);

处理方法 

咨询刘旭得知,其删除的五个数据文件为:iesls07.dbf-iesls11.dbf,远程登录现场系统,首先登录操作系统查看数据文件信息:

select file#,status,name from v$datafile;

-----------------------------

        12 data1/iesls07.dbf

        13 data1/iesls08.dbf

        14 data1/iesls09.dbf

        15 data1/iesls10.dbf

        16 data1/iesls11.dbf

我们知道,这些数据文件是隶属于历史表空间,是负责存储历史数据的,而历史数据是由oracle的后台进程dbw0来进行写操作的,即dbw0进程持有这些数据文件的文件句柄,只要不关闭数据库,这些文件的文件句柄仍然存在,并且所指向的数据文件仍然可以进行读写操作,因此我们只要通过查看dbw*进程所持有的文件句柄,就可以定位到相关的数据文件,从而可以恢复所删除的数据文件;

这里用到一个工具,lsof(list open files),该工具可以显示UNIX系统中各进程所打开的数据文件,但在solaris系统上默认并未安装此工具,需要我们手动进行安装,安装过程比较简单:

下载该工具包:lsof.4.87.SPARC.64bit.Solaris.10.pkg,已在附件中给出


#pkgadd -d  lsof.4.87.SPARC.64bit.Solaris.10.pkg

安装完成后通过执行lsof命令可以验证是否安装成功,此时准备工作已完成,下面开始恢复文件:

1、查看oracle后台进程dbw0的进程号:

root@/tmp#ps -ef|grep dbw

  oracle   810     1   0   8月 25 ?           8:23 ora_dbw0_iesdb

这里我们看到进程号为810;

2、定位进程号810所打开的数据文件:

root@/tmp#lsof -p 810lsof: WARNING: access .lsof_tamis01: No such file or directory lsof: WARNING: created device cache file: .lsof_tamis01 COMMAND PID   USER   FD   TYPE DEVICE    SIZE/OFF    NODE NAME oracle  810 oracle  cwd   VDIR  32,13         512   24447 export/home/oracle/product/10.2.0/db_1/dbs oracle  810 oracle  txt   VREG  32,13   117624040   43990 export/home/oracle/product/10.2.0/db_1/bin/oracle oracle  810 oracle    0r  VCHR   13,2             6815752 devices/pseudo/mm@0:null oracle  810 oracle    1r  VCHR   13,2             6815752 devices/pseudo/mm@0:null oracle  810 oracle    2r  VCHR   13,2             6815752 devices/pseudo/mm@0:null oracle  810 oracle    3r  VCHR   13,2             6815752 devices/pseudo/mm@0:null oracle  810 oracle    4r  VCHR   13,2             6815752 devices/pseudo/mm@0:null oracle  810 oracle    5w  VREG  32,13         594  804327 export/home/oracle/admin/iesdb/udump/iesdb_ora_794.trc oracle  810 oracle    6w  VREG  32,13   501419063   64334 export/home/oracle/admin/iesdb/bdump/alert_iesdb.log oracle  810 oracle    7w  VREG  32,13   501419063   64334 export/home/oracle/admin/iesdb/bdump/alert_iesdb.log oracle  810 oracle    8u  VREG  32,13        1544   44459 export/home/oracle/product/10.2.0/db_1/dbs/hc_iesdb.dat oracle  810 oracle    9r  VCHR  13,12             6815772 devices/pseudo/mm@0:zero oracle  810 oracle   10u  VREG  32,13           0   24370 export/home (/dev/dsk/c0t0d0s5) oracle  810 oracle   11r  VCHR  13,12             6815772 devices/pseudo/mm@0:zero oracle  810 oracle   12r  DOOR                0t0      56 var/run/name_service_door (door to nscd[159]) (FA:->0x60026556e00) oracle  810 oracle   13r  VREG  32,13      849408   32099 export/home/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb oracle  810 oracle   14u  VREG  32,13        1544   44459 export/home/oracle/product/10.2.0/db_1/dbs/hc_iesdb.dat oracle  810 oracle   15uR VREG  32,13          24   44460 export/home/oracle/product/10.2.0/db_1/dbs/lkIESDB oracle  810 oracle   16r  VREG  32,13      849408   32099 export/home/oracle/product/10.2.0/db_1/rdbms/mesg/oraus.msb oracle  810 oracle  256uW VREG  32,13     7290880   64338 export/home/oracle/oradata/iesdb/control01.ctl oracle  810 oracle  257uW VREG  32,13     7290880   64339 export/home/oracle/oradata/iesdb/control02.ctl oracle  810 oracle  258uW VREG  32,13     7290880   64340 export/home/oracle/oradata/iesdb/control03.ctl oracle  810 oracle  259uW VREG  32,13  2147491840   64346 export/home/oracle/oradata/iesdb/system01.dbf oracle  810 oracle  260uW VREG  32,13  3145736192   64347 export/home/oracle/oradata/iesdb/undotbs01.dbf oracle  810 oracle  261uW VREG  32,13  3221233664   64348 export/home/oracle/oradata/iesdb/sysaux01.dbf oracle  810 oracle  262uW VREG  32,13     5251072   64352 export/home/oracle/oradata/iesdb/users01.dbf oracle  810 oracle  263uW VREG  32,13  1048584192  156341 export/home/oracle/oradata/iesdb/miaoshu.dbf oracle  810 oracle  264uW VREG  32,13 34338578432   66861 export/home/oracle/oradata/iesdb/iesls01.dbf oracle  810 oracle  265uW VREG  32,13 10485768192   70542 export/home/oracle/oradata/iesdb/iesls02.dbf oracle  810 oracle  266uW VREG  32,13 10485768192   70543 export/home/oracle/oradata/iesdb/iesls03.dbf oracle  810 oracle  267uW VREG  32,13 10485768192   70544 export/home/oracle/oradata/iesdb/iesls04.dbf oracle  810 oracle  268uW VREG  32,13 10485768192   70545 export/home/oracle/oradata/iesdb/iesls05.dbf oracle  810 oracle  269uW VREG  32,13 10485768192   70547 export/home/oracle/oradata/iesdb/iesls06.dbforacle  810 oracle  270uW VREG   32,6 10485768192       4 data1 (/dev/dsk/c0t2d0s6) oracle  810 oracle  271uW VREG   32,6 10485768192       5 data1 (/dev/dsk/c0t2d0s6) oracle  810 oracle  272uW VREG   32,6 10485768192       6 data1 (/dev/dsk/c0t2d0s6) oracle  810 oracle  273uW VREG   32,6 10485768192       7 data1 (/dev/dsk/c0t2d0s6) oracle  810 oracle  274uW VREG   32,6 10485768192       8 data1 (/dev/dsk/c0t2d0s6)oracle  810 oracle  275uW VREG   32,6 10485768192       9 data1/iesls12.dbf oracle  810 oracle  276uW VREG   32,6 10485768192      10 data1/iesls13.dbf oracle  810 oracle  277uW VREG   32,6 10485768192      11 /data1/iesls14.dbf oracle  810 oracle  278uW VREG   32,6 10485768192      12 /data1/iesls15.dbf oracle  810 oracle  279uW VREG   32,6 10485768192      13 /data1/iesls16.dbf oracle  810 oracle  280uW VREG   32,6 10485768192      14 /data1/iesls17.dbf oracle  810 oracle  281uW VREG   32,6 10485768192      15 /data1/iesls18.dbf oracle  810 oracle  282uW VREG   32,6 10485768192      16 /data1/iesls19.dbf oracle  810 oracle  283uW VREG   32,6 10485768192      17 /data1/iesls20.dbf oracle  810 oracle  284uW VREG   32,6 10485768192      18 /data1/iesls21.dbf oracle  810 oracle  285uW VREG   32,6 10485768192      19 /data1/iesls22.dbf oracle  810 oracle  286uW VREG   32,6 10485768192      20 /data1/iesls23.dbf oracle  810 oracle  287uW VREG   32,6 10485768192      21 /data1/iesls24.dbf oracle  810 oracle  288uW VREG   32,6 10485768192      22 /data1/iesls25.dbf oracle  810 oracle  289uW VREG   32,6 10485768192      23 /data1/iesls26.dbf oracle  810 oracle  290uW VREG   32,6 10485768192      24 /data1/iesls27.dbf oracle  810 oracle  291uW VREG   32,6 10485768192      25 /data1/iesls28.dbf oracle  810 oracle  292uW VREG   32,6 10485768192      26 /data1/iesls29.dbf oracle  810 oracle  293uW VREG   32,6 10485768192      27 /data1/iesls30.dbf oracle  810 oracle  294uW VREG 85,100 10485768192       4 /data2/iesls31.dbf oracle  810 oracle  295uW VREG 85,100 10485768192       5 /data2/iesls32.dbf oracle  810 oracle  296uW VREG  32,13  2147491840   85912 /export/home/oracle/oradata/iesdb/undotbs02.dbf oracle  810 oracle  297uW VREG 85,100 10485768192       6 /data2/iesls33.dbf oracle  810 oracle  298uW VREG 85,100 10485768192       7 /data2/iesls34.dbf oracle  810 oracle  299uW VREG 85,100 10485768192       8 /data2/iesls35.dbf oracle  810 oracle  300uW VREG 85,100 10485768192       9 /data2/iesls36.dbf oracle  810 oracle  301uW VREG 85,100 10485768192      10 /data2/iesls37.dbf oracle  810 oracle  302uW VREG 85,100 10485768192      11 /data2/iesls38.dbf oracle  810 oracle  303uW VREG 85,100 10485768192      12 /data2/iesls39.dbf oracle  810 oracle  304uW VREG 85,100 10485768192      13 /data2/iesls40.dbf oracle  810 oracle  305uW VREG 85,100 10485768192      14 /data2/iesls41.dbf oracle  810 oracle  306uW VREG 85,100 10485768192      15 /data2/iesls42.dbf oracle  810 oracle  307uW VREG 85,100 10485768192      16 /data2/iesls43.dbf oracle  810 oracle  308uW VREG 85,100 10485768192      17 /data2/iesls44.dbf oracle  810 oracle  309uW VREG 85,100 10485768192      18 /data2/iesls45.dbf oracle  810 oracle  310uW VREG 85,100 10485768192      19 /data2/iesls46.dbf oracle  810 oracle  311uW VREG 85,100 10485768192      20 /data2/iesls47.dbf oracle  810 oracle  312uW VREG 85,100 10485768192      21 /data2/iesls48.dbf oracle  810 oracle  313uW VREG 85,100 10485768192      22 /data2/iesls49.dbf oracle  810 oracle  314uW VREG 85,100 10485768192      23 /data2/iesls50.dbf oracle  810 oracle  315uW VREG 85,100 20971528192      24 /data2/iesls51.dbf oracle  810 oracle  316uW VREG 85,100 20971528192      25 /data2/iesls52.dbf oracle  810 oracle  317uW VREG 85,100 20971528192      26 /data2/iesls53.dbf oracle  810 oracle  318uW VREG 85,100 20971528192      27 /data2/iesls54.dbf oracle  810 oracle  319uW VREG 85,100 20971528192      28 /data2/iesls55.dbf oracle  810 oracle  320uW VREG 85,100 20971528192      29 /data2/iesls56.dbf oracle  810 oracle  321uW VREG 85,100 20971528192      30 /data2/iesls57.dbf oracle  810 oracle  322uW VREG 85,100 20971528192      31 /data2/iesls58.dbf oracle  810 oracle  323uW VREG 85,100 20971528192      32 /data2/iesls59.dbf oracle  810 oracle  324uW VREG 85,100 20971528192      33 /data2/iesls60.dbf oracle  810 oracle  325uW VREG 85,100 20971528192      34 /data2/iesls61.dbf oracle  810 oracle  326uW VREG 85,100 20971528192      35 /data2/iesls62.dbf oracle  810 oracle  327uW VREG  32,13  2097160192   64349 /export/home/oracle/oradata/iesdb/temp01.dbf

从上述输出中标红的位置对比其它输出,我们很容易得出,这五个文件即为删除的数据文件,我们查看输出中的FD列,以第一个数据文件为例270uW 270表示文件描述号,uW表示该文件被打开并处理写入模式(个人猜测是up 与 write的简写),通过分析我们得知了数据文件所在的进程号与文件描述符,我们到/proc下找到相应的进程号目录,进而查看相应的文件描述符是否存在:

#cd /proc/810/fd

我们通过ls查看所有的810所对应的文件描述符都存在,其中270-274所对应的正是我们所需恢复的数据文件;

3、拷贝文件到原位置:

cat /proc/810/fd/270 > /data1/iesls07.dbf 
cat /proc/810/fd/271 > /data1/iesls08.dbf 
cat /proc/810/fd/272 > /data1/iesls09.dbf 
cat /proc/810/fd/273 > /data1/iesls10.dbf 
cat /proc/810/fd/274 > /data1/iesls11.dbf


4、恢复数据文件的属性:

chown oracle:oinstall /data1/iesls07.dbf 
chmod 640 /data1/iesls07.dbf 
chown oracle:oinstall /data1/iesls08.dbf 
chmod 640 /data1/iesls08.dbf 
chown oracle:oinstall /data1/iesls09.dbf 
chmod 640 /data1/iesls09.dbf 
chown oracle:oinstall /data1/iesls10.dbf 
chmod 640 /data1/iesls10.dbf 
chown oracle:oinstall /data1/iesls11.dbf 
chmod 640 /data1/iesls11.dbf


5、登录数据库进行数据文件的恢复:

$sqlplus / as sysdba

SQL>alter database datafile 12 offline drop;

SQL>recover datafile 12; 


SQL>alter database datafile 12 online;
其它文件与此类似;


6、查看数据文件信息,确认恢复正常:

select file_id,tablespace_name,file_name,status from dba_data_files; 
……
12 IES_LISHI_TABLESPACE /data1/iesls07.dbf AVAILABLE 
13 IES_LISHI_TABLESPACE /data1/iesls08.dbf AVAILABLE 
14 IES_LISHI_TABLESPACE /data1/iesls09.dbf AVAILABLE 
15 IES_LISHI_TABLESPACE /data1/iesls10.dbf AVAILABLE 
16 IES_LISHI_TABLESPACE /data1/iesls11.dbf AVAILABLE 
17 IES_LISHI_TABLESPACE /data1/iesls12.dbf  

……

SQL> select file#,status,name from v$datafile; 

FILE# STATUS NAME 
---------- ------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
1 SYSTEM /export/home/oracle/oradata/iesdb/system01.dbf 
2 ONLINE /export/home/oracle/oradata/iesdb/undotbs01.dbf 
3 ONLINE /export/home/oracle/oradata/iesdb/sysaux01.dbf 
4 ONLINE /export/home/oracle/oradata/iesdb/users01.dbf 
5 ONLINE /export/home/oracle/oradata/iesdb/miaoshu.dbf 
6 ONLINE /export/home/oracle/oradata/iesdb/iesls01.dbf 
7 ONLINE /export/home/oracle/oradata/iesdb/iesls02.dbf 
8 ONLINE /export/home/oracle/oradata/iesdb/iesls03.dbf 
9 ONLINE /export/home/oracle/oradata/iesdb/iesls04.dbf 
10 ONLINE /export/home/oracle/oradata/iesdb/iesls05.dbf 
11 ONLINE /export/home/oracle/oradata/iesdb/iesls06.dbf 

FILE# STATUS NAME 
---------- ------- --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 
12 
ONLINE /data1/iesls07.dbf 
13 
ONLINE /data1/iesls08.dbf 
14 
ONLINE /data1/iesls09.dbf 
15 
ONLINE /data1/iesls10.dbf 
16 
ONLINE /data1/iesls11.dbf 

……

由于篇幅省略其它输出;

可以看出,已经恢复成功,可以通过重启数据库实例进行验证;

至此,所误删除的数据文件被恢复,但需要我们注意的是,对于现场生产系统中运行的数据库,如果对所做的操作对系统有无影响没有十分把握,切记一定不要盲目的回车的执行,否则后果将不堪设想;即使万一做了相关误操作,如果没有把握恢复,切记不要进行其它诸如重启或关闭操作,否则原本很简单的恢复可能会变得更为复杂,也很可能造成数据的丢失!

切记,切记!!!

文章转载自半个IT人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论