非歸檔模式下恢復利用offline drop命令誤刪除的資料檔案

perfychi發表於2012-08-30

非歸檔模式下恢復利用offline drop命令誤刪除的資料檔案

標籤: offline  drop  非歸檔  恢復  zhaolinjnu  分類: Oracle 2008-02-16 10:16

      眾所周知,非歸檔模式下,聯機日誌並不歸檔。可能大多數的網友一直以來都會有這樣的模糊認識。資料庫作recover時,只能利用歸檔日誌和current redo log聯機日誌。實際上所有的聯機日誌都是可以用的。此文介紹在非檔模式下,恢復利用offline drop命令誤刪除的資料檔案。offline drop命令相當於把一個資料檔案至於離線狀態,並且需要恢復或再也不使用此資料檔案了。所在,在OS級別並不是刪除資料檔案的意思。但是要在非檔模式下恢復此資料檔案的前提是,聯機日誌中自資料檔案建立以來的所有聯機日誌都沒有被覆蓋。下面是整個實驗過程,並且注意,在整個恢復的過程中注意從檢視中獲得的資料檔案狀態的變化:

SQL> archive log list;
Database log mode              No Archive Mode
Automatic archival             Disabled
Archive destination            c:\arc
Oldest online log sequence     7
Current log sequence           9

SQL> set linesize 200
SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          8   52428800          1 YES INACTIVE                730667 2008:01:15 08:57:55
         2          1          9   52428800          1 NO  CURRENT                 755863 2008:01:15 11:49:53
         3          1          7   52428800          1 YES INACTIVE                696036 2008:01:14 12:30:46

SQL>
SQL> alter tablespace users add datafile 'C:\ORADATA\TEST\TEST\users03.dbf' size 5M;

Tablespace altered.

SQL> alter system switch logfile;

System altered.

SQL> select * from v$log;

    GROUP#    THREAD#  SEQUENCE#      BYTES    MEMBERS ARC STATUS           FIRST_CHANGE# FIRST_TIME
---------- ---------- ---------- ---------- ---------- --- ---------------- ------------- ----------
         1          1          8   52428800          1 YES INACTIVE                730667 2008:01:15 08:57:55
         2          1          9   52428800          1 NO  ACTIVE                  755863 2008:01:15 11:49:53
         3          1         10   52428800          1 NO  CURRENT                 768362 2008:01:18 15:19:46 

在作業系統層刪除6號資料檔案後,對6號資料檔案作offline drop操作 

SQL> alter database datafile 'C:\ORADATA\TEST\TEST\users03.dbf' offline drop;

Database altered.

SQL>

檢視資料檔案狀態,當對資料檔案執行offline drop 命令後,資料檔案狀態變為recover

SQL> select file#,status,name from v$datafile order by 3;

     FILE# STATUS  NAME
---------- ------- ------------------------------------------------------------------------
         3 ONLINE  C:\ORADATA\TEST\TEST\SYSAUX01.DBF
         1 SYSTEM  C:\ORADATA\TEST\TEST\SYSTEM01.DBF
         5 ONLINE  C:\ORADATA\TEST\TEST\TBS_UNDO_01.DBF
         4 ONLINE  C:\ORADATA\TEST\TEST\USERS01.DBF
         2 ONLINE  C:\ORADATA\TEST\TEST\USERS02.DBF
         6 RECOVER C:\ORADATA\TEST\TEST\USERS03.DBF
SQL>

根據控制檔案中的資訊,重新建立6號資料檔案
SQL> alter database create datafile 6;

Database altered.

在執行完建立命令後,資料檔案狀態仍然為recover,此時資料檔案中只有非常簡單的資訊

SQL> select file#,status,name from v$datafile order by 3;

     FILE# STATUS  NAME
---------- ------- ------------------------------------------------------------------------
         3 ONLINE  C:\ORADATA\TEST\TEST\SYSAUX01.DBF
         1 SYSTEM  C:\ORADATA\TEST\TEST\SYSTEM01.DBF
         5 ONLINE  C:\ORADATA\TEST\TEST\TBS_UNDO_01.DBF
         4 ONLINE  C:\ORADATA\TEST\TEST\USERS01.DBF
         2 ONLINE  C:\ORADATA\TEST\TEST\USERS02.DBF
         6 RECOVER C:\ORADATA\TEST\TEST\USERS03.DBF

因為聯機日誌還未被覆蓋,儘管處於非歸檔模式,仍然可以對6號資料檔案作恢復

SQL> recover datafile 6;
Media recovery complete.
SQL>

資料檔案狀態變為offline
SQL> select file#,status,name from v$datafile order by 3;

     FILE# STATUS  NAME
---------- ------- -------------------------------------------------------
         3 ONLINE  C:\ORADATA\TEST\TEST\SYSAUX01.DBF
         1 SYSTEM  C:\ORADATA\TEST\TEST\SYSTEM01.DBF
         5 ONLINE  C:\ORADATA\TEST\TEST\TBS_UNDO_01.DBF
         4 ONLINE  C:\ORADATA\TEST\TEST\USERS01.DBF
         2 ONLINE  C:\ORADATA\TEST\TEST\USERS02.DBF
         6 OFFLINE C:\ORADATA\TEST\TEST\USERS03.DBF

在對資料檔案作online操作後,資料檔案恢復正常
SQL> alter database datafile 6 online;

Database altered.

SQL> select file#,status,name from v$datafile order by 3;

     FILE# STATUS  NAME
---------- ------- ----------------------------------------------
         3 ONLINE  C:\ORADATA\TEST\TEST\SYSAUX01.DBF
         1 SYSTEM  C:\ORADATA\TEST\TEST\SYSTEM01.DBF
         5 ONLINE  C:\ORADATA\TEST\TEST\TBS_UNDO_01.DBF
         4 ONLINE  C:\ORADATA\TEST\TEST\USERS01.DBF
         2 ONLINE  C:\ORADATA\TEST\TEST\USERS02.DBF
         6 ONLINE  C:\ORADATA\TEST\TEST\USERS03.DBF

  從上面恢復的整個過程可以看出,儘管資料庫處於非歸檔模式,只要資料檔案建立以來的聯機日誌還沒有被覆蓋,資料檔案就可以恢復出來。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27042095/viewspace-742229/,如需轉載,請註明出處,否則將追究法律責任。

相關文章