بازیابی سریع 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.

Comment (1)

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *