如何使用RMAN還原和恢復(fù)數(shù)據(jù)庫

這篇文章主要介紹“如何使用RMAN還原和恢復(fù)數(shù)據(jù)庫”,在日常操作中,相信很多人在如何使用RMAN還原和恢復(fù)數(shù)據(jù)庫問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”如何使用RMAN還原和恢復(fù)數(shù)據(jù)庫”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

成都創(chuàng)新互聯(lián)專注于網(wǎng)站建設(shè)|網(wǎng)頁維護(hù)|優(yōu)化|托管以及網(wǎng)絡(luò)推廣,積累了大量的網(wǎng)站設(shè)計(jì)與制作經(jīng)驗(yàn),為許多企業(yè)提供了網(wǎng)站定制設(shè)計(jì)服務(wù),案例作品覆蓋崗?fù)?/a>等行業(yè)。能根據(jù)企業(yè)所處的行業(yè)與銷售的產(chǎn)品,結(jié)合品牌形象的塑造,量身策劃品質(zhì)網(wǎng)站。

一、數(shù)據(jù)恢復(fù)顧問DRA的使用

數(shù)據(jù)恢復(fù)顧問(Data Recovery Advisor,DRA)是Oracle 11g中新增的一個(gè)診斷和修復(fù)數(shù)據(jù)庫問題的工具。共有兩種界面:RMAN可執(zhí)行程序界面和企業(yè)管理器Enterprise Manager界面。DRA能夠生成腳本來修復(fù)數(shù)據(jù)文件和(在某些環(huán)境下)控制文件受到的損壞。它不提供有關(guān)服務(wù)器參數(shù)文件和聯(lián)機(jī)日志文件問題的建議。DRA的決策依賴于自動(dòng)診斷知識(shí)庫(Automatic Diagnostic Repository,ADR)和健康檢查Health Monitor。

Health Monitor是一組檢查,檢查結(jié)果不存儲(chǔ)在數(shù)據(jù)庫,而存儲(chǔ)在文件系統(tǒng)中。其原因在于,一些錯(cuò)誤的性質(zhì)決定了數(shù)據(jù)庫不再可用,因此需要一個(gè)外部知識(shí)庫來存儲(chǔ)Health Monitor的結(jié)果。這個(gè)知識(shí)庫就是自動(dòng)診斷知識(shí)庫(ADR),位于diagnostic_dest實(shí)例參數(shù)指定的目錄中。

show parameter diagnostic_dest;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------

diagnostic_dest                      string      C:\ORACLE

可以看到其默認(rèn)是在Oracle安裝的基目錄中,有個(gè)diag子目錄就是存放ADR的位置。

健康檢查Health Monitor在數(shù)據(jù)庫不同的模式階段將運(yùn)行不同的檢查內(nèi)容:

在nomount模式下,只能檢查控制文件的完整性,因?yàn)閿?shù)據(jù)庫還沒有裝載;

在mount模式下,將檢查控制文件、聯(lián)機(jī)重做日志文件和數(shù)據(jù)文件頭部的完整性,也將檢查歸檔日志文件的完整性;

在open模式下,將可掃描每個(gè)數(shù)據(jù)文件塊是否受損,并檢查數(shù)據(jù)字典和撤銷段的完整性。

DRA的功能有一定的局限性。例如,只有當(dāng)實(shí)例處于nomount或更高模式時(shí),DRA才能奏效。如果初始化文件存在問題,它就起不到幫助作用。但一旦能進(jìn)入nomount模式,它就可以診斷控制文件的問題,并使用現(xiàn)有的有效副本(如果不存在,就嘗試從備份集中提取一個(gè)副本)生成用來還原的腳本。再一旦數(shù)據(jù)庫進(jìn)入mount模式,DRA就可以診斷有關(guān)數(shù)據(jù)文件缺失或受損的問題,以及聯(lián)機(jī)日志文件組丟失的問題,并生成修復(fù)腳本。DRA只能用于單實(shí)例數(shù)據(jù)庫的環(huán)境,不能用于RAC集群環(huán)境,也不能用于Data Guard備用數(shù)據(jù)庫。如果RAC數(shù)據(jù)庫故障,可以在單實(shí)例模式中加載,使用DRA修復(fù)損壞的內(nèi)容,然后關(guān)閉它并在RAC模式中重新打開。

數(shù)據(jù)恢復(fù)顧問DRA的使用非常簡單,RMAN環(huán)境下包括以下三個(gè)步驟:

1)使用list failure命令列出故障;

2)使用advise failure命令給出故障處理建議;

3)使用repair failure命令修復(fù)故障。

數(shù)據(jù)恢復(fù)顧問DRA使用健康檢查Health Monitor收集的信息查找問題并構(gòu)建RMAN腳本進(jìn)行修復(fù)。如果不首先要求DRA列出故障,則DRA不會(huì)生成建議。對(duì)于最后一次列出之后再發(fā)生的故障,DRA不提供任何建議。

以下通過一個(gè)例子,說明數(shù)據(jù)恢復(fù)顧問(DRA)的使用。

1)在操作系統(tǒng)提示符下進(jìn)入RMAN程序

C:\Users\Administrator>rman target /

恢復(fù)管理器: Release 11.2.0.4.0 - Production on 星期四 5月 3 10:33:33 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

已連接到目標(biāo)數(shù)據(jù)庫: MES (DBID=2056489697)

