模擬數據文件丟失恢復,redolog、archivelog、controlfile文件未丟失的情況恢復。
1、 創建一個表空間、用戶、分配權限、建表。
a) createtablespace HXW_WEN
datafile'D:\ORACLE\ORADATA\HXW168\HXW_WEN_D01.DBF'
size5M autoextendonnext1M maxsize20M;
b)createuser wen identifiedby zerostudy defaulttablespace hxw_wen;
c)grantdbato wen;
d)grantexecuteon dbms_flashback to wen; --dba不用
e)createtable t1(idnumber,scnnumber,insertdate date);
f)createsequence seq_wen_autoid incrementby1startwith1maxvalue99999999cyclenocache;--序列
g)insertinto t1
values(seq_wen_autoid.nextval,dbms_flashback.get_system_change_number,sysdate); --先不插入數據
2、scn與歸檔日誌關係
事務對應的scn如果落在了哪個archivelog裏,那麼這個archivelog在恢復時就被用到。
使用下面語句插入數據:
insertinto t1
values(seq_wen_autoid.nextval,dbms_flashback.get_system_change_number,sysdate);
查看日誌信息:
select a.GROUP#,a.SEQUENCE#,a.STATUS,a.FIRST_CHANGE#,a.NEXT_CHANGE#,b.MEMBER from v$log a,v$logfile b where a.GROUP#=b.GROUP#;
重複插入並switch logfile:
select SEQUENCE#,FIRST_CHANGE#,NEXT_CHANGE#,NAMEfrom v$archived_log
若是要恢復ID爲6的數據,那麼需要75號歸檔日誌文件。
Oracle通過scn把多個歸檔日誌文件組成一個大的邏輯文件,所有連續的歸檔日誌可以看作是某段時間對oracle數據庫操作的日誌信息的一個獨立大文件。即物理上獨立,邏輯上統一。
3、模擬數據庫在有數據的情況下丟失數據文件
a)關閉數據,複製一份hxw_wen_d01.dbf文件(丟失多個數據文件一個數據文件恢復步驟一樣)。
脫機備份,需要備份:
控制文件(重要)、數據文件(臨時文件不用備份)、redolog文件(重要)、歸檔日誌文件(重要)、參數文件、口令文件。
select*from v$parameter wherenamelike'%control_files%'
select*from dba_data_files
select*from v$logfile
show parameter log_archive_dest
b)啓動數據庫,進行增刪改操作:
當前數據:
添加數據:重複下面的動作。
SQL> insert into t1values(seq_wen_autoid.nextval,dbms_flashback.get_system_chan
ge_number,sysdate);
SQL> commit;
SQL> alter system switch logfile;
再添加二條數據,但不提交事務。
20 970159 2014/10/01 12:03:47
21 970160 2014/10/01 12:03:48
摸擬數據庫異常,並且導致hxw_wen_d01.dbf文件丟失。要求恢復的記錄有id19的數據。
注:未提交的事務,oracle會自動rollback。
Shutting down instance (abort)
License high water mark = 8
USER (ospid: 4232): terminating theinstance
Instance terminated by USER, pid = 4232
Wed Oct 01 12:05:09 2014
Instance shutdown complete
關閉數據庫,然後把hxw_wen_d01.dbf文件改名,啓動數據庫報錯提示如下:
現在啓動到mount狀態:
查看scn值:
由於6號文件丟失,所以v$datafile_header查的scn值爲0。
把備份的(舊的)dbf文件複製回來。
4、 數據文件恢復
舊的備份文件已複製回來,此時Alter database open;提示需要介質恢復。
恢復數據文件6號或者恢復數據庫都可以,命令如下:
Recover datafile 6;
Recover database; --多個數據文件丟失時可以直接用這個。
恢復過程如下:
由於歸檔日誌都在原位置,所以不用指定文件,可以直接輸入auto也可以直接回車。
恢復時只用到歸檔日誌80號,81、82沒有用到。
上面操作小總結:恢復數據文件,就是通過歸檔日誌來提升舊數據文件的scn 號,提升過程中,需要從歸檔日誌或者redolog中找到對數據庫的操作記錄,重新在數據文件、buffer操作一次。達到恢復到所需要的時間點的數據。
參考: