一起來學習Oracle的備份恢復基礎吧-1

Oracle備份和恢復

MTBF:平均故障間隔時間

MTTR:平均恢復時間

備份恢復概述

資料庫故障的型別

user process failure 使用者自動處理

instance failure smon自動處理

user errors 透過備份恢復解決

media failure 透過備份和日誌恢復

備份恢復分類

邏輯備份恢復-面向物件

傳統的匯入匯出:exp/imp

資料泵的匯入匯出:expdp/impdp

邏輯備份就是熱備資料庫物件的某一時刻狀態,不能運用在media failure上,邏輯備份的恢復就是還原備份,沒有recover的概念。

物理備份與恢復-面向media failure

1。 手工備份與恢復(使用者管理的備份恢復)透過OS命令,完成備份還原,然後再使用日誌進行恢復。

1。 自動備份恢復(rman或者其它備份軟體)

物理備份從方式上可以分為一致性備份(冷備)和非一致性備份(熱備);

完整的備份策略應以物理備份為主,邏輯備份為輔(備份一些重要的表)。

閃回技術-面向人為的邏輯錯誤

一種利用UNDO資料或者閃回日誌的快速恢復技術。

完全恢復與不完全恢復

media failure後,需要運用日誌進行recover。

1。 完全恢復

利用完整備份或者部分備份,將datafile恢復到failure前的最後一次commit,無資料丟失。

不完全恢復

需要運用完整備份和日誌將database恢復到過去某個時間點(或SCN),有資料丟失。

非歸檔模式執行時必須備份:控制檔案和整個資料檔案,備份前需要關閉資料庫(冷備)。

非歸檔時,在丟失資料檔案後只能執行完整的資料庫還原,不能進行恢復。

手工備份與恢復

手工備份和恢復命令

備份和還原都使用OS命令

恢復用sqlplus 命令:recover

備份前的檢查操作

查詢有關檢視:v$datafile(控制檔案中的資訊)\v$datafile_header\v$controlfile\v$logfile\dba_tablespaces\dba_data_files

1。 檢查需要備份的資料檔案

select name from v$datafile;

select file_id,file_name,tablespace_name from dba_data_files;

1。 檢查要備份的控制檔案

select name from v$controlfile;

1。 線上redo日誌不需要備份

手工一致性備份(熱備份)及熱備的監控(v$backup)

對只讀的表空間不能做熱備份,臨時表空間不需要備份,非歸檔模式下不支援手工熱備。

1。 備份前進入backup mode

執行begin backup(在資料檔案上生成檢查點,寫入scn,將來恢復的時候以此scn為起點)

SQL>alter database begin backup; //整庫備份

SQL>alter database end backup;

SQL>alter tablespace users begin backup;

SQL>alter tablespace users end backup;

備份期間利用v$backup監控

例:

SQL> select file_id,file_name,tablespace_name from dba_data_files;

一起來學習Oracle的備份恢復基礎吧-1

SQL>alter tablespace test begin backup;

SQL> select FILE#,CHECKPOINT_CHANGE# from v$datafile_header;

一起來學習Oracle的備份恢復基礎吧-1

SQL> select * from v$backup;

一起來學習Oracle的備份恢復基礎吧-1

STATUS是ACTIVE,表示可以備份相應的資料檔案,並且其中的資料塊DBWN仍然可以重新整理。

SQL> alter tablespace test end backup;

一起來學習Oracle的備份恢復基礎吧-1

如果在end backup之前發生資料庫abort,那麼可以在下次啟動到mount時end backup,從而完成例項恢復。

關於split block

一個oracle block一般包含多個os block,當手工熱備時,os的cp單位不是oracle block而是os block,而oracle的DBWR又可能不時的從記憶體中重新整理Oracle block(髒塊)到磁碟上,因此OS級的複製可能造成一種現象:一個Oracle block是由不同版本組成,如未被DBWR重新整理的Header block加上另一部分被重新整理的foot block,這樣cp出來的Oracle block就是split block。

資料庫的一致性是不允許oracle block是split的,Oracle採取的辦法是:在backup mode後,如果發現首次DBWR要寫髒塊,則將該塊備重新整理之前的映象資料記錄到redo buffer,這樣雖然cp後的檔案裡仍然含有split block,而當需要恢復時,日誌會前滾該塊的前映象,保證所有的被恢復的oracle block是一個完整的版本,這就是我們常常發現在熱備時日誌檔案會急劇增大的原因。

dbv檢查資料檔案是否有壞塊

在手工備份前,應該檢查datafile是否有壞塊,備份完成後對備份也做檢查

一起來學習Oracle的備份恢復基礎吧-1

對某個datafile做壞塊檢查

[oracle@localhost test]$ dbv file=/opt/oracle/app/oradata/test/test01。dbf feedback=50

一起來學習Oracle的備份恢復基礎吧-1