2)確認(rèn)已存在SYSAUX表空間的完整備份

RMAN> list backup of tablespace sysaux;

使用目標(biāo)數(shù)據(jù)庫控制文件替代恢復(fù)目錄

備份集列表

===================

BS 關(guān)鍵字  類型 LV 大小       設(shè)備類型 經(jīng)過時(shí)間 完成時(shí)間

------- ---- -- ---------- ----------- ------------ -------------------

241     Incr 0  312.86M    DISK        00:01:00     2018-05-03 10:31:49

        BP 關(guān)鍵字: 241   狀態(tài): AVAILABLE  已壓縮: YES  標(biāo)記: TAG20180503T103048

段名:E:\RMAN_BAK\MES\MES_85T1V56P_1_20180503

  備份集 241 中的數(shù)據(jù)文件列表

  文件 LV 類型 Ckp SCN    Ckp 時(shí)間            名稱

  ---- -- ---- ---------- ------------------- ----

  2    0  Incr 1640735    2018-05-03 10:30:49 D:\ORADATA\MES\SYSAUX01.DBF

如果沒有備份就創(chuàng)建一個(gè)

RMAN> backup as backupset tablespace sysaux;

3)關(guān)閉實(shí)例并退出

RMAN> shutdown immediate;

RMAN> exit;

4)利用操作系統(tǒng)程序刪除sysaux表空間的數(shù)據(jù)文件

5)使用SQL*Plus連接到數(shù)據(jù)庫,并嘗試啟動(dòng)

C:\Users\Administrator>sqlplus / as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on 星期四 5月 3 10:42:42 2018

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

已連接到空閑例程。

10:42:42 SYS @ mes AS SYSDBA>startup

ORACLE 例程已經(jīng)啟動(dòng)。

Total System Global Area 1286066176 bytes

Fixed Size                  2280896 bytes

Variable Size             771752512 bytes

Database Buffers          503316480 bytes

Redo Buffers                8716288 bytes

數(shù)據(jù)庫裝載完畢。

ORA-01157: 無法標(biāo)識(shí)/鎖定數(shù)據(jù)文件 2 - 請(qǐng)參閱 DBWR 跟蹤文件

ORA-01110: 數(shù)據(jù)文件 2: 'D:\ORADATA\MES\SYSAUX01.DBF'

啟動(dòng)時(shí)提示sysaux01.dbf文件缺失,并停留在mount加載模式。

6)再次啟動(dòng)RMAN并診斷問題

C:\Users\Administrator>rman target /

恢復(fù)管理器: Release 11.2.0.4.0 - Production on 星期四 5月 3 10:44:17 2018

Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.

已連接到目標(biāo)數(shù)據(jù)庫: MES (DBID=2056489697, 未打開)

RMAN> list failure;

使用目標(biāo)數(shù)據(jù)庫控制文件替代恢復(fù)目錄

數(shù)據(jù)庫故障列表

=========================

失敗 ID 優(yōu)先級(jí)狀態(tài)    檢測(cè)時(shí)間            概要

------- -------- --------- ------------------- -------

4932    HIGH     OPEN      2018-05-02 23:01:58 缺失一個(gè)或多個(gè)非系統(tǒng)數(shù)據(jù)文件

4908    HIGH     OPEN      2018-05-02 23:01:58 一個(gè)或多個(gè)非系統(tǒng)數(shù)據(jù)文件需要介質(zhì)恢復(fù)

返回一條消息,提示一個(gè)非系統(tǒng)數(shù)據(jù)文件的缺失。

7)生成有關(guān)故障的建議

RMAN> advise failure;

數(shù)據(jù)庫故障列表

=========================

失敗 ID 優(yōu)先級(jí)狀態(tài)    檢測(cè)時(shí)間            概要

------- -------- --------- ------------------- -------

4932    HIGH     OPEN      2018-05-02 23:01:58 缺失一個(gè)或多個(gè)非系統(tǒng)數(shù)據(jù)文件

4908    HIGH     OPEN      2018-05-02 23:01:58 一個(gè)或多個(gè)非系統(tǒng)數(shù)據(jù)文件需要介質(zhì)恢復(fù)

正在分析自動(dòng)修復(fù)選項(xiàng); 這可能需要一些時(shí)間

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: SID=221 設(shè)備類型=DISK

分析自動(dòng)修復(fù)選項(xiàng)完成

必需的手動(dòng)操作

========================

沒有可用的手動(dòng)操作

可選手動(dòng)操作

=======================

1. 如果無意中重命名或移動(dòng)了文件 D:\ORADATA\MES\SYSAUX01.DBF, 請(qǐng)還原該文件

2. 如果還原了錯(cuò)誤版本的數(shù)據(jù)文件 D:\ORADATA\MES\SYSAUX01.DBF, 請(qǐng)使用正確版本將其替換

自動(dòng)修復(fù)選項(xiàng)

========================

選項(xiàng)修復(fù)說明

------ ------------------

1      還原和恢復(fù)數(shù)據(jù)文件 2

  策略: 修復(fù)操作包括無數(shù)據(jù)丟失的完全介質(zhì)恢復(fù)

  修復(fù)腳本: C:\ORACLE\diag\rdbms\mes\mes\hm\reco_339425269.hm

