Oracle手工恢復案例(非歸檔模式)

手工恢復(非歸檔模式)

案例一:歷史日誌沒有被覆蓋

1.首先把數據庫切成非歸檔模式:

startup mountforce

alter database noarchivelog;

alter database open;

再次查看數據庫模式

sys@SIQIAN11>archive log list

Database log mode              No Archive Mode

Automaticarchival             Disabled

Archivedestination            /backup/arch

Oldest online log sequence    15

Current log sequence           17

2.冷備

3.查看當前日誌信息

sys@SIQIAN11>select group#,sequence#,archived,status from v$log;

 

    GROUP SEQUENCE# ARC STATUS

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

         1         19 NO  CURRENT

         2         17 NO  INACTIVE

         3         18 NO  INACTIVE

4.用test用戶登錄建表插入數據

test@SIQIAN11>create table t01(id int) tablespace test;

 

test@SIQIAN11>begin

  2  for i in 1..10

  3  loop

  4  insert into t01 values(i);

  5  end loop;

  6  end;

  7  /

  commit;

  再次查看當前日誌

  sys@SIQIAN11>select group#,sequence#,archived,status from v$log;

 

    GROUP SEQUENCE# ARC STATUS

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

         1         19 NO  CURRENT

         2         17 NO  INACTIVE

         3         18 NO  INACTIVE

    說明這次變化記錄在了第1組日誌中,此時日誌沒有被覆蓋。

5.關庫刪除數據文件

shutdown abort

[oracle@siqian siqian11g]$ rm -f /u01/oradata/siqian11g/test01.dbf

6.起庫並查看要恢復的數據文件

startup

出錯:

ORA-01157: cannot identify/lock data file 6 - see DBWR trace file

ORA-01110: data file 6: '/u01/oradata/siqian11g/test01.dbf'

查看要恢復的數據文件

sys@SIQIAN11>select file#,error from v$recover_file;

     FILE# ERROR

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

         1 UNKNOWNERROR

         2 UNKNOWNERROR

         3 UNKNOWNERROR

         4 UNKNOWNERROR

         5 UNKNOWNERROR

         6 FILE NOT FOUND

 

6 rows selected.

7.還原數據文件並做恢復

[oracle@siqian siqian11g]$ cp /backup/cold/test01.dbf /u01/oradata/siqian11g/

sys@SIQIAN11>recover datafile 6;

Media recoverycomplete.

sys@SIQIAN11>alter database open;

8.驗證

sys@SIQIAN11>select * from test.t01;

        ID

----------

         1

         2

         3

         4

         5

         6

         7

         8

         9

        10

10 rows selected.

案例二:日誌發生切換,歷史日誌被覆蓋(只能作不完全恢復)

承接上面的例子,這次做完一些操作後切日誌使其切換。

模擬環境:

1.test用戶登錄再在t01表中插入若干數據

test@SIQIAN11>begin

  2  for i in 11..20

  3  loop

  4  insert into t01 values(i);

  5  end loop;

  6  end;

  7  /

PL/SQL procedure successfully completed.

commit;

2.查看當前日誌信息

 

sys@SIQIAN11>select group#,sequence#,archived,first_change# from v$log;

 

    GROUP SEQUENCE# ARC FIRST_CHANGE#

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

         1         19 NO        2200111

         2         20 NO        2225498

         3         18 NO        2179197

也就是說剛纔的變化記錄在了第1組中

3.切換日誌,使其被覆蓋

alter system switch logfile;

多切幾次然後再次查看:

sys@SIQIAN11>select group#,sequence#,archived,first_change# from v$log;

    GROUP SEQUENCE# ARC FIRST_CHANGE#

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

         1         22 NO        2226207

         2         23 NO        2226211

         3         21 NO        2226205

現在序列19已經被覆蓋。

而且t01表中有20條記錄。

4.關庫刪除相應的數據文件

shutdown abort

[oracle@siqian siqian11g]$ rm -f /u01/oradata/siqian11g/test01.dbf

5.起庫並查看要恢復的數據文件

ORA-01157: cannot identify/lock data file 6 - see DBWR trace file

ORA-01110: data file 6: '/u01/oradata/siqian11g/test01.dbf'

sys@SIQIAN11>select file#,error from v$recover_file;

     FILE# ERROR

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

         1 UNKNOWN ERROR

         2 UNKNOWN ERROR

         3 UNKNOWN ERROR

         4 UNKNOWN ERROR

         5 UNKNOWN ERROR

         6 FILE NOT FOUND

 

6 rows selected.

6.還原數據文件並恢復

[oracle@siqian siqian11g]$ cp /backup/cold/test01.dbf /u01/oradata/siqian11g/

sys@SIQIAN11>recover datafile 6;

ORA-00279: change 2201687 generated at 06/29/2013 18:36:58 needed for thread 1

ORA-00289: suggestion : /backup/arch/arch_1_819372290_19.log

ORA-00280: change 2201687 for thread 1 is in sequence #19

Specify log: {<RET>=suggested | filename | AUTO | CANCEL}

auto

ORA-00308: cannot open archived log '/backup/arch/arch_1_819372290_19.log'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

 

ORA-00308: cannot open archived log '/backup/arch/arch_1_819372290_19.log'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

因爲序列19的日誌沒有被歸檔,所以在恢復時會報錯。所以只能做不完全恢復。

7.還原所有控制文件和數據文件來做不完全恢復

[oracle@siqian siqian11g]$ cp /backup/cold/ *.ctl /u01/oradata/siqian11g/

[oracle@siqian siqian11g]$ cp /backup/cold/ *.dbf /u01/oradata/siqian11g/

8.把庫起到Mount並查看數據文件頭和控制文件頭的SCN信息

startup mount force

查看SCN

sys@SIQIAN11>select file#,checkpoint_change# from v$datafile_header;

     FILE# CHECKPOINT_CHANGE#

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

         1            2201687

         2            2201687

         3            2201687

         4            2201687

         5           2201687

         6            2201687

 

6 rows selected.

sys@SIQIAN11>select file#,checkpoint_change# from v$datafile;

     FILE# CHECKPOINT_CHANGE#

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

         1            2201687

         2            2201687

         3            2201687

         4            2201687

         5            2201687

         6            2201687

 

6 rows selected.

但redo裏的SCN和數據文件、控制文件裏的SCN是不同步的,所以現在開庫會出問題

alter database open;

ERROR at line 1:

ORA-00338: log 1 of thread 1 is more recent than control file

ORA-00312: online log 1 thread 1: '/u01/oradata/siqian11g/redo01.log'

7.對整個數據庫做不完全恢復

recover database untilcancel;

8.以resetlogs方式打開數據庫

alter database open resetlogs;

9.驗證

select * from test.t01;

發現只有10條記錄。

10.冷備

因爲數據庫是以resetlogs方式打開的,所以此時最好做一個數據庫全備。

 

發佈了28 篇原創文章 · 獲贊 6 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章