oracle 10g資料庫備份與還原總結

kingqu發表於2011-02-12
一.總述

  1.資料庫歸檔模式:

  * 非歸檔模式:當資料庫資料只讀不會改變時,資料不會改變,資料庫適合用非歸檔模式, 這樣提高效能

  * 歸檔模式:對於資料庫資料經常變動,資料庫最好用歸檔模式,這樣可以儘量避免資料庫 資料丟失,使出現問題時災害降到最低

[@more@]

  2.非歸檔模式與歸檔模式間的切換(在命令視窗下):

  @檢查當前日誌操作模式

  f:>sqlplus sys/dba as sysdba

  連線資料庫

  sql>select log_mode from v$database;

  @關閉資料庫,後裝載資料庫,只能在mount狀態下改變日誌操作模式

  sql>startup mount

  @改變日誌模式

  sql>alter database achivelog;(變為歸檔方式,否則為nochivelog)

  sql>alter database open;

  3.檢視歸檔模式相關資訊:

  @若採用預設設定,歸檔日誌位置在快速恢復區

  @配置歸檔日誌位置 log_archive_dest_n (n=[1:10])

  sql>alter system set

  log_archive_dest_1 = 'location =c:demoarchive [optional]';

  sql>alter system set

  log_archive_dest_2 = 'service =standby [mandatory] [reopen]';

  其中:location 是本地

  service 是遠端

  optional 無論歸檔是否成功,都會覆蓋重做日誌

  mandatory只有成功歸檔才會覆蓋重做日誌

  reopen 重新歸檔時間間隔 預設是300s

  @顯示歸檔資訊,即顯示顯示日誌操作模式

  sql>select name,log_mode from v$database;

  @顯示歸檔日誌資訊

  sql>select name,seqnce#,first_change# from v$archive_log;

  seqnce#: 歸檔序列號

  first_change# : 起始SCN值

  @顯示歸檔日誌位置

  sql>select dest_name,destination,status from v$archive_dest;

  dest_name 歸檔位置引數名

  destination 位置

  @顯示日誌歷史資訊

  sql>select * from v$loghist;

  threade# : 重做執行緒號

  seqnce# : 日誌序列號

  first_change# : 起始SCN值

  first_time : 起始SCN發生時間

  switch_change : 切換SCN值

  二.非歸檔模式下的備份與還原

  . 日誌採用覆蓋原有日誌的方式儲存

  . 出現介質失敗時,只能恢復到過去的完全備份點

  . 資料庫OPEN狀態是,不能備份資料庫

  . 必須先關閉資料庫,再備份,且必須備份所有資料,控制檔案

  1.備份==冷備份

  @ 先關閉資料庫

  sql>shutdown immediate

  @ 複製所有資料檔案,和控制檔案

  2.恢復

  * 資料檔案出現丟失,但備份以來的重做日誌內容尚未被覆蓋,此時可以完全恢復

  @裝載資料庫

  sql>startup force mount

  @複製資料檔案備份

  @恢復資料檔案

  sql>recover datafile 1

  @開啟資料庫

  sql>alter database open;

  * 備份檔案的重做日誌內容已經被覆蓋,則只能還原到備份點

  @關閉資料庫

  @複製所有資料和控制備份檔案至原位置

  @裝載資料庫,執行恢復命令

  sql>startup mount

  sql>recover database until cancel

  提示控制檔案不再使用原有重做日誌

  @用resetlogs選項開啟資料庫

  sql>alter database open resetlogs;

三.歸檔模式

  . 可以防止資料丟失

  . 資料處於OPEN狀態時可以進行備份

  . 當出現介質失敗時,除了SYSTEM表空間中的資料檔案外其他的都可以在open狀態下恢復

  . 可執行完全恢復,也可以恢復到備份點與失敗點之間的某時刻

  1.備份

  1)冷備份

  shutdown後複製所需資料檔案和控制檔案

  2)熱備份

  @將資料庫設定為歸檔模式

  @在資料庫上發出全域性檢查點,在所有的資料檔案頭塊上加鎖

  sql>alter database begin backup ;

  @備份資料檔案及控制檔案

  資料檔案直接複製至其他目錄

  控制檔案需使用alter database backup controlfile

  sql>alter database backup controlfile to 'd:backupdemo.ctl';

  @結束資料備份,為確保資料檔案備份的同步性,還應該歸檔當前日誌組

  sql>alter database end backup;

  sql>alter system archive log cuurent;

  3)備份表空間

  *離線備份(表空間處於OFFLINE狀態,SYSTEM表空間和正在使用的UNDO空間不能離線)

  @確定表空間包涵的資料檔案,如空間USERS

  sql>select file_name from dba_data_files

  where tablespace_name = 'users';

  @設定表空間為離線狀態

  sql>alter tablespace users offline;

  @複製資料檔案

  @設定表空間聯機

  sql>alter tablespace users online;

  *聯機備份

  @確定對應關係

  @設定表空間為備份模式

  sql>alter tablespace users begin backup ;

  @複製資料檔案

  @設定表空間為正常模式

  sql>alter tablespace users end backup ;

  *處理聯機備份失敗

  當執行聯機備份時,若出現例程失敗,再次開啟資料庫時,如果資料檔案仍處於備 份狀態,則會出錯,此時需要結束備份

  @裝載資料庫

  sql>startup force mount

  @檢視處於聯機備份狀態的所有資料檔案

  sql>select file# from v$backup where status = 'active';

  @結束聯機備份狀態

  sql>alter tablespace end backup

  或alter tablespace datafile backup;

  或recover datafile 序號

  @開啟資料庫

  sql>alter database open;

  2.還原

  1)完全恢復

  相關命令:

  recover database :恢復資料庫的多個資料檔案(在MOUNT狀態下執行)

  recover tadaspace :恢復多個表空間的所有資料檔案(在open狀態下執行)

  recover datafile :恢復一個或多個資料檔案(在mount,open狀態下都可)

  *在mount狀態下恢復資料檔案(用於SYSTEM表空間恢復)

  @裝載資料庫 mount狀態

  @確定需要恢復的資料檔案

  sql>select file#,error from v$recover_file

  @複製備份至原位置

  @恢復資料庫 recover..上述命令

  @開啟資料庫 alter database open;

  *在open狀態下恢復關閉後意外對視的資料檔案,此時資料庫將無法開啟

  @裝載資料庫 mount

  @確定需要恢復的資料檔案

  @使相應的資料檔案離線

  sql>alter database datafile 4 offline;

  @開啟資料庫

  sql>alter database open

  @複製資料備份檔案

  @恢復資料檔案

  @是資料檔案聯機 alter database datafile 4 online;

  *在open狀態下恢復開啟時意外丟失的資料檔案

  @確定要恢復的資料檔案

  @使資料檔案離線

  @複製資料檔案

  @恢復相應的表空間或資料檔案

  @使相應的表空間或資料檔案聯機

*在open狀態下恢復未備份的資料檔案(要求在歸檔模式下,新建資料檔案,其從簡歷 開始的所有歸檔日誌必須全部存在)

  @裝載資料庫

  @確定要恢復的資料檔案

  @是資料檔案離線

  @開啟資料庫

  @重新建立資料檔案

  sql>alter database create datafile 'd:demousers01.dbf';

  @恢復資料檔案

  @使資料檔案聯機

  2)不完全恢復

  使用已備份的資料檔案,歸檔日誌,和重做日誌,將資料庫恢復到備份點與失敗點之間 某個時刻的狀態

  *恢復分類

  基於時間的恢復:誤刪除表,誤截斷表,提交了錯誤的資料

  基於取笑恢復:恢復到某個日誌序列號之前的狀態

  基於SCN的恢復:恢復到特定SCN值的狀態

  基於備份控制檔案恢復:表空間被意外刪除,或所有控制檔案全部損壞

  *不完全恢復指令

  recover database until time

  recover database until change

  recover database until cancel

  recover database .. using backup controlfile

  *基於時間的恢復

  @關閉資料庫(為防止備份失敗,應備份當前資料庫所有檔案

  @裝載資料庫 startup mount

  @複製所有備份資料檔案,並確定備份檔案的時間點

  sql>select file#,to_char(time,'yyyy-mm-dd hh24:mi:ss)

  from v$recover_file;

  @執行recover database until time

  sql>recover database until time "2006-09-26 16:40:33'

  @以resetlogs方式開啟資料庫,並檢查恢復結果

  sql>alter database open resetlogs;

  @備份資料庫所有資料檔案和控制檔案,因為當以resetlogs方式開啟資料庫後 會重新建立重做日誌,清空原有重做日誌的所有內容,並將日誌序列號復位為1

  sql>select name from v$datafile;

  sql>alter database begin backup;

  複製資料檔案

  sql>alter database end backup;

  sql>alter database backup controlfile

  to 'd:backupdemo.ctl' reuse;

  sql>alter system archive log cuurent;

  *基於SCN恢復

  @關閉資料庫

  @裝載資料庫 mount

  @複製所有備份資料檔案,確定備份檔案SCN值

  sql>select file#,change#, from v$recover_file;

  @執行recover database until change

  sql>recover database until change 675978;

  @以resetlogs方式開啟資料庫

  @備份資料庫所有資料檔案和控制檔案

  *基於取消恢復

  @關閉資料庫

  @裝載資料庫

  @複製所有備份的資料檔案,確定備份檔案的SCN值

  sql>select file#,change# from v$recover_file;

  @執行recover database until cancle

  sql>recover database until cancel

  @以resetlogs方式開啟資料庫

  @備份所有資料檔案和控制檔案

  *基於備份控制檔案的恢復

  @透過檢視alert檔案,確定誤操作時間

  @關閉資料庫

  @複製所有備份的資料檔案,控制檔案

  @裝載資料庫

  @執行recover database ..using backup controlfile

  sql>recover database until time '2004-09-26 19:51:06'

  using backup controlfile

  @以resetlogs 方式開啟資料庫

  @備份所有資料檔案和控制檔案

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

相關文章