
问题描述:
现场环境介绍: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
……
由于篇幅省略其它输出;
可以看出,已经恢复成功,可以通过重启数据库实例进行验证;
至此,所误删除的数据文件被恢复,但需要我们注意的是,对于现场生产系统中运行的数据库,如果对所做的操作对系统有无影响没有十分把握,切记一定不要盲目的回车的执行,否则后果将不堪设想;即使万一做了相关误操作,如果没有把握恢复,切记不要进行其它诸如重启或关闭操作,否则原本很简单的恢复可能会变得更为复杂,也很可能造成数据的丢失!
切记,切记!!!