8)打開修復(fù)腳本,研究其內(nèi)容,可以看到包括以下修復(fù)語句

restore datafile 2;

recover datafile 2;

sql 'alter database datafile 2 online';

10)要運(yùn)行腳本,可使用以下命令

RMAN> repair failure;

策略: 修復(fù)操作包括無數(shù)據(jù)丟失的完全介質(zhì)恢復(fù)

修復(fù)腳本: C:\ORACLE\diag\rdbms\mes\mes\hm\reco_339425269.hm

修復(fù)腳本的內(nèi)容:

   # restore and recover datafile

   restore datafile 2;

   recover datafile 2;

   sql 'alter database datafile 2 online';

是否確實(shí)要執(zhí)行以上修復(fù) (輸入 YES 或 NO)? y

執(zhí)行修復(fù)腳本

啟動(dòng) restore 于 2018-05-03 10:50:36

使用通道 ORA_DISK_1

通道 ORA_DISK_1: 正在開始還原數(shù)據(jù)文件備份集

通道 ORA_DISK_1: 正在指定從備份集還原的數(shù)據(jù)文件

通道 ORA_DISK_1: 將數(shù)據(jù)文件 00002 還原到 D:\ORADATA\MES\SYSAUX01.DBF

通道 ORA_DISK_1: 正在讀取備份片段 E:\RMAN_BAK\MES\MES_85T1V56P_1_20180503

通道 ORA_DISK_1: 段句柄 = E:\RMAN_BAK\MES\MES_85T1V56P_1_20180503 標(biāo)記 = TAG20180503T103048

通道 ORA_DISK_1: 已還原備份片段 1

通道 ORA_DISK_1: 還原完成, 用時(shí): 00:00:35

完成 restore 于 2018-05-03 10:51:12

啟動(dòng) recover 于 2018-05-03 10:51:12

使用通道 ORA_DISK_1

正在開始介質(zhì)的恢復(fù)

介質(zhì)恢復(fù)完成, 用時(shí): 00:00:01

完成 recover 于 2018-05-03 10:51:13

sql 語句: alter database datafile 2 online

修復(fù)故障已完成

是否要打開數(shù)據(jù)庫 (輸入 YES 或 NO)? y

數(shù)據(jù)庫已打開

以上看到,系統(tǒng)自動(dòng)定位最新的備份文件,經(jīng)過數(shù)據(jù)還原和介質(zhì)恢復(fù),完成后提示打開數(shù)據(jù)庫。

二、數(shù)據(jù)文件丟失后的完整恢復(fù)

在Oracle數(shù)據(jù)庫中,有些文件是關(guān)鍵的(critical),關(guān)鍵文件受損意味著數(shù)據(jù)庫實(shí)例將終止,在損壞被修復(fù)之前不能重新打開。有些文件是非關(guān)鍵的(noncritical),如果這些文件受損,數(shù)據(jù)庫仍能保持打開或可以被打開。

構(gòu)成SYSTEM表空間和當(dāng)前活動(dòng)的撤銷表空間(由undo_tablespace參數(shù)指定)的數(shù)據(jù)文件被認(rèn)為是關(guān)鍵的,控制文件的任何副本也都是關(guān)鍵的,這類文件受損將導(dǎo)致實(shí)例終止運(yùn)行。構(gòu)成用戶數(shù)據(jù)表空間的文件則是非關(guān)鍵的,這些文件受損通常不會(huì)導(dǎo)致實(shí)例崩潰。使受損的文件脫機(jī),使其內(nèi)容不可訪問,可使數(shù)據(jù)庫的其余部分仍可保持打開。

通常,任意數(shù)目的數(shù)據(jù)文件的損壞都可用完整恢復(fù)來修復(fù),不會(huì)有數(shù)據(jù)丟失。還原受損的文件,再應(yīng)用重做使它們保持最新。當(dāng)然,前提條件是自數(shù)據(jù)文件上一次備份后生成的所有歸檔日志文件可用。不完整恢復(fù)意味著還原數(shù)據(jù)庫并只應(yīng)用重做至某個(gè)特定點(diǎn),在該點(diǎn)之后所做的所有工作將丟失。為什么要不完整恢復(fù)?通常只有一個(gè)原因:用戶錯(cuò)誤。如果因?yàn)橛脩舨僮麇e(cuò)誤,則需要將整個(gè)數(shù)據(jù)庫返回到錯(cuò)誤發(fā)生之前。不完整恢復(fù)的第二種原因是嘗試了完整恢復(fù),但失敗了。這會(huì)在歸檔日志文件缺失或當(dāng)前聯(lián)機(jī)日志文件組的所有副本丟失的情況下發(fā)生。

1、非歸檔日志模式下的數(shù)據(jù)文件恢復(fù)

在非歸檔日志模式下,沒有什么支持恢復(fù)的技術(shù),因?yàn)榛謴?fù)所需的歸檔日志并不存在,因此只能進(jìn)行還原,但這樣也丟失了自備份創(chuàng)建之后所做的所有工作。

還原過程只能在加載模式下運(yùn)行

shutdown abort;

startup mount;

restore database;

recover database;

alter database open resetlogs;

2、歸檔日志模式下丟失非關(guān)鍵文件時(shí)的恢復(fù)

歸檔模式下,如果損壞的是非關(guān)鍵數(shù)據(jù)文件,則還原和恢復(fù)過程包括以下四步:

1)使受損的數(shù)據(jù)文件脫機(jī)(可能系統(tǒng)已自動(dòng)完整),如果還沒有脫機(jī),則可執(zhí)行以下命令,如指定10#文件脫機(jī)

RMAN> sql'alter database datafile 10 offline';

受損文件脫機(jī)后,數(shù)據(jù)庫應(yīng)該已經(jīng)可以打開。

2)還原數(shù)據(jù)文件

RMAN> restore datafile 10;

3)恢復(fù)數(shù)據(jù)文件

RMAN> recover datafile 10;

4)使數(shù)據(jù)文件聯(lián)機(jī)

RMAN> sql'alter database datafile 10 online';

以上命令中有的屬于SQL命令而非RMAN命令,因此在RMAN環(huán)境下執(zhí)行時(shí),需要添加sql前綴。

如果備份時(shí)使用的是增量備份策略,還原和恢復(fù)操作將首先利用級(jí)別0備份,然后應(yīng)用級(jí)別1備份,最后再應(yīng)用重做數(shù)據(jù)完成恢復(fù)。這一方法(使對(duì)重做的使用最小化)背后的邏輯是應(yīng)用增量備份總是比應(yīng)用重做要快。增量備份存在與否并不會(huì)導(dǎo)致使用recover命令時(shí)的語法差別,RMAN通過詢問其存儲(chǔ)庫,將計(jì)算出執(zhí)行操作的最好方法。

3、丟失關(guān)鍵數(shù)據(jù)文件時(shí)的恢復(fù)

如果數(shù)據(jù)庫因?yàn)殛P(guān)鍵數(shù)據(jù)文件損壞而崩潰,那么第一行動(dòng)就是試著啟動(dòng)它。這將在加載模式下停止,同時(shí)將錯(cuò)誤消息寫入警報(bào)日志。要進(jìn)行恢復(fù),可以采取和非關(guān)鍵文件一樣的過程,只是還原和恢復(fù)只能在加載模式下進(jìn)行,因?yàn)閿?shù)據(jù)庫已不能打開。例如要還原3#文件,此時(shí)還原和恢復(fù)包括以下四步:

1)數(shù)據(jù)庫啟動(dòng)到加載模式

RMAN> startup mount;

2)還原數(shù)據(jù)文件

RMAN> restore datafile 3;

3)恢復(fù)數(shù)據(jù)文件

RMAN> recover datafile 3;

4)打開數(shù)據(jù)庫

RMAN> alter database open;

三、數(shù)據(jù)文件丟失后的不完整恢復(fù)

執(zhí)行不完整恢復(fù)只有兩個(gè)原因:完整恢復(fù)不可行或是故意要丟失數(shù)據(jù)。如果缺失歸檔日志或當(dāng)前聯(lián)機(jī)重做日志文件組的所有副本缺失,那么必須執(zhí)行不完整恢復(fù)。對(duì)于用戶錯(cuò)誤,可以還原整個(gè)數(shù)據(jù)庫并將它恢復(fù)至錯(cuò)誤發(fā)生前的點(diǎn),但也同時(shí)失去了自那之后所做的所有正確的工作。

不完整恢復(fù)的特例是控制文件的恢復(fù)。在理想情況下,所有恢復(fù)操作將使用當(dāng)前控制文件來引導(dǎo),但有時(shí)是不可能的,必須還原控制文件的備份。可能的原因有兩點(diǎn):1)當(dāng)前控制文件的所有副本已丟失,不能運(yùn)行create controlfile命令重新創(chuàng)建它們。

2)當(dāng)前控制文件已不能準(zhǔn)確描述想要還原的數(shù)據(jù)庫版本,如表空間和數(shù)據(jù)文件的結(jié)構(gòu)在最近一次備份后已發(fā)生了更改。這個(gè)時(shí)候還原數(shù)據(jù)文件的同時(shí)必須首先還原控制文件。

不完整恢復(fù)分為四個(gè)步驟:

1)加載數(shù)據(jù)庫

2)還原所有數(shù)據(jù)文件

3)恢復(fù)數(shù)據(jù)庫至某個(gè)點(diǎn)(以下會(huì)說明包括三種指定方式)

4)用重置日志打開數(shù)據(jù)庫

與完整恢復(fù)相比,不完整恢復(fù)有以下幾點(diǎn)不同:

1)開始時(shí),完整恢復(fù)可在數(shù)據(jù)庫打開時(shí)進(jìn)行,除非受損文件是關(guān)鍵的,而不完整恢復(fù)只能在加載模式下進(jìn)行。

2)還原時(shí),對(duì)于完整恢復(fù),只需還原受損的數(shù)據(jù)文件,而不完整恢復(fù)需要還原所有數(shù)據(jù)文件,必須還原到早于想恢復(fù)的點(diǎn)。

3)恢復(fù)時(shí),需要將歸檔日志和聯(lián)機(jī)日志的重做數(shù)據(jù)應(yīng)用到所需的點(diǎn),有幾個(gè)選項(xiàng)可用于指定想恢復(fù)到的點(diǎn)。

