共計 2796 個字符,預計需要花費 7 分鐘才能閱讀完成。
這期內容當中丸趣 TV 小編將會給大家帶來有關 Oracle 數據庫不同損壞級別的恢復是怎樣的,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
在 DBA 的日常工作中不可避免存在著數據庫的損壞,丸趣 TV 小編將主要介紹 Oracle 數據庫遇到不同損壞級別下的應該采用的恢復方法,供讀者在遇到此類情景時,能的找到適合自己的恢復方法,提高工作效率。
數據塊損壞的恢復
當數據文件中僅有少量的數據塊發生了介質損壞時,我們可以利用 RMAN 對其進行數據塊一級的恢復。數據塊級的局部恢復可以大大縮短恢復時間,甚至縮短到其他恢復方式的千分之幾。此外,在數據塊存在損壞而進行的恢復中,系統可以處于運行狀態,這個數據文件也可以處于聯機應用狀態,無須將其設置為脫機,保持應用運行狀態。
1) 連接 RMAN 環境,并以 SYSDBA(SYSOPER) 身份連接數據庫:
$rman target /
2) 執行下面的數據塊修復命令進行數據塊的修復:
rman blockrecover datafile 3 block 2,150,152;
現在數據塊得以恢復,系統繼續運行。
數據文件損壞的恢復
第一步:設置損壞的數據文件脫機
SQL alter database datafile 4 offline;
第二步:由 RMAN 裝載數據文件
RMAN restore datafile 4;
第三步:對損壞的數據文件進行恢復
RMAN recover datafile 4;
第四步:設置已恢復數據文件聯機
RMAN sql“alter database datafile 4 online”;
第五步:查看數據文件的可用性
SQL select name,enabled,status from v$datafile;
至此,一個非系統表空間的數據文件恢復過程完成。
表空間損壞的恢復
當然數據庫恢復方法不僅一個,管理員也可以按照表空間恢復的方法進行恢復操作。還是上面的案例,如果發生了失敗,現在按照表空間損壞情況下的恢復方法進行恢復。
下面用備份來恢復表空間 users 中的全部數據文件:
第一步:將表空間脫機
SQL alter tablespace users offline;
第二步:裝載表空間
RMAN restore tablespace users;
第三步:恢復表空間
RMAN recover tablespace users;
第四步:將表空間聯機
RMAN sql“alter tablespace users online”;
第五步:查看數據文件的可用性
SQL select name,enabled,status from v$datafile
系統表空間的恢復
如果是還原表空間或者系統表空間損壞,則數據庫系統不能運行,數據庫一定不能處于打開狀態,在 RMAN 環境下連接 Oracle,注意,此時的連接并不是連接到已經打開的數據庫,而是連接到處于裝載狀態下的數據庫:
第一步:連接 RMAN
$rman target /
第二步:裝載表空間
RMAN restore tablespace system;
第三步:恢復表空間
RMAN recover tablespace system;
第四步:打開數據庫
SQL alter database open;
數據庫的崩潰恢復
一種全數據庫恢復方法,用于數據庫徹底崩潰,不可以進行數據庫局部恢復操作的情況。這種方法很簡單 — 裝載回數據庫的一個完整備份集進行恢復操作。雖然方法是簡單的,但代價是龐大的 —- 時間可能會很長! 首先需要啟動數據庫實例。在控制文件完好的情況下,啟動到 mount 狀態是沒有問題的,如果控制文件損壞,則只能啟動到 nomount 狀態。在本例中,數據庫可以啟動到 mount 狀態:
第一步:啟動實例
SQL startup mount
第二步:進入到 RMAN 環境下:
$rman target /
第三步:裝載數據庫備份
RMAN restore database;
第四步:執行下面的命令進行數據庫的完全恢復:
RMAN recover database;
第五步:打開數據庫
RMAN alter database open;
控制文件損壞的恢復
由于某種原因,例如介質損壞導致所有控制文件都不可用時,管理員可以使用 RMAN 的控制文件自動備份,對控制文件進行恢復。
為了描述的方便,這里我們假設在一套歸檔方式運行的數據庫中,所有控制文件由于介質損壞導致不可用。其他數據庫文件,包括數據文件、參數文件 (SPFILE)、歸檔日志文件、聯機重做日志文件等均完好無損。我們可以按照下面的步驟進行恢復。由于數據庫控制文件損壞,因此數據庫這時只能處于脫機狀態。
第一步:啟動數據庫到 nomount 狀態:
SQL startup nomount
第二步:在 RMAN 環境中,注冊數據庫 ID(DBID)
$rman target /rman set DBID=1195474494
第三步:從數據庫備份集中裝載控制文件備份
RMAN restore controlfile from autobackup
第四步:將數據庫開啟到 mount 狀態:
RMAN alter database mount
第五步:用 RMAN 備份恢復數據庫
RMAN recover database;
第六步:將數據庫實例打開,但需要進行日志的重置 (resetlogs):
RMAN alter database open resetlogs;
由于數據庫以 resetlogs 方式打開,雖然本系統數據并未丟失,但由于所有日志文件已被重置,因此,需要進行完全數據庫備份。如果控制文件損壞,且伴著其他數據文件等的損壞,則按照本節介紹的控制文件恢復,加上數據庫的崩潰恢復,可以實現數據庫的完全恢復 (或不完全恢復)。
日志文件損壞的恢復
由于數據庫日志可以采用多成員機制,這種方式保證在單個日志文件損壞下的系統連續運行。即便一個日志組的所有成員都已經損壞,如果是當前日志組,則數據丟失、數據庫執行不完全恢復是必然的選擇。如果不是當前日志組,可能根本無須修復,直接將日志組刪除,再創建新的日志組就可以了。
第一步:進行數據庫的不完全恢復
SQL recover database until cancel;
第二步:按照重置日志的方式打開數據庫
SQL alter database open resetlogs;
數據庫得到不完全恢復。當然,上述過程也可以在 RMAN 中完成。
從指定備份集中恢復
RMAN
run{
set until scn=1645604; – 執行不完全恢復
restore database from tag= TAG20110702T231137 – 指定備份集的 tag 值,在 list backup of database 中可以查到
recover database;
sql alter database open resetlogs
}
上述就是丸趣 TV 小編為大家分享的 Oracle 數據庫不同損壞級別的恢復是怎樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注丸趣 TV 行業資訊頻道。