天天看點

基于時間的不完全恢複

       基于時間的不完全恢複是指當出現了使用者錯誤比如失誤操作 drop table ,truncate table 時,使用備份檔案,歸檔日志和重做日志檔案将資料庫恢複到使用者誤操作點的狀态,進而恢複使用者資料。

實驗步驟如下:

1)先建立一個test表,并插入資料1, 2, 3,送出,切換日志檔案。

SQL> create table t1 (num number) tablespace test;

表已建立。

SQL> insert into t1 values (1);

已建立 1 行。

SQL> commit;

送出完成。

SQL> insert into t1 values (2);

已建立 1 行。

SQL> commit;

送出完成。

SQL> alter system switch logfile;

系統已更改。

SQL> insert into t1 values (3);

已建立 1 行。

SQL> commit;

送出完成。

SQL> alter system switch logfile;

系統已更改。

2)檢視誤操作的時間點. 删除表。

SQL> host date

2010-05-12

SQL> host time

21:16:56'

SQL> drop table t1;

表已删除。

3)關閉資料庫,在使資料庫處于加載狀态

SQL> shut immediate

資料庫已經關閉。

已經解除安裝資料庫。

ORACLE 例程已經關閉。

SQL> startup mount

ORACLE 例程已經啟動。

Total System Global Area  535662592 bytes                                      

Fixed Size                  1334380 bytes                                      

Variable Size             138412948 bytes                                      

Database Buffers          390070272 bytes                                      

Redo Buffers                5844992 bytes                                      

資料庫裝載完畢。

4)複制所有資料檔案備份,為了将資料庫恢複到過去的時間點,必須複制是以資料檔案的備份。

SQL> @f:\sql\recover.sql

注意:當複制備份檔案時,必須確定備份檔案的時間點在恢複時間點之前。可以通過以下查詢擷取備份檔案的時間點:

SQL> select file#,to_char(time,'yyyy-mm-dd hh24:mi:ss') from v$recover_file;

     FILE# TO_CHAR(TIME,'YYYY-                                                 

---------- -------------------                                                 

       1 2010-05-10 16:24:02                                                 

         2 2010-05-10 16:24:02                                                 

         3 2010-05-10 16:24:02                                                 

         4 2010-05-10 16:24:02

         5 2010-05-10 16:24:02   

         6 2010-05-10 16:24:02

 2010-05-10 16:24:02  小于 '2010-05-12 21:16:56'

SQL> recover database until time '2010-05-12 21:16:56'

ORA-00279: 更改 2442330 (在 05/11/2010 22:40:23 生成) 對于線程 1 是必需的

ORA-00289: 建議: F:\APP\YANG\ARCHIVE2\79_1_715961434.LOG

ORA-00280: 更改 2442330 (用于線程 1) 在序列 #79 中

指定日志: {=suggested | filename | AUTO | CANCEL}

auto

已應用的日志。

完成媒體恢複。

5)以resetlogs方式打開資料庫。

SQL> alter database open resetlogs;

資料庫已更改。

SQL> select * from t1;

       NUM                                                                     

----------                                                                     

         1                                                                     

         2                                                                     

         3        ------------由查詢結果可知 恢複成功。         

6)當然執行了resetlogs之後,建議進行資料庫的全備份。

SQL> archive log list

資料庫日志模式            存檔模式

自動存檔             啟用

存檔終點            f:\app\yang\archive2

最早的聯機日志序列     1

下一個存檔日志序列   1

目前日志序列           1

SQL> alter database begin backup;

資料庫已更改。

SQL> @f:\sql\hotbak.sql----關于備份的腳本

SQL> alter database end backup;

資料庫已更改。

SQL> alter database backup controlfile

  2  to 'f:\lib\control.ctl' reuse;

資料庫已更改。

SQL> alter system archive log current;------保持一緻性。這一步,有時容易忽略

系統已更改。

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

轉載于:http://blog.itpub.net/22664653/viewspace-662550/