4)打開時(shí),需要用RESETLOGS打開數(shù)據(jù)庫,這將重新初始化聯(lián)機(jī)重做日志文件,創(chuàng)建數(shù)據(jù)庫的一個(gè)新化身。數(shù)據(jù)庫的化身是指帶有新的重做線程(日志序列號(hào)從1開始)的數(shù)據(jù)庫版本。備份和歸檔日志都是特定于一個(gè)化身的,由不同化身生成的備份和歸檔日志邏輯上是彼此分離的,不能互用。正因如此,當(dāng)使用RESETLOGS重置日志文件后,應(yīng)當(dāng)立即重新執(zhí)行一次完整的數(shù)據(jù)庫備份。

加載數(shù)據(jù)庫并還原所有數(shù)據(jù)文件(必要時(shí)還包括還原控制文件)后,對(duì)于不完整恢復(fù)操作有三種選項(xiàng):

1)UNTIL TIME

該選項(xiàng)將應(yīng)用重做前滾數(shù)據(jù)文件至一個(gè)特定時(shí)間,精度為秒。該選項(xiàng)通常用于糾正用戶錯(cuò)誤,如果用戶犯了不可逆的錯(cuò)誤,但知道犯錯(cuò)誤的時(shí)間,那么就可以基于時(shí)間恢復(fù)至錯(cuò)誤發(fā)生之前。

2、UNTIL SCN

如果已知錯(cuò)誤發(fā)生時(shí)的確切的系統(tǒng)改變號(hào)SCN,那么可使用該選項(xiàng)準(zhǔn)確的將恢復(fù)停在錯(cuò)誤發(fā)生之前,從而盡可能少的丟失數(shù)據(jù)。這需要使用如Log Miner這樣的高級(jí)工具或是使用閃回功能,確定提交事務(wù)時(shí)的SCN。

3、UNTIL SEQUENCE

如果歸檔日志文件或聯(lián)機(jī)日志文件組缺失,則使用該選項(xiàng),它會(huì)將恢復(fù)工作停止至指定的歸檔日志序列號(hào)。

默認(rèn)情況下,RMAN應(yīng)按最近的備份來還原,并應(yīng)用重做。但不完整恢復(fù)與此不同,必須從早于恢復(fù)點(diǎn)的備份進(jìn)行還原,再前滾到那個(gè)需要恢復(fù)到的時(shí)間點(diǎn)。要確保還原和恢復(fù)使用相同的UNTIL TIME,最佳辦法是在一個(gè)run塊中完成還原和恢復(fù)這兩個(gè)命令。

RMAN> run {

startup mount;

set until time = "to_date('2015-11-01 10:00:00', 'yyyy-mm-dd hh34:mi:ss')";

restore database;

recover database;

alter database open resetlogs;

}

命令set until time指定一個(gè)將應(yīng)用到所有后續(xù)命令的時(shí)間,最終數(shù)據(jù)庫將還原和恢復(fù)到該時(shí)間點(diǎn)的狀態(tài)上。當(dāng)然也可以單獨(dú)指定UNTIL值

RMAN> restore database until time 'sysdate -7';

RMAN> recover database until time '27-OCT-08';

這里如果沒有像前面run塊那樣指定時(shí)間格式,那么時(shí)間識(shí)別依賴于初始化參數(shù)NLS_DATE_FORMAT,如上命令假設(shè)NLS_DATE_FORMAT被設(shè)置為dd-MON-rr。

四、控制文件的自動(dòng)備份和恢復(fù)

數(shù)據(jù)庫嚴(yán)重依賴于控制文件,如果控制文件受損,數(shù)據(jù)庫將崩潰。RMAN的情況更糟,存放備份信息的RMAN存儲(chǔ)庫就存儲(chǔ)在控制文件中。因此,如果控制文件損壞,一方面數(shù)據(jù)庫將崩潰,而另一方面RMAN又不能恢復(fù)它,因?yàn)镽MAN所需要的信息不可用。這是個(gè)遞歸性的問題,解決這一問題的辦法是使用RMAN目錄數(shù)據(jù)庫或者啟用控制文件的自動(dòng)備份功能。

要啟用控制文件的自動(dòng)備份,在RMAN提示符下執(zhí)行以下命令

RMAN>CONFIGURE CONTROLFILE AUTOBACKUP ON;

該命令執(zhí)行后,每個(gè)RMAN操作都會(huì)把控制文件和spfile文件自動(dòng)備份到已知位置的備份集中。指定好自動(dòng)備份的路徑,未指定時(shí)默認(rèn)保存在閃回恢復(fù)區(qū),文件名基于DBID。數(shù)據(jù)庫的ID是一個(gè)10位數(shù)字。DBID在啟動(dòng)RMAN時(shí)可以看到,也可以通過查詢視圖v$database的字段DBID獲知。以下設(shè)定控制文件自動(dòng)備份的保存路徑

RMAN>CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO 'e:\rman_bak\mes\control_bak\%F';

若要還原控制文件,可在數(shù)據(jù)庫處于非加載模式下執(zhí)行以下命令

RMAN> restore controlfile from autobackup;

該命令從最近的自動(dòng)備份中提取控制文件,還原到spfile初始化參數(shù)文件指定的位置。之后便可用還原的控制文件加載數(shù)據(jù)庫,RMAN將可以定位所需的備份來還原數(shù)據(jù)庫的其余部分。由于非加載模式下控制文件尚未加載,RMAN不知道自動(dòng)備份控制文件的位置,故會(huì)從默認(rèn)位置還原控制文件(包含spfile),該位置對(duì)于Windows來說是%ORACLE_HOME%\database,對(duì)于Unix系統(tǒng)來說是$ORACLE_HOME\dbs。因此還原前應(yīng)當(dāng)首先把最近一次自動(dòng)備份的控制文件(包含spfile)復(fù)制到該路徑下。

如果spfile文件也丟失了,則可用啞初始化參數(shù)文件啟動(dòng)實(shí)例:只有一個(gè)參數(shù)db_name的pfile文件(如內(nèi)容只有一行db_name=mes)。然后用RMAN連接,發(fā)出以下命令替換為自己的DBID

RMAN> set dbid1979336967;

RMAN> restore spfile from autobackup;

該命令將spfile文件還原到系統(tǒng)默認(rèn)位置(Windows是%ORACLE_HOME%\database,Unix是$ORACLE_HOME\dbs)。之后再以非加載模式重啟實(shí)例,便可進(jìn)行控制文件的還原以及后續(xù)數(shù)據(jù)庫的還原。

數(shù)據(jù)庫的ID號(hào)一般可以從備份的控制文件名上獲得,如控制文件備份C-1979336967-20151116-00,1979336967即是DBID。在RMAN連接到目標(biāo)數(shù)據(jù)庫時(shí)也會(huì)提示DBID。視圖v$database中也包含了DBID字段的信息。

RMAN也只有這兩個(gè)關(guān)于spfile文件和控制文件的還原命令能在非加載模式下執(zhí)行,所有其他命令只能在加載模式或打開模式下執(zhí)行。

下列腳本用啞初始化參數(shù)文件dummy.ora開始實(shí)例的啟動(dòng),逐步完成數(shù)據(jù)庫的完整還原和恢復(fù)(假定所有數(shù)據(jù)文件、控制文件、spfile文件都已丟失)

run {

startup nomount pfile = C:\oracle\product\11.2.0\dbhome_1\database\dummy.ora;

set dbid = 1979336967;

restore spfile from autobackup;

shutdown abort;

startup nomount;

restore controlfile from autobackup;

alter database mount;

restore database;

recover database;

alter database open resetlogs;

}

如果之前沒有啟用控制文件的自動(dòng)備份,但有包含spfile和controlfile的備份集,則命令可以指定包含該內(nèi)容的備份

restore spfile from 'e:\rman_bak\mes\control_bak\C-2056489697-20180502-06';

五、不完整恢復(fù)實(shí)驗(yàn)

1、實(shí)驗(yàn)前備份的構(gòu)建

更改控制文件的備份配置,設(shè)為自動(dòng)備份,并指定備份的目標(biāo)路徑

RMAN> configurecontrolfileautobackupon;

RMAN> configurecontrolfileautobackupformatfordevicetypediskto 'e:\rman_bak\mes\control_bak\%F';

更改數(shù)據(jù)文件備份集的目標(biāo)位置和命名規(guī)則

RMAN> configurechanneldevicetypediskformat 'e:\rman_bak\mes\%d_%u_%c_%T';

執(zhí)行一次完整的數(shù)據(jù)庫增量級(jí)別1壓縮備份,并將之前(已不再需要)的歸檔日志文件刪除

RMAN> backup incremental level 1 as compressed backupset database plus archivelog delete all input;

2、清楚需要恢復(fù)的時(shí)間點(diǎn)

當(dāng)故障發(fā)生后,我們需要將系統(tǒng)恢復(fù)到故障發(fā)生之前的某一時(shí)刻,這個(gè)時(shí)間愈靠近故障發(fā)生時(shí)刻,就愈能保證恢復(fù)后不丟失用戶數(shù)據(jù),因此在實(shí)驗(yàn)前我們先明確一下當(dāng)前時(shí)間。

select sysdate from dual;

SYSDATE

-------------------

2018-05-03 12:09:34

3、故障模擬

假定現(xiàn)在由于用戶誤操作,不小心刪除了CMES表空間,導(dǎo)致重要數(shù)據(jù)丟失

drop tablespacecmes including contents and datafiles;

4、還原控制文件

由于表空間的刪除,數(shù)據(jù)庫的結(jié)構(gòu)發(fā)生了變化,該變化已被記入當(dāng)前的控制文件。因此如果要恢復(fù)到故障之前的狀態(tài),必須首先恢復(fù)未刪除表空間之前的控制文件,用原有的控制文件加載數(shù)據(jù)庫,之后再還原表空間和數(shù)據(jù)文件。

登錄RMAN,構(gòu)建一個(gè)run塊,設(shè)置還原時(shí)間點(diǎn),然后還原控制文件到一個(gè)指定的路徑

RMAN> run {

2> shutdown abort;

3> startup mount;

4> set until time = '2018-05-03 12:09:34';

5> restore controlfile to 'D:\control.ctl';

6> }

Oracle 實(shí)例已關(guān)閉

已連接到目標(biāo)數(shù)據(jù)庫 (未啟動(dòng))

Oracle 實(shí)例已啟動(dòng)

數(shù)據(jù)庫已裝載

系統(tǒng)全局區(qū)域總計(jì)    1286066176 字節(jié)

Fixed Size                     2280896 字節(jié)

Variable Size                771752512 字節(jié)

Database Buffers             503316480 字節(jié)

Redo Buffers                   8716288 字節(jié)

正在執(zhí)行命令: SET until clause

啟動(dòng) restore 于 2018-05-03 12:18:35

分配的通道: ORA_DISK_1

通道 ORA_DISK_1: SID=189 設(shè)備類型=DISK

通道 ORA_DISK_1: 正在開始還原數(shù)據(jù)文件備份集

通道 ORA_DISK_1: 正在還原控制文件

輸出文件名=D:\CONTROL.CTL

通道 ORA_DISK_1: 正在讀取備份片段 E:\RMAN_BAK\MES\CONTROL_BAK\C-2056489697-20180503-02

通道 ORA_DISK_1: 段句柄 = E:\RMAN_BAK\MES\CONTROL_BAK\C-2056489697-20180503-02 標(biāo)記 = TAG20180503T105757

通道 ORA_DISK_1: 已還原備份片段 1

通道 ORA_DISK_1: 還原完成, 用時(shí): 00:00:01

完成 restore 于 2018-05-03 12:18:37

5、用還原出來的控制文件重新加載數(shù)據(jù)庫

alter system set control_files = 'D:\control.ctl' scope = spfile;

shutdown abort

startup mount

6、按設(shè)定的時(shí)間點(diǎn)進(jìn)行數(shù)據(jù)庫的還原和恢復(fù)

在RMAN會(huì)話中構(gòu)建以下run塊,設(shè)置還原和恢復(fù)的時(shí)間點(diǎn),然后進(jìn)行數(shù)據(jù)庫的還原和恢復(fù),并打開數(shù)據(jù)庫

RMAN> run {

allocate channel c1 type disk;

allocate channel c2 type disk;

set until time = '2018-05-03 12:09:34';

restore database;

recover database;

alter database open resetlogs;

}

使用目標(biāo)數(shù)據(jù)庫控制文件替代恢復(fù)目錄

分配的通道: c1

通道 c1: SID=221 設(shè)備類型=DISK

分配的通道: c2

通道 c2: SID=3 設(shè)備類型=DISK

正在執(zhí)行命令: SET until clause

啟動(dòng) restore 于 2018-05-03 12:25:41

啟動(dòng) implicit crosscheck backup 于 2018-05-03 12:25:41

已交叉檢驗(yàn)的 5 對(duì)象

完成 implicit crosscheck backup 于 2018-05-03 12:25:41

啟動(dòng) implicit crosscheck copy 于 2018-05-03 12:25:41

完成 implicit crosscheck copy 于 2018-05-03 12:25:42

搜索恢復(fù)區(qū)中的所有文件

正在編制文件目錄...

沒有為文件編制目錄

通道 c1: 正在開始還原數(shù)據(jù)文件備份集

通道 c1: 正在指定從備份集還原的數(shù)據(jù)文件

通道 c1: 將數(shù)據(jù)文件 00001 還原到 D:\ORADATA\MES\SYSTEM01.DBF

通道 c1: 將數(shù)據(jù)文件 00002 還原到 D:\ORADATA\MES\SYSAUX01.DBF

通道 c1: 將數(shù)據(jù)文件 00003 還原到 D:\ORADATA\MES\UNDOTBS01.DBF

通道 c1: 將數(shù)據(jù)文件 00004 還原到 D:\ORADATA\MES\USERS01.DBF

通道 c1: 將數(shù)據(jù)文件 00005 還原到 D:\ORADATA\MES\EXAMPLE01.DBF

通道 c1: 正在讀取備份片段 E:\RMAN_BAK\MES\MES_85T1V56P_1_20180503

通道 c2: 正在開始還原數(shù)據(jù)文件備份集

通道 c2: 正在指定從備份集還原的數(shù)據(jù)文件

通道 c2: 將數(shù)據(jù)文件 00006 還原到 D:\ORADATA\MES\CMES01.DBF

通道 c2: 將數(shù)據(jù)文件 00007 還原到 D:\ORADATA\MES\RMES01.DBF

通道 c2: 將數(shù)據(jù)文件 00008 還原到 D:\ORADATA\MES\HMES01.DBF

通道 c2: 將數(shù)據(jù)文件 00009 還原到 D:\ORADATA\MES\INDX01.DBF

通道 c2: 將數(shù)據(jù)文件 00010 還原到 D:\ORADATA\MES\FDA01.DBF

通道 c2: 正在讀取備份片段 E:\RMAN_BAK\MES\MES_86T1V58Q_1_20180503

通道 c2: 段句柄 = E:\RMAN_BAK\MES\MES_86T1V58Q_1_20180503 標(biāo)記 = TAG20180503T103048

通道 c2: 已還原備份片段 1

通道 c2: 還原完成, 用時(shí): 00:00:15

通道 c1: 段句柄 = E:\RMAN_BAK\MES\MES_85T1V56P_1_20180503 標(biāo)記 = TAG20180503T103048

通道 c1: 已還原備份片段 1

通道 c1: 還原完成, 用時(shí): 00:00:46

完成 restore 于 2018-05-03 12:26:30

啟動(dòng) recover 于 2018-05-03 12:26:30

正在開始介質(zhì)的恢復(fù)

線程 1 序列 7 的歸檔日志已作為文件 D:\ORADATA\MES\REDO01.LOG 存在于磁盤上

線程 1 序列 8 的歸檔日志已作為文件 D:\ORADATA\MES\REDO02.LOG 存在于磁盤上

