如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638 QQ号:47079569 邮箱:service@parnassusdata.com

  适用于: Solaris SPARC Operating System - Version: 8.0 及以上  [Release: 8.0及以上 ] 所有平台 目标 本文描述了访问被进程保持打开的文件中数据的简单方法。 解决方案   在某些情况下,从已删除的文件中恢复数据是有可能的。具体来说,必须有一个进程仍为文件保持open file descriptor。 伪文件系统“/ proc”包含系统上每个正在运行进程的目录。每个进程目录以进程的PID命名,包含名为“fd”的子目录,下面是代表每个进程的open file descriptor的文件: $ ls -li /proc/314/fd total 432 c---------   1 john  agroup       24,  3 Sep 25 21:07 0 c---------   1 john  agroup       24,  3 Sep 25 21:07 1 c---------   1 john  agroup       24,  3 Sep 25 21:07 2 -r--r--r--   1 dave  bgroup       740672 Apr 30 09:30 3     $ file /proc/314/fd/3 /proc/314/fd/3:        ascii text   使用这些文件可以访问由一个进程打开的文件。默认情况下,一个进程有文件描述符file descriptors 0,1和2打开,分别为标准输入,标准输出和标准错误。因此,通过一个进程打开的任何文件往往会被编号为3或以上。在上面的例子中,fd3是一个纯文本文件。 这里是该技术的一个例子:
  1. 首先设置一个文件:
$ cp /usr/dict/words /tmp
  1. 然后,启动一个进程,将保持文件无限打开:
$ tail -f /tmp/words > /dev/null 2>&1 & [1]    1188
  1. 该进程PID为1188。找出该文件被分配了哪个file descriptor:
$ pfiles 1188 1188:        tail -f /tmp/words Current rlimit: 256 file descriptors 0: S_IFREG mode:0444 dev:305,2 ino:12152977 uid:71062 gid:15 size:206663 O_RDONLY|O_LARGEFILE /tmp/words 1: S_IFCHR mode:0666 dev:301,0 ino:6815752 uid:0 gid:3 rdev:13,2 O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE /devices/pseudo/mm@0:null 2: S_IFCHR mode:0666 dev:301,0 ino:6815752 uid:0 gid:3 rdev:13,2 O_WRONLY|O_CREAT|O_TRUNC|O_LARGEFILE /devices/pseudo/mm@0:null     $ cd /proc/1188/fd $ ls 0  1  2 $ file 0 0:               English text $ head 0 10th 1st 2nd 3rd 4th 5th 6th 7th 8th 9th $ tail 0 zoology zoom Zorn Zoroaster Zoroastrian zounds z's zucchini Zurich zygote
  1. 文件内容看起来没问题。现在删除文件:
$ rm /tmp/words $ ls /tmp/words /tmp/words: No such file or directory
  1. 现在尝试再次访问数据:
$ tail /proc/1188/fd/0 zoology zoom Zorn Zoroaster Zoroastrian zounds z's zucchini Zurich zygote
  1. 数据仍可访问,将其保存到一个文件:
$ cat 0 > /tmp/words.recovered
  1. 现在确保文件是完整的:
$ cmp /usr/dict/words /tmp/words.recovered 在以上进程中要考虑几点。
  1. /proc
/proc 文件系统在Solaris 2.6中被引入,所以该步骤不适用于Solaris 2.5.1 或以上。在Solaris之前的版本,pfiles 是在/usr/proc/bin 而非/usr/bin中找到。
  1. quiesce the process停顿进程
在上面的例子中,tail不会尝试修改要恢复的文件。你应该考虑这对于你的进程是否如此,并在必要时停顿进程,避免你恢复的数据副本不一致。kill-STOP或/usr/sbin/pstop将暂时停止进程运行。
  1. 文件系统空间
即使原始文件被删除,它仍会消耗空间。只有当保持fd的进程退出,空间才会被释放。
  1. pfiles
以上显示的pfiles输出是在Solaris 10 版本发出命令。早期版本不打印出文件的路径,而是打印出文件的inode号,以及包含文件系统的设备的major/minor 号。 要基于inode 号找出文件,使用'find / -inum '。 产品 Solaris 10 Operating System Solaris 9 Operating System Solaris 8 Operating System