硬盘数据恢复导航
RAID数据恢复导航
 | 网站首页 | 数据恢复资料 | 数据恢复软件 | 咨询留言 | 数据恢复博客 | 数据恢复论坛 | 
数据恢复软件下载
公司简介 数据恢复成功案例 数据恢复报价 数据恢复培训 数据恢复技术文章 数据恢复客服中心 数据恢复服务联系方式
您现在的位置: 北亚数据恢复技术站 >> 数据恢复资料 >> 服务器与存储技术 >> 文章正文
[组图]运行中的数据库文件恢复            【字体:
运行中的数据库文件恢复
作者:未知    文章来源:网络    点击数:    更新时间:2009-4-8
测试平台:rhel 4.6 and ids10.00uc3r1
相关命令:lsof用于显示打开的文件(list open file),此软件在其他系统中可能需要另行安装.
         dd用于覆盖及复制文件(convert and copy a file).
测试例子
在正在运行的数据库服务器中(如下)
[informix@netsky datafile]$ onstat -d
IBM Informix Dynamic Server Version 10.00.UC3R1   -- On-Line -- Up 00:56:19 -- 28228 Kbytes
Dbspaces
address  number   flags   fchunk   nchunks  pgsize   flags    owner    name
4442e7e0 1        0x1     1        1        2048     N        informix rootdbs
4442ec90 2        0x2001  2        1        2048     N T      informix tempdbs
4442ede8 3        0x1     3        1        2048     N        informix logdbs
44523630 4        0x1     4        1        2048     N        informix phydbs
44523788 5        0x1     5        1        2048     N        informix workdbs
445238e0 6        0x1     6        1        2048     N        informix testdbs0
44523a38 7        0x1     7        1        2048     N        informix testdbs1
44523b90 8        0x1     8        1        2048     N        informix testdbs2
44523ce8 9        0x1     9        1        2048     N        informix testdbs3
44523e40 10       0x1     10       1        2048     N        informix testdbs4
10 active, 2047 maximum
Chunks
address  chunk/dbs offset size  free  bpages flags pathname
4442e938 1     1   20     20000 12108        PO--  /opt/informix/datafile/rootdbs
445342f0 2     2   20     20000 19947        PO--  /opt/informix/datafile/tempdbs
44534478 3     3   20     20450 397          PO--  /opt/informix/datafile/logdbs
44534600 4     4   20     20450 19397        PO--  /opt/informix/datafile/phydbs
44534788 5     5   20     51150 39948        PO--  /opt/informix/datafile/workdbs
44534910 6     6   0      20000 19911        PO--  /opt/informix/datafile/testdbs0
44534a98 7     7   0      20000 19947        PO--  /opt/informix/datafile/testdbs1
44534c20 8     8   0      20000 19947        PO--  /opt/informix/datafile/testdbs2
44534da8 9     9   0      20000 19947        PO--  /opt/informix/datafile/testdbs3
4442eb08 10    10  0      20000 19947        PO--  /opt/informix/datafile/testdbs4
10 active, 2047 maximum
NOTE: The values in the "size" and "free" columns for DBspace chunks are
      displayed in terms of "pgsize" of the DBspace to which they belong.
Expanded chunk capacity mode: disabled
往testdbs0中增加一些测试数据
informix@netsky ~]$ dbaccess dbmon -
Database selected.
>create table ttt (id char(10)) in testdbs0;
>insert into ttt values('000');
>insert into ttt values('111');
做onmode -c强制完全checkpoint,把数据刷回磁盘.
然后删除数据块testdbs0
[informix@netsky datafile]$ ll
drwxrwxr-x  2 informix informix      4096 Nov 27 06:06 bakup
-rw-rw----  1 informix informix  41922560 Feb 10 00:06 logdbs
-rw-rw----  1 informix informix  41922560 Feb  9 23:14 phydbs
-rw-rw----  1 informix informix  41000960 Feb 10 00:06 rootdbs
-rw-rw----  1 informix informix  41000960 Feb  9 23:17 tempdbs
-rw-rw----  1 informix informix  40960000 Nov 27 06:01 testdbs1  --testdbs0被删除.
-rw-rw----  1 informix informix  40960000 Nov 27 06:01 testdbs2
-rw-rw----  1 informix informix  40960000 Nov 27 06:01 testdbs3
-rw-rw----  1 informix informix  40960000 Nov 27 06:01 testdbs4
-rw-rw----  1 informix informix 104796160 Feb  9 23:13 workdbs
此时可以通过lsof查找数据库打开的文件testdbs0,可以看到该文件已经被标识删除了.
[root@netsky datafile]# lsof | egrep '(COMMAND|deleted)'
COMMAND  PID USER  FD  TYPE DEVICE     SIZE   NODE NAME
oninit 23864 root 261u  REG  253,0 40960000 620162 /opt/informix/datafile/testdbs0 (deleted)
oninit 23868 root 258u  REG  253,0 40960000 620162 /opt/informix/datafile/testdbs0 (deleted)
此时再查看testdbs0上的数据,并往testdbs0中增加一些数据.
informix@netsky ~]$ dbaccess dbmon -
Database selected.
> select * from ttt;
id         
000      
111      
2 row(s) retrieved.
> insert into ttt values('333');
1 row(s) inserted.
做onmode -c强制完全checkpoint,把数据刷回磁盘.
然后把已经删除的testdbs0恢复出来备份.
在这里,结合lsof的输出信息PID进入相应的目录,再通过FD号进行dd恢复.
[root@netsky fd]# cd /proc/23864/fd
[root@netsky fd]# ll
total 13
lr-x------  1 root root 64 Feb  9 23:36 0 -> /opt/informix/msg/en_us/0333/olmsglog.iem
lrwx------  1 root root 64 Feb  9 23:36 1 -> /dev/pts/2
lrwx------  1 root root 64 Feb  9 23:36 2 -> /dev/pts/2
lrwx------  1 root root 64 Feb  9 23:36 256 -> /opt/informix/datafile/rootdbs
lrwx------  1 root root 64 Feb  9 23:36 257 -> /opt/informix/datafile/tempdbs
lrwx------  1 root root 64 Feb  9 23:36 258 -> /opt/informix/datafile/logdbs
lrwx------  1 root root 64 Feb  9 23:36 259 -> /opt/informix/datafile/phydbs
lrwx------  1 root root 64 Feb  9 23:36 260 -> /opt/informix/datafile/workdbs
lrwx------  1 root root 64 Feb  9 23:36 261 -> /opt/informix/datafile/testdbs0 (deleted)
lrwx------  1 root root 64 Feb  9 23:36 262 -> /opt/informix/datafile/testdbs1
lrwx------  1 root root 64 Feb  9 23:36 263 -> /opt/informix/datafile/testdbs2
lrwx------  1 root root 64 Feb  9 23:36 264 -> /opt/informix/datafile/testdbs3
lrwx------  1 root root 64 Feb  9 23:36 265 -> /opt/informix/datafile/testdbs4
这里在PID 23864的FD(File Descriptor)为261即为我们所要的.将其dd出来到/tmp/testdbs0
[root@netsky fd]# dd if=261 of=/tmp/testdbs0
80000+0 records in
80000+0 records out
完成以上操作后,停止数据库.
[informix@netsky datafile]$ onmode -ky
将恢复的数据文件拷回原目录,并修改权限
[informix@netsky datafile]$ cp /tmp/testdbs0 /opt/informix/datafile/testdbs0
[informix@netsky datafile]$ chmod 660 testdbs0 ;chown informix:informix testdbs0
重新启动数据库
[informix@netsky datafile]$ oninit -vy
验证数据文件恢复.
[informix@netsky datafile]$ dbaccess dbmon -
Database selected.
> select * from ttt;
id         
000      
111      
333      
3 row(s) retrieved.
例子验证,在testdbs0被删除后,文件被删除后,数据上并未完全删除的,只是其inode信息在系统上被删除.但正在使用其的程序仍保留了这个inode信息,程序仍可以往里面写入信息..在程序关闭前,可通过FD(File Descriptor)的方式进行恢复.
注意:要求的是文件必须仍被打开..这样的操作并不是十分保险的,可能会造成数据损坏或者缺少.
文章录入:a    责任编辑:a 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    关于我们 | RAID数据恢复 | 友情链接 | RSS生成 | XML生成 | 文章HTML地图 | 下载HTML地图

    版权所有 北亚数据恢复中心
    全国统一客服电话:4006-505-808
    北京市海淀区永丰基地丰慧中路7号新材料创业大厦B座205室
    京ICP备05011939
    isAn