بازیابی سریع datafile با کمک file descriptor لینوکس
در صورت حذف اتفاقی datafile از روی سیستم عامل لینوکس، می توانیم با طی مراحلی، datafile حذف شده را برگردانیم(البته با اقدام فوری).البته این کار تا زمانی که بانک اطلاعاتی کماکان در حال اجرا باشد، قابل انجام است در غیر این صورت، لینکی که file descriptor به آن اشاره می کند، برای همیشه حذف خواهد شد.
فرض کنید که datafile ای به نام usef.dbf را که در مسیر /mh2/oracle/oradata/usef/ قرار دارد را به اشتباه حذف کرده ایم، در این صورت می توانیم با طی کردن سناریوی زیر، datafile را برگردانیم:
SQL> select name from v$datafile;
+ASM1/usef/datafile/system.262.882081033
+ASM1/usef/datafile/undotbs1.264.882081035
+ASM1/usef/datafile/sysaux.263.882081033
+ASM1/usef/datafile/users.265.882081037
+ASM1/usef/datafile/sysaux2.272.882778469
/mh2/oracle/oradata/usef/usef.dbf
فرض کنید که کاربری به اشتباه دستور زیر را اجرا کرده که سبب حذف datafile شده است:
[oracle@localhost ~]$ rm -rf /mh2/oracle/oradata/usef/usef.dbf
حال با دستور زیر، شماره پروسس dbwriter را بدست می آوریم:
[oracle@localhost ~]$ ps -ef|grep dbw0|grep -v grep
oracle 9069 1 0 19:35 ? 00:00:00 asm_dbw0_+ASM
oracle 9099 1 0 19:36 ? 00:00:00 ora_dbw0_usef
در این قسمت به مسیر /proc می رویم تا لینک datafile حذف شده را بدست آوریم:
[oracle@localhost ~]$ cd /proc/9069/fd/
[oracle@localhost fd]$ ls -l
total 21
lr-x------ 1 oracle oinstall 64 Jul 29 19:48 0 -> /dev/null
lr-x------ 1 oracle oinstall 64 Jul 29 19:48 1 -> /dev/null
lrwx------ 1 oracle oinstall 64 Jul 29 19:48 10 -> /mh2/oracle/admin/usef/adump/ora_9006.aud
lr-x------ 1 oracle oinstall 64 Jul 29 19:48 11 -> /dev/zero
lr-x------ 1 oracle oinstall 64 Jul 29 19:48 12 -> /dev/zero
lr-x------ 1 oracle oinstall 64 Jul 29 19:48 13 -> /mh2/oracle/10g/rdbms/mesg/oraus.msb
lrwx------ 1 oracle oinstall 64 Jul 29 19:48 14 -> /mh2/oracle/10g/dbs/hc_usef.dat
lrwx------ 1 oracle oinstall 64 Jul 29 19:48 15 -> /mh2/oracle/10g/dbs/lkUSEF
lrwx------ 1 oracle oinstall 64 Jul 29 19:48 16 -> /dev/raw/raw3
lrwx------ 1 oracle oinstall 64 Jul 29 19:48 17 -> /dev/raw/raw1
lrwx------ 1 oracle oinstall 64 Jul 29 19:48 18 -> /dev/raw/raw2
lr-x------ 1 oracle oinstall 64 Jul 29 19:48 19 -> /mh2/oracle/10g/rdbms/mesg/oraus.msb
lr-x------ 1 oracle oinstall 64 Jul 29 19:48 2 -> /dev/null
lrwx------ 1 oracle oinstall 64 Jul 29 19:48 20 -> /mh2/oracle/oradata/usef/usef.dbf (deleted)
lr-x------ 1 oracle oinstall 64 Jul 29 19:48 3 -> /dev/null
lr-x------ 1 oracle oinstall 64 Jul 29 19:48 4 -> /dev/null
l-wx------ 1 oracle oinstall 64 Jul 29 19:48 5 -> /mh2/oracle/admin/usef/udump/usef_ora_9006.trc
l-wx------ 1 oracle oinstall 64 Jul 29 19:48 6 -> /mh2/oracle/admin/usef/bdump/alert_usef.log
lrwx------ 1 oracle oinstall 64 Jul 29 19:48 7 -> /mh2/oracle/10g/dbs/hc_usef.dat
l-wx------ 1 oracle oinstall 64 Jul 29 19:48 8 -> /mh2/oracle/admin/usef/bdump/alert_usef.log
lrwx------ 1 oracle oinstall 64 Jul 29 19:48 9 -> /mh2/oracle/10g/dbs/lkinstusef (deleted)
oracle@localhost fd]$ cp 20 /mh2/oracle/oradata/usef/usef.dbf
در نهایت datafile را recover می کنیم تا هدر آن با بانک سازگار باشد:
SQL> alter database datafile '/mh2/oracle/oradata/usef/usef.dbf' offline;
Database altered.
SQL> recover datafile '/mh2/oracle/oradata/usef/usef.dbf';
Media recovery complete.
SQL> alter database datafile '/mh2/oracle/oradata/usef/usef.dbf' online;
Database altered.
- ۹۴/۰۵/۰۹