在RMAN用語中,ldquo;還原rdquo;與ldquo;恢復rdquo;具有不同的含義,還原(restore)是指訪問先前生成的備份集,從中得到一個或
在RMAN用語中,“還原”與“恢復”具有不同的含義,還原(restore)是指訪問先前生成的備份集,從中得到一個或多個對象,然后再磁盤上的某個位置還原這些對象。還原與恢復時分離的。恢復(recovery)是一個使數據庫與給定時間點相一致以保證能夠打開這個數據庫的實際操作。
如果丟失了所有的參數文件(spfile和pfile),而且開啟了控制文件自動備份(RMAN> CONFIGURE CONTROLFILE AUTOBACKUP ON;),我們可以從自動備份的控制文件+參數文件的備份集中恢復服務器的參數文件。不同的操作系統,自動備份的參數文件+控制文件保存的位置略有區別:
Windows:$Oracle_HOME%\database
Linux/Unix:$ORACLE_HOME/dbs
如果之前有自動備份控制文件+參數文件備份集,那么我們只需要簡單執行一條語句:restore spfile from autobackup; 語句就可以恢復參數文件。執行該語句時,Oracle會在默認位置中(或則在allocate channel命令定義的位置中)查找所需備份集,該備份集使用Oracle默認的命名規則(%F),該命名規則在FRA里面不適用(FRA有自己的命名規則)。
示例:模擬參數文件丟失(先在脫機狀態執行數據庫全備,然后移出所有$ORACLE_HOME/dbs下的spfile和pfile文件到臨時目錄下)
數據庫會啟動失?。?/p>
SQL> startup
ORA-01078: failure in processing system parameters
LRM-00109: could not open parameter file '/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initorcl.ora'
方法一,使用默認配置進行參數文件恢復
啟動RMAN進行參數文件的恢復:
[oracle@localhost ~] $ set oracle_sid=orcl
[oracle@localhost ~] $ rman target /
RMAN>set DBID = 1405321682
RMAN>startup nomount
RMAN>restore spfile from autobackup;
Starting restore at 2015-06-06 21:24:27
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=130 device type=DISK
channel ORA_DISK_1: looking for AUTOBACKUP on day: 20150606
channel ORA_DISK_1: looking for AUTOBACKUP on day: 20150605
channel ORA_DISK_1: looking for AUTOBACKUP on day: 20150604
channel ORA_DISK_1: looking for AUTOBACKUP on day: 20150603
channel ORA_DISK_1: looking for AUTOBACKUP on day: 20150602
channel ORA_DISK_1: looking for AUTOBACKUP on day: 20150601
channel ORA_DISK_1: looking for AUTOBACKUP on day: 20150531
channel ORA_DISK_1: no AUTOBACKUP in 7 days found
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of restore command at 06/06/2015 21:24:29
RMAN-06172: no AUTOBACKUP found or specified handle is not a valid copy or piece
錯誤分析
恢復報錯,提示未找到有效的備份集。分析原因:正常來說,剛才做的數據庫全備,并設置了configure autobackup on,應該是有參數文件備份的,但是為什么找不到了?默認配置恢復參數文件,Oracle會到$ORACLE_HOME/dbs下尋找指定名稱的備份集,從報錯信息來看,默認情況下它會在該目錄下尋找過去7天內創建的控制文件備份集(可以加上maxseq和maxdays來改變默認天數),如果沒找到就報錯。去$ORACLE_HOME/dbs目錄下查看,確實沒有任何備份集,從剛才的備份過程來看,Oracle將控制文件自動保存到FRA里面去了,而且使用的是FRA里面的默認命令規則:
Starting Control File and SPFILE Autobackup at 2015-06-06 21:22:36
piece handle=/home/oracle/app/flash_recovery_area/ORCL/autobackup/2015_06_06/o1_mf_s_881702383_bq5x0wq0_.bkp comment=NONE
Finished Control File and SPFILE Autobackup at 2015-06-06 21:22:37
released channel: c1
由于數據庫是啟動在nomount狀態,參數文件丟失,因此并沒有加載參數文件,Oracle也就無法定位FRA,因此Oracle不會去FRA中尋找(測試過將c-1405321682-20150606-01放在FRA中,仍然無法恢復),而是去$ORACLE_HOME/dbs下尋找(補充說明2)。手工恢復參數文件,查看RMAN的默認配置,是否有設置控制文件的默認存儲位置(注意了,nomount狀態下只能看到RMAN最原始的配置信息,見下面的補充說明1,看不到修改的配置信息,必須將數據庫啟動到mount狀態):
RMAN> show all;
RMAN configuration parameters for database with db_unique_name ORCL are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
。。
錯誤解決
備份目錄確實是使用的是默認的,為什么自動備份控制文件和參數文件的時候會將備份集保存到FRA中去?確實很奇怪,手工設置一下備份路徑:
RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F';
RMAN> show all;
RMAN configuration parameters for database with db_unique_name ORCL are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK;
CONFIGURE CONTROLFILE AUTOBACKUP ON;
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F';
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default
。。。
發現 CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; 后面的default沒有的,但是值還是不變,在執行一次備份:
RMAN> run
聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com