溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

Oracle數(shù)據(jù)庫不同損壞級別的恢復(fù)教程

發(fā)布時間:2020-09-25 01:28:40 來源:腳本之家 閱讀:192 作者:老王談運維 欄目:數(shù)據(jù)庫

前言

在 DBA 的日常工作中不可避免存在著數(shù)據(jù)庫的損壞,本文將主要介紹 Oracle 數(shù)據(jù)庫遇到不同損壞級別下的應(yīng)該采用的恢復(fù)方法,供讀者在遇到此類情景時,能的找到適合自己的恢復(fù)方法,提高工作效率。

數(shù)據(jù)塊損壞的恢復(fù)

當數(shù)據(jù)文件中僅有少量的數(shù)據(jù)塊發(fā)生了介質(zhì)損壞時,我們可以利用RMAN對其進行數(shù)據(jù)塊一級的恢復(fù)。數(shù)據(jù)塊級的局部恢復(fù)可以大大縮短恢復(fù)時間,甚至縮短到其他恢復(fù)方式的千分之幾。此外,在數(shù)據(jù)塊存在損壞而進行的恢復(fù)中,系統(tǒng)可以處于運行狀態(tài),這個數(shù)據(jù)文件也可以處于聯(lián)機應(yīng)用狀態(tài),無須將其設(shè)置為脫機,保持應(yīng)用運行狀態(tài)。

Oracle數(shù)據(jù)庫不同損壞級別的恢復(fù)教程

1)連接RMAN環(huán)境,并以 SYSDBA(SYSOPER) 身份連接數(shù)據(jù)庫:

$rman target /

2)執(zhí)行下面的數(shù)據(jù)塊修復(fù)命令進行數(shù)據(jù)塊的修復(fù):

rman>blockrecover datafile 3 block 2,150,152;

現(xiàn)在數(shù)據(jù)塊得以恢復(fù),系統(tǒng)繼續(xù)運行。

數(shù)據(jù)文件損壞的恢復(fù)

第一步:設(shè)置損壞的數(shù)據(jù)文件脫機

SQL>alter database datafile 4 offline;

第二步:由RMAN裝載數(shù)據(jù)文件

RMAN>restore datafile 4;

第三步:對損壞的數(shù)據(jù)文件進行恢復(fù)

RMAN>recover datafile 4;

第四步:設(shè)置已恢復(fù)數(shù)據(jù)文件聯(lián)機

RMAN>sql “alter database datafile 4 online”;

第五步:查看數(shù)據(jù)文件的可用性

SQL>select name,enabled,status from v$datafile;

至此,一個非系統(tǒng)表空間的數(shù)據(jù)文件恢復(fù)過程完成。

表空間損壞的恢復(fù)

當然數(shù)據(jù)庫恢復(fù)方法不僅一個,管理員也可以按照表空間恢復(fù)的方法進行恢復(fù)操作。還是上面的案例,如果發(fā)生了失敗,現(xiàn)在按照表空間損壞情況下的恢復(fù)方法進行恢復(fù)。

下面用備份來恢復(fù)表空間users中的全部數(shù)據(jù)文件:

第一步:將表空間脫機

SQL> alter tablespace users offline;

第二步:裝載表空間

RMAN>restore tablespace users;

第三步:恢復(fù)表空間

RMAN>recover tablespace users;

第四步:將表空間聯(lián)機

RMAN>sql “alter tablespace users online”;

第五步:查看數(shù)據(jù)文件的可用性

SQL>select name,enabled,status from v$datafile;

系統(tǒng)表空間的恢復(fù)

如果是還原表空間或者系統(tǒng)表空間損壞,則數(shù)據(jù)庫系統(tǒng)不能運行,數(shù)據(jù)庫一定不能處于打開狀態(tài),在RMAN環(huán)境下連接Oracle,注意,此時的連接并不是連接到已經(jīng)打開的數(shù)據(jù)庫,而是連接到處于裝載狀態(tài)下的數(shù)據(jù)庫:

第一步:連接RMAN

$rman target /

第二步:裝載表空間

RMAN>restore tablespace system;

第三步:恢復(fù)表空間

RMAN>recover tablespace system;

第四步:打開數(shù)據(jù)庫

SQL>alter database open;

數(shù)據(jù)庫的崩潰恢復(fù)

