IT貓撲網(wǎng):您身邊最放心的安全下載站! 最新更新|軟件分類|軟件專題|手機(jī)版|論壇轉(zhuǎn)貼|軟件發(fā)布

您當(dāng)前所在位置:首頁(yè)數(shù)據(jù)庫(kù)Oracle → Oracle數(shù)據(jù)庫(kù)的災(zāi)難恢復(fù)方法

Oracle數(shù)據(jù)庫(kù)的災(zāi)難恢復(fù)方法

時(shí)間:2015/6/28來(lái)源:IT貓撲網(wǎng)作者:網(wǎng)管聯(lián)盟我要評(píng)論(0)

  要對(duì)oracle數(shù)據(jù)庫(kù)備份與恢復(fù)有清晰的認(rèn)識(shí),首先有必要對(duì)數(shù)據(jù)庫(kù)的幾種運(yùn)行狀態(tài)有充分的了解。Oracle數(shù)據(jù)庫(kù)的運(yùn)行狀態(tài)主要分為3種,他們依次為:

  Nomount(非安裝)Oracle只是讀取ini文件中的配置信息,并初始化SGA區(qū)。

  Mount(安裝)Oracle除了需要讀取ini文件還要讀取控制文件,并從中獲取有關(guān)數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)等信息。

  Open(打開(kāi))數(shù)據(jù)庫(kù)要檢查所有文件處于同一時(shí)間點(diǎn),對(duì)錯(cuò)誤進(jìn)行恢復(fù)對(duì)未完成事務(wù)回滾,并最終可以允許用戶訪問(wèn)。

  數(shù)據(jù)庫(kù)的備份主要分為三種類型:冷備份;熱備份;邏輯備份;

  數(shù)據(jù)庫(kù)的備份不是本文討論的重點(diǎn),在這里只作一個(gè)概要的介紹,Oracle數(shù)據(jù)庫(kù)備份主要有:

  Cold Backup(冷備份) 主要指在關(guān)閉數(shù)據(jù)庫(kù)的狀態(tài)下進(jìn)行的數(shù)據(jù)庫(kù)完全備份,備份內(nèi)容包括所有數(shù)據(jù)文件、控制文件、聯(lián)機(jī)日志文件、ini文件。

  Hot Backup(熱備份) 指在數(shù)據(jù)庫(kù)處于運(yùn)行狀態(tài)下,對(duì)數(shù)據(jù)文件和控制文件進(jìn)行備份,要使用熱備份必須將數(shù)據(jù)庫(kù)運(yùn)行在(Archive Log)歸檔方式下。

  Export(邏輯備份)這是最簡(jiǎn)單的備份方法,可按數(shù)據(jù)庫(kù)中某個(gè)表、某個(gè)用戶或整個(gè)數(shù)據(jù)庫(kù)來(lái)導(dǎo)出,并且支持全部、累計(jì)、增量三種方式。使用這種方法,數(shù)據(jù)庫(kù)必須處于打開(kāi)狀態(tài),而且如果數(shù)據(jù)庫(kù)不是在restrict狀態(tài)將不能保證導(dǎo)出數(shù)據(jù)的一致性。

  數(shù)據(jù)庫(kù)的恢復(fù)可分為兩大類:完全恢復(fù);不完全恢復(fù);

  完全恢復(fù)指將數(shù)據(jù)庫(kù)恢復(fù)到發(fā)生故障的時(shí)間點(diǎn),不丟失任何數(shù)據(jù)。不完全恢復(fù)指將數(shù)據(jù)庫(kù)恢復(fù)到發(fā)生故障前的某一個(gè)時(shí)間點(diǎn),此時(shí)間點(diǎn)以后的所有改動(dòng)將會(huì)丟失。如果沒(méi)有特殊需求,建議應(yīng)盡量使用完全恢復(fù)。

  Oracle數(shù)據(jù)庫(kù)的恢復(fù)過(guò)程分兩步進(jìn)行,首先將把存放在重做日志文件中的所有重做運(yùn)用到數(shù)據(jù)文件,之后對(duì)重做中所有未提交的事務(wù)進(jìn)行回滾,這樣所有數(shù)據(jù)就恢復(fù)到發(fā)生災(zāi)難那一時(shí)刻了。數(shù)據(jù)庫(kù)的恢復(fù)只能在發(fā)生故障之前的數(shù)據(jù)文件上運(yùn)用重做,將其恢復(fù)到故障時(shí)刻,而不能將數(shù)據(jù)文件反向回滾到之前的某一個(gè)時(shí)刻。舉個(gè)例子,我們有一個(gè)2001/1/1的數(shù)據(jù)庫(kù)備份,當(dāng)2001/5/1使我們發(fā)現(xiàn)數(shù)據(jù)庫(kù)中數(shù)據(jù)發(fā)生混亂,希望將數(shù)據(jù)庫(kù)恢復(fù)到2001/4/30時(shí)的狀態(tài),我們只能先恢復(fù)2001/1/1的數(shù)據(jù)庫(kù)備份然后在其上運(yùn)用重做記錄使其前滾到2001/4/30時(shí)的狀態(tài),而不能將2001/5/1的數(shù)據(jù)庫(kù)向后回滾到2001/4/30。

  為了系統(tǒng)的設(shè)計(jì)數(shù)據(jù)庫(kù)的恢復(fù)方案,我們先對(duì)可能遇到的錯(cuò)誤進(jìn)行分類,Oracle數(shù)據(jù)庫(kù)錯(cuò)誤主要分為5大類:

  SQL語(yǔ)句失敗

  線程失敗

  實(shí)例失敗

  用戶操作失敗

  存儲(chǔ)設(shè)備失敗

  如果發(fā)生前三種失敗,不需要我們?nèi)藶楦缮,Oracle系統(tǒng)會(huì)自動(dòng)進(jìn)行恢復(fù)。對(duì)于用戶操作型的失敗(如誤刪除數(shù)據(jù)),我們采取的補(bǔ)救措施主要有導(dǎo)入最新的邏輯備份或進(jìn)行到某一時(shí)間點(diǎn)的不完全恢復(fù)。從Oracle 8之后的新版本中引入了基于表空間的時(shí)間點(diǎn)恢復(fù)(TSPITR),可以單獨(dú)將包含錯(cuò)誤操作的表空間恢復(fù)到指定時(shí)間,而不必對(duì)整個(gè)數(shù)據(jù)庫(kù)進(jìn)行不完全恢復(fù)。當(dāng)錯(cuò)誤操作發(fā)現(xiàn)比較及時(shí)而且數(shù)據(jù)量不大的情況下也可以考慮使用logminer生成反向SQL。

  針對(duì)存儲(chǔ)設(shè)備的失敗的情況比較復(fù)雜也是本文討論的重點(diǎn),存儲(chǔ)設(shè)備的失敗必然會(huì)使放置在其上的文件變?yōu)椴豢捎,我們先將Oracle數(shù)據(jù)庫(kù)所涉及到的文件進(jìn)行一個(gè)劃分,主要可分為:

  Oracle的系統(tǒng)文件,指Oracle的運(yùn)行文件,各種應(yīng)用程序

  數(shù)據(jù)庫(kù)控制文件

  數(shù)據(jù)庫(kù)聯(lián)機(jī)重做日志文件

  數(shù)據(jù)文件

  歸檔日志文件

  避免第一種文件失敗主要依賴系統(tǒng)管理員進(jìn)行操作系統(tǒng)級(jí)的備份,當(dāng)發(fā)生事故后只能依靠操作系統(tǒng)備份將其恢復(fù)。

  控制文件中記錄著整個(gè)數(shù)據(jù)庫(kù)的結(jié)構(gòu)、每個(gè)數(shù)據(jù)文件的狀況、系統(tǒng)SCN、檢查點(diǎn)計(jì)數(shù)器等重要信息,在創(chuàng)建數(shù)據(jù)庫(kù)時(shí)會(huì)讓用戶指定三個(gè)位置來(lái)存放控制文件,他們之間互為鏡像,當(dāng)其中任何一個(gè)發(fā)生故障,只需將其從ini文件中注釋掉故障數(shù)據(jù)文件就可重新將數(shù)據(jù)啟動(dòng)。當(dāng)所有控制全部失效時(shí),可以在Nomount模式下執(zhí)行create controlfile來(lái)重新生成控制文件,但必須提供redo log,data file,文件名和地址以及MAXLOGFILES,MAXDATAFILES,MAXINSTANCES等信息。如果失敗之前運(yùn)行過(guò)alter database backup controlfile to trace或alter database backup controlfile to ‘xxx’對(duì)控制文件作備份,恢復(fù)時(shí)可使用生成的腳本來(lái)重建或用備份文件覆蓋,如果使用了舊的控制文件在恢復(fù)時(shí)要使用recover xxx using backup controlfile選項(xiàng)來(lái)進(jìn)行恢復(fù),并使用resetlogs選項(xiàng)來(lái)打開(kāi)數(shù)據(jù)庫(kù)。

  如果丟失的是聯(lián)機(jī)日志文件,分兩種情況處理1、丟失的是非活動(dòng)的日志文件;2、丟失的是當(dāng)前激活的日志文件。

  如果是第一種情況,而發(fā)生故障的日志文件組又具有多個(gè)成員,可以先將數(shù)據(jù)庫(kù)shutdown,然后用操作系統(tǒng)命令將損壞日志文件組中好的日志成員文件把損壞的成員文件覆蓋(在同一個(gè)日志成員組中的所有日志文件的各為鏡象的),如果其物理位置不可用可將其拷貝到新的驅(qū)動(dòng)器上,使用alter database rename file ‘xxxx’ to ‘xxxx’改變文件位置,之后啟動(dòng)數(shù)據(jù)庫(kù),如果正常馬上進(jìn)行一個(gè)冷備份。如果損壞的日志組中只有一個(gè)日志成員,先mount上數(shù)據(jù)庫(kù),將其轉(zhuǎn)換為noarchivelog模式,執(zhí)行alter database add logfile member ‘xxx’ to group ‘x’給相關(guān)組增加一個(gè)成員,再執(zhí)行alter database drop logfile member ‘bad_file’將損壞的日志文件刪除,由于數(shù)據(jù)庫(kù)的結(jié)構(gòu)發(fā)生變動(dòng)需要備份控制文件,之后將數(shù)據(jù)庫(kù)改回archivelog模式,做一個(gè)冷備份。

  如果丟失的是當(dāng)前激活的日志文件,數(shù)據(jù)庫(kù)又沒(méi)有鏡像而且當(dāng)前日志組中所有成員均變?yōu)椴豢捎。首先將?shù)據(jù)庫(kù)shutdown abort,從最近的一次全備份中恢復(fù)所有的數(shù)據(jù)文件,將數(shù)據(jù)庫(kù)啟動(dòng)到mount狀態(tài)。如果原來(lái)的日志文件物理位置不可用,使用alter database rename file ‘xxx’ to ‘xxx’改變文件的存放位置。然后,使用recover database until cancel命令來(lái)恢復(fù)數(shù)據(jù)庫(kù),直到提示最后一個(gè)歸檔日志運(yùn)用完之后,輸入cancel。之后用alter database open resetlogs打開(kāi)數(shù)據(jù)庫(kù),如果沒(méi)有問(wèn)題,立即進(jìn)行一個(gè)冷備份。注意!所有包含在損壞的redo log中的信息將會(huì)丟失,也就是說(shuō)數(shù)據(jù)庫(kù)崩潰前已經(jīng)提交的數(shù)據(jù)有可能會(huì)丟失。這對(duì)于某些要求很高的應(yīng)用將會(huì)損失慘重,因此應(yīng)盡量使每個(gè)日志組具有多個(gè)日志成員,并且放置在不同的驅(qū)動(dòng)器上一防止發(fā)生介質(zhì)故障。

  數(shù)據(jù)文件發(fā)生故障的情況也分為多種情況,1、丟失包含在SYSTEM表空間的數(shù)據(jù)文件;2、丟失沒(méi)有回滾段的非SYSTEM數(shù)據(jù)文件;3、丟失有回滾段的非SYSTEM數(shù)據(jù)文件。

  如果損壞的是系統(tǒng)表空間的數(shù)據(jù)文件。唯一的辦法是從上一次備份中恢復(fù)受損的數(shù)據(jù)文件,(如果原位置不可用使用alter database rename命令改變新文件的位置),之后在數(shù)據(jù)庫(kù)mount的狀態(tài)下執(zhí)行recover database/datafile對(duì)數(shù)據(jù)庫(kù)進(jìn)行回復(fù),才能將數(shù)據(jù)庫(kù)打開(kāi)。注意:當(dāng)SYSTEM表空間或其中的數(shù)據(jù)文件脫機(jī),數(shù)據(jù)庫(kù)是無(wú)法被打開(kāi)的,因此必須在mount狀態(tài)下將所有的恢復(fù)工作完成。

  當(dāng)丟失的數(shù)據(jù)文件不屬于系統(tǒng)表空間而且也不包含回滾段時(shí),有可選擇在數(shù)據(jù)庫(kù)的兩種狀態(tài)下進(jìn)行恢復(fù)---在數(shù)據(jù)庫(kù)open的狀態(tài)或者在數(shù)據(jù)庫(kù)mount的狀態(tài)。如果用戶急于訪問(wèn)數(shù)據(jù)庫(kù)中未受損部分的數(shù)據(jù)或?qū)p壞的數(shù)據(jù)文件進(jìn)行恢復(fù)需要很長(zhǎng)時(shí)間,可以先使受損的數(shù)據(jù)文件脫機(jī),將數(shù)據(jù)庫(kù)打開(kāi)給用戶訪問(wèn),再恢復(fù)受損的數(shù)據(jù)文件最后將其聯(lián)機(jī)。步驟如下:先在數(shù)據(jù)庫(kù)mount時(shí),將相關(guān)的數(shù)據(jù)文件或表空間進(jìn)行脫機(jī)alter database datafile xxx offline,然后將數(shù)據(jù)庫(kù)open,這樣就能使數(shù)據(jù)庫(kù)未受損的部分先供用戶訪問(wèn),之后再進(jìn)行recover datafile/tablespace,完成后用alter database datafile/tablespace ‘xxx’ online使其恢復(fù)聯(lián)機(jī)就可被訪問(wèn)了。 當(dāng)然用戶也可以選擇在數(shù)據(jù)庫(kù)mount狀態(tài)下,用recover database/datafile將所有的恢復(fù)工作做完,將所有數(shù)據(jù)文件一起打開(kāi)供用戶訪問(wèn)。

  如果丟失的數(shù)據(jù)文件是最后一種情況,即包含有回滾段的非系統(tǒng)表空間數(shù)據(jù)文件。也可以選擇是在數(shù)據(jù)庫(kù)先open的狀態(tài)還是在mount狀態(tài)下恢復(fù)。不過(guò)與上一種情況不同的是當(dāng)包含回滾段的數(shù)據(jù)文件損壞時(shí),如果使其先offline將數(shù)據(jù)庫(kù)打開(kāi),那么所有數(shù)據(jù)庫(kù)崩潰前未提交的事務(wù)涉及到的表將無(wú)法訪問(wèn),也就是說(shuō)在回滾段恢復(fù)前其中涉及的對(duì)象都不允許被訪問(wèn)。而且當(dāng)所有包含回滾段的數(shù)據(jù)文件都在offline狀態(tài)時(shí),數(shù)據(jù)庫(kù)無(wú)法進(jìn)行任何DML操作,因此在數(shù)據(jù)庫(kù)open狀態(tài)恢復(fù)包含回滾段的數(shù)據(jù)文件時(shí),可以先創(chuàng)建幾個(gè)臨時(shí)回滾段供數(shù)據(jù)使用create rollback segment temp1 tablespace system; alter rollback segment temp1 online;,當(dāng)數(shù)據(jù)文件恢復(fù)后再將他們刪除alter rollback segment temp1 offline; drop rollback segment temp1;。注意:當(dāng)用這種方法使恢復(fù)的數(shù)據(jù)文件online之后,所有的原有回滾段將處于offline狀態(tài),必須手工使用alter rollback segment RBSxx online;使他們恢復(fù)聯(lián)機(jī)狀態(tài),這樣才能被數(shù)據(jù)庫(kù)正常使用。如果在數(shù)據(jù)庫(kù)mount狀態(tài)下完成所有恢復(fù),則不需要上述步驟。

  如果丟失數(shù)據(jù)文件后,用戶發(fā)現(xiàn)沒(méi)有故障前的數(shù)據(jù)文件的備份,而且自從丟失的數(shù)據(jù)文件最早建立之后一直沒(méi)有使用過(guò)resetlogs選項(xiàng)打開(kāi)過(guò)數(shù)據(jù)庫(kù)。也就是說(shuō)用戶的控制文件是在損壞的數(shù)據(jù)文件建立前創(chuàng)建的,歸檔日志中包括對(duì)損壞數(shù)據(jù)文件的所有重做記錄。用戶就還有一種恢復(fù)方法,用戶可以先將損壞的數(shù)據(jù)文件或表空間脫機(jī)alter database datafile / tablespace xxx offline,之后執(zhí)行alter database create datafile ‘new/xxx.dbf’ as ‘old/xxx.dbf’,數(shù)據(jù)庫(kù)會(huì)根據(jù)保存在控制文件中的信息重建一個(gè)空的數(shù)據(jù)文件,之后再執(zhí)行reco

關(guān)鍵詞標(biāo)簽:Oracle,數(shù)據(jù)庫(kù),災(zāi)難恢

相關(guān)閱讀

文章評(píng)論
發(fā)表評(píng)論

熱門(mén)文章 Oracle中使用alter table來(lái)增加,刪除,修改列Oracle中使用alter table來(lái)增加,刪除,修改列oracle中使用SQL語(yǔ)句修改字段類型-oracle修oracle中使用SQL語(yǔ)句修改字段類型-oracle修使用低權(quán)限Oracle數(shù)據(jù)庫(kù)賬戶得到管理員權(quán)限使用低權(quán)限Oracle數(shù)據(jù)庫(kù)賬戶得到管理員權(quán)限Oracle對(duì)user的訪問(wèn)控制Oracle對(duì)user的訪問(wèn)控制

相關(guān)下載

人氣排行 ORACLE SQL 判斷字符串是否為數(shù)字的語(yǔ)句Oracle中使用alter table來(lái)增加,刪除,修改列的語(yǔ)法ORACLE和SQL語(yǔ)法區(qū)別歸納(1)oracle grant 授權(quán)語(yǔ)句如何加速Oracle大批量數(shù)據(jù)處理Oracle刪除表的幾種方法ORACLE修改IP地址后如何能夠使用Oracle 10g創(chuàng)建表空間和用戶并指定權(quán)限