數據備份恢覆在資料庫管理中至關重要,今天,總結一下資料庫備份與恢復的方案,需要註意的方面和實際操作!、 ...
原創作品,轉自請在文字開頭顯眼位置註明出處:https://www.cnblogs.com/sunshine5683/p/10052949.html
數據備份恢覆在資料庫管理中至關重要,今天,總結一下資料庫備份與恢復需要註意的方面和實際操作!、
一、在備份之前首先應該執行commit語句,將所有未提交的數據進行提交,(提交了的數據也有可能在記憶體),執行alter system checkpoint語句,所有的臟數據(記憶體中所有修改過的數據,這些數據有可能被提交,也有可能未被提交)都會被寫入到了磁碟上,但是如果被寫入磁碟的數據塊處於未提交狀態,那麼另外一個會話登入後是不可見的!
commit:標誌了事務的提交,數據的生效,其他用戶或者會話才是可見的,不管該數據是在磁碟上還是在記憶體中。
commit後首先將redo保存到磁碟,首先保存redo而不保存數據的原因是redo的保存比修改數據的保存快很大,保證了數據提交的速度,而且一旦redo被保存,那麼即使數據沒有被保存,也可以通過redo將該數據恢復,所以,redo的保存保證了數據的安全。
redo保證了數據的安全,此時再執行checkpoint,並不是多此一舉,將記憶體數據寫入磁碟,一是保證記憶體的利用率,不至於記憶體臟數據太大,二是對於數據恢復有很大的作用
二、實例恢複發生在oracle啟動的第三個階段
第一階段:startup nomount(讀取spfile),沒有進行實例恢復
第二階段:alter database mount(讀取控制文件),沒有進行實例恢復
第三階段:alter database open(檢查控制文件,數據文件頭,檢查數據完整性),進行實例恢復
下麵將資料庫強制關閉,shutdown abort(強制關閉,這樣關閉快速,但是一些記憶體數據不會被保存到資料庫磁碟,在資料庫下次啟動的時候就會進行實例恢復,在實際環境中不建議這樣關閉),然後分階段啟動資料庫:
資料庫實例恢復的大概原理:Oracle在打開資料庫時(alter database open),會檢查每個文件頭上的信息(SCN),並同控制文件中相應的信息(SCN)比較,如果不一致,則進行實例恢復。
實例恢復的過程 :
首先:前滾 rolling forward ,讀取狀態為current和active狀態的日誌(redo log),將發生crash時,沒有來得及寫到磁碟上的數據塊,使用redo的信息來恢復。
其次:打開資料庫(alter database open)
最後:回滾 rolling back: 將沒有提交的事務進行回滾。
三:介質恢復
當發生以下情況時,實例恢復無效,需要進行介質恢復:
1、數據文件丟失,損壞
2、線上日誌文件(online redo)丟失,損壞
3、數據文件太舊 (比如從一個備份集中恢復過來的文件)
4、文件太新(比如,其它所有的文件都是從備份中恢復過來的)
如下圖:將數據文件11號文件offline之後,進行11號文件恢復,顯示出錯,這種錯誤就是數據文件太舊無法恢復
四、資料庫的備份方式
1、Rman(物理備份):針對 資料庫,表空間,數據文件,數據塊,這種方案備份的速度很慢。通常在備份數據時候不建議備份線上日誌文件,其他文件都可以備份
2、exp,expdp(邏輯備份):針對 用戶,資料庫對象(表,分區...),這種備份方案對數據的完整性保證不是很好
3、只讀表空間+傳遞表空間,這種備份方案要求將某些表空間置為只讀形式,類似與數據倉庫,不能再改變
4、Data guard,這種備份方案比較常用
五、資料庫備份操作
1、Rman備份:首先建議將數據運行在歸檔模式下
其次,以rman模式登錄資料庫,如果全庫備份,直接使用下麵命令備份就好
如果備份個別表空間,則首先我們看看有哪些表空間
隨便選擇一個表空間,我們就選擇users表空間進行備份,可以看到速度很快
接下來恢復該表空間,過程都是很快的
2、export
備份:export 用戶名/密碼 file=用戶名.dmp 導出該用戶下的所有表
恢復: import 用戶名/密碼 file=用戶名.dmp full=y(表示全部導入)
import 用戶名/密碼 file=用戶名.dmp tables=tt(表示導入tt表)
對於此種方式,暫時先不做演示了,其方式也是很簡單的,由於此次總結是針對真正問題的解決需要而測試的,此次並不涉及export備份,所以將在後續總結中繼續完善與演示此部分的操作,用到的時候將會繼續在本篇博客中添加此部分內容。
六、Oracle資料庫的閃回技術--flashback
當我們在進行數據表的修改或者刪除後,並且對數據表進行了提交,那麼一般情況下資料庫的表示很難再回覆的,但是當有了閃回技術之後,同樣的問題便變得可以實現了,不得不說資料庫的閃回技術是非常重要的一種操作,給了很多dba感覺人生是多麼美好的瞬間!下麵就資料庫的閃回技術進行測試實驗
1、查看資料庫的閃回功能是否打開,一般情況下是沒有打開的,因為會消耗多餘的磁碟占用和記憶體資源等,下圖可以看到,本人資料庫的閃回功能並沒有打開
2、打開flashback_on,首先將資料庫關閉,然後打開到mount階段,開啟flashback
3、此時查看該視圖是否打開,可以看到已經打開
4、此時,如果誤將數據表t1刪除,可以在回收站找到並還原(表的閃回)
並使用flashback table t1 to before drop;語句將其還原,但是如果刪除時候使用drop table t1 purge,刪除的同時情況回收站,那麼就不能夠再使用閃回命令將其還原了,就真正刪除了。
同樣還有ddl語句等的閃回操作,都是可以執行的,這裡就不做介紹了,總之,對於從事資料庫工作的同仁們,一定得小心行事,數據一旦丟失,會造成不可預知的後果,所以,在不斷提升自己的同時,操作上的細緻也是至關重要的,希望我們在工作學習的路上越走越遠,越走越好!