歸檔日志文件名=D:\ORADATA\MES\REDO01.LOG 線程=1 序列=7

歸檔日志文件名=D:\ORADATA\MES\REDO02.LOG 線程=1 序列=8

介質(zhì)恢復(fù)完成, 用時(shí): 00:00:03

完成 recover 于 2018-05-03 12:26:36

數(shù)據(jù)庫已打開

釋放的通道: c1

釋放的通道: c2

7、恢復(fù)控制文件的復(fù)用狀態(tài)

數(shù)據(jù)庫打開后,查看當(dāng)前啟用的控制文件

show parameter control_files;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_files                        string      D:\CONTROL.CTL

修改控制文件參數(shù),回到原先的多路復(fù)用狀態(tài)

alter system set control_files='d:\oradata\mes\control01.ctl','e:\fast_recovery_area\mes\control02.ctl' scope=spfile;

關(guān)閉數(shù)據(jù)庫

shutdown immediate

將控制文件d:\control.ctl分別復(fù)制到d:\oradata\mes\control01.ctl和e:\fast_recovery_area\mes\control02.ctl中

重啟數(shù)據(jù)庫

startup

數(shù)據(jù)庫打開后再次確認(rèn)啟用的控制文件

show parameter control_files;

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

control_files                        string      D:\ORADATA\MES\CONTROL01.CTL,

                                                 E:\FAST_RECOVERY_AREA\MES\CONT

                                                 ROL02.CTL

由于恢復(fù)使用RESETLOGS重置了聯(lián)機(jī)日志文件(日志序列號(hào)重新從1開始),因此創(chuàng)建的是數(shù)據(jù)庫的一個(gè)新化身,之前的備份和歸檔日志已經(jīng)和當(dāng)前數(shù)據(jù)庫分離,因此可以在RMAN下將之前的備份和歸檔日志刪除,并盡快重新執(zhí)行一次完整的數(shù)據(jù)庫備份。

六、使用映像副本恢復(fù)

如果備份策略包括映像副本,那么另一種還原選擇實(shí)際就是根本不用還原。由于映像副本與原數(shù)據(jù)文件是完全相同的,因此如果磁盤上有,則可以立即使用它。需要做的就是告訴數(shù)據(jù)庫映像副本的位置,然后恢復(fù)副本。與從備份集中提取數(shù)據(jù)文件所引起的延遲相比,映像副本的恢復(fù)可節(jié)省大量時(shí)間。

可使用下列RMAN命令創(chuàng)建整個(gè)數(shù)據(jù)庫的映像副本

RMAN> backup as copy database;

如果沒有更改默認(rèn)的備份位置參數(shù),那么該命令將所有數(shù)據(jù)文件復(fù)制到閃回恢復(fù)區(qū)作為映像副本。要使用映像副本,首先使原數(shù)據(jù)文件脫機(jī)(可能已經(jīng)自動(dòng)發(fā)生),然后更新控制文件中數(shù)據(jù)文件的指向,再恢復(fù)副本文件。例如有如下創(chuàng)建的副本

RMAN> backup as copy datafile 5 format 'e:\rman_bak\mes\cmes01.dbf';

通過以下腳本可以使用它

RMAN> run {

sql'alter database datafile 5 offline';

set newname for datafile 5 to 'e:\rman_bak\mes\cmes01.dbf';

switch datafile 5;

recover datafile 5;

sql'alter database datafile 5 online';

}

如果已對(duì)整個(gè)數(shù)據(jù)庫創(chuàng)建了映像副本,則可用一條命令還原整個(gè)數(shù)據(jù)庫

RMAN> switch database to copy;

映像副本的另一種使用方法是通過增量備份來更新副本,以維護(hù)副本的較新狀態(tài)。這要求將數(shù)據(jù)庫的完整副本作為起點(diǎn),之后創(chuàng)建增量備份,將其應(yīng)用至副本中。以下開辟兩個(gè)通道并行備份,將副本更新到閃回恢復(fù)區(qū)中,文件名格式將是OMF的

RMAN> run {

allocate channel c1 type disk;

allocate channel c2 type disk;

backup incremental level 1 for recover of copy with tag 'inc_copy' database;

recover copy of database with tag 'inc_copy';

release channel c1;

release channel c2;

}

該命令首次運(yùn)行時(shí),RMAN嘗試增量級(jí)別1備份,但由于之前沒有級(jí)別0備份,因此執(zhí)行級(jí)別0備份。該語句生成一個(gè)映像副本。recover命令在首次執(zhí)行時(shí)將失敗,因?yàn)闆]有可用的副本和增量備份。腳本第二次運(yùn)行時(shí),第一個(gè)命令將執(zhí)行增量級(jí)別1備份,提取自上一次備份后所有的變更塊,第二個(gè)命令則把這個(gè)增量變更應(yīng)用到副本。以后每次運(yùn)行都延續(xù)該行為。這種基于增量更新副本的策略可以使恢復(fù)過程非???。

到此,關(guān)于“如何使用RMAN還原和恢復(fù)數(shù)據(jù)庫”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

名稱欄目:如何使用RMAN還原和恢復(fù)數(shù)據(jù)庫
轉(zhuǎn)載來于:http://bm7419.com/article0/isgeio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、定制網(wǎng)站小程序開發(fā)、網(wǎng)站改版品牌網(wǎng)站制作、App開發(fā)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名