منبع اصلی نوشتار زیر در این لینک قرار دارد

بازیابی دیتافایل با آرشیولاگ

فرض کنید دیتافایلی که جدیدا به بانک اضافه شده بنا به دلایلی از بین رفته باشد در این صورت اگر آرشیوها از زمان ایجاد دیتافایل موجود باشند، این امکان وجود دارد که این دیتافایل را بازیابی کرد.

البته همانطور که گفته شد، این کار شرط بسیار سختی دارد:

"همه آرشیو لاگها از زمان ایجاد دیتافایل موجود باشند"

 

در ادامه سناریویی را در همین موضوع شاهد خواهیم بود.

SQL> archive log list;

Database log mode              Archive Mode

SQL> alter tablespace USEF_TBS add datafile '/acfs/test2.dbf' size 10m;

با دستورات زیر جدول جدیدی را که از دیتافایل جدید فضا می گیرد، اضافه می کنیم تا بعد از بازیابی دیتافایل، بررسی کنیم که اطلاعاتی را از دست ندادیم.

 

SQL> create table usef_tbl1  tablespace usef_tbs as select * from dba_tables where 1=2;

SQL>  alter  table usef_tbl1 ALLOCATE EXTENT(DATAFILE '/acfs/test2.dbf'  size 5m);
Table altered.

SQL> insert into usef_tbl1 select * from dba_tables;
2323 rows created.

SQL> commit;

SQL> select count(*) from usef_tbl1;
      2323

در این مرحله دیتافایل را حذف می کنیم و بانک را استارات مجدد می کنیم.

rm –rf   /acfs/test2.dbf

SQL> startup
ORACLE instance started.
Total System Global Area 8351150080 bytes
Fixed Size                  2701528 bytes
Variable Size            7348422440 bytes
Database Buffers          989855744 bytes
Redo Buffers               10170368 bytes
Database mounted.

ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: '/acfs/test2.dbf' 

SQL> alter database datafile  '/acfs/test2.dbf'  offline;
Database altered.

SQL> alter database open;
Database altered.

همانطور که دستور زیر نشان می دهد، جدول ایجاد شده قابل دسترسی نیست.

SQL> select count(*) from usef_tbl1;
ERROR at line 1:
ORA-00376: file 6 cannot be read at this time
ORA-01110: data file 6: ORA-01110: data file 6: '/acfs/test2.dbf' 

SQL> alter database create datafile '/acfs/test2.dbf'  ;
Database altered.

با دستور زیر بازیابی انجام می شود:

SQL> recover datafile  '/acfs/test2.dbf';
Media recovery complete.

SQL> alter database datafile  '/acfs/test2.dbf' ONLINE;
Database altered.
SQL> select count(*) from usef_tbl1;
      2323



به سیاره لینوکس امتیاز دهید

به اين صفحه امتياز دهيد