一種全數(shù)據(jù)庫恢復(fù)方法,用于數(shù)據(jù)庫徹底崩潰,不可以進行數(shù)據(jù)庫局部恢復(fù)操作的情況。這種方法很簡單---裝載回數(shù)據(jù)庫的一個完整備份集進行恢復(fù)操作。雖然方法是簡單的,但代價是龐大的----時間可能會很長! 首先需要啟動數(shù)據(jù)庫實例。在控制文件完好的情況下,啟動到mount狀態(tài)是沒有問題的,如果控制文件損壞,則只能啟動到nomount狀態(tài)。在本例中,數(shù)據(jù)庫可以啟動到mount狀態(tài):

第一步:啟動實例

SQL>startup mount

第二步:進入到RMAN環(huán)境下:

$rman target /

第三步:裝載數(shù)據(jù)庫備份

RMAN>restore database;

第四步:執(zhí)行下面的命令進行數(shù)據(jù)庫的完全恢復(fù):

RMAN>recover database;

第五步:打開數(shù)據(jù)庫

RMAN>alter database open;

控制文件損壞的恢復(fù)

由于某種原因,例如介質(zhì)損壞導(dǎo)致所有控制文件都不可用時,管理員可以使用RMAN的控制文件自動備份,對控制文件進行恢復(fù)。

為了描述的方便,這里我們假設(shè)在一套歸檔方式運行的數(shù)據(jù)庫中,所有控制文件由于介質(zhì)損壞導(dǎo)致不可用。其他數(shù)據(jù)庫文件,包括數(shù)據(jù)文件、參數(shù)文件(SPFILE)、歸檔日志文件、聯(lián)機重做日志文件等均完好無損。 我們可以按照下面的步驟進行恢復(fù)。由于數(shù)據(jù)庫控制文件損壞,因此數(shù)據(jù)庫這時只能處于脫機狀態(tài)。

第一步:啟動數(shù)據(jù)庫到nomount狀態(tài):

SQL>startup nomount

第二步:在RMAN環(huán)境中,注冊數(shù)據(jù)庫ID(DBID)

$rman target /
rman>set DBID=1195474494

第三步:從數(shù)據(jù)庫備份集中裝載控制文件備份

RMAN>restore controlfile from autobackup

第四步:將數(shù)據(jù)庫開啟到mount狀態(tài):

RMAN>alter database mount

第五步:用RMAN備份恢復(fù)數(shù)據(jù)庫

RMAN>recover database;

第六步:將數(shù)據(jù)庫實例打開,但需要進行日志的重置(resetlogs):

RMAN>alter database open resetlogs;

由于數(shù)據(jù)庫以resetlogs方式打開,雖然本系統(tǒng)數(shù)據(jù)并未丟失,但由于所有日志文件已被重置,因此,需要進行完全數(shù)據(jù)庫備份。 如果控制文件損壞,且伴著其他數(shù)據(jù)文件等的損壞,則按照本節(jié)介紹的控制文件恢復(fù),加上數(shù)據(jù)庫的崩潰恢復(fù),可以實現(xiàn)數(shù)據(jù)庫的完全恢復(fù)(或不完全恢復(fù))。

日志文件損壞的恢復(fù)

由于數(shù)據(jù)庫日志可以采用多成員機制,這種方式保證在單個日志文件損壞下的系統(tǒng)連續(xù)運行。即便一個日志組的所有成員都已經(jīng)損壞,如果是當前日志組,則數(shù)據(jù)丟失、數(shù)據(jù)庫執(zhí)行不完全恢復(fù)是必然的選擇。如果不是當前日志組,可能根本無須修復(fù),直接將日志組刪除,再創(chuàng)建新的日志組就可以了。

第一步:進行數(shù)據(jù)庫的不完全恢復(fù)

SQL>recover database until cancel;

第二步:按照重置日志的方式打開數(shù)據(jù)庫

SQL>alter database open resetlogs;

數(shù)據(jù)庫得到不完全恢復(fù)。當然,上述過程也可以在RMAN中完成。

從指定備份集中恢復(fù)

RMAN> 
run{ 
set until scn=1645604; --執(zhí)行不完全恢復(fù)
restore database from tag='TAG20110702T231137'; --指定備份集的tag值,在list backup of database中可以查到
recover database;
sql 'alter database open resetlogs';
 }

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,謝謝大家對億速云的支持。

向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI