oracle-參數文件的備份與還原


oracle-參數文件的備份與還原

參數文件是實例啟動到nomount狀態的必要條件,規定了實例的行為特征,位置跟操作系統相關,一般unix類的系統在$ORACLE_HOME/dbs目錄下

windows%ORACLE_HOME%\database目錄下),啟動會按照以下順序尋找參數文件(SID表示實例名)

--1 spfileorcl.oraorcl是實例名,SID

--2 spfile.ora

--3 initSID.ora

其中spfileorcl.oraspfile.ora是二進制文件,稱為服務器參數文件(或者spfile)。InitSID.ora是文本文件。

YHQT@ orcl >show parameter spfile
NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
spfile				     string	 /u01/app/oracle/product/11.2.0
						 /db_1/dbs/spfileorcl.ora

判斷實例是通過哪一種參數文件啟動的,上面查詢結果顯示實例啟動所使用的spfile

1 參數文件損壞的后果

場景1spfileorcl.ora\spfile.ora\initorcl.ora 3個文件在實例啟動前已經損壞丟失了

3個參數文件都損壞,實例無法啟動到nomount狀態,共享內存結構(SGA)和后台進程無法啟動。啟動時看到錯誤提示LRM-00109

顯示找不到initorcl.ora文件,實際上3個文件都沒有找到(orcl為實例名)

[oracle@DSI ~]$ oerr ora 1078
01078, 00000, "failure in processing system parameters"
// *Cause:  Failure during processing of INIT.ORA parameters during
//        system startup.
// *Action:  Further diagnostic information should be in the error stack.

場景2:實例通過spfileorcl.oraspfile.ora啟動,但該參數文件在實例啟動后丟失或損壞

遇到這種情況,凡是涉及訪問參數文件(spfile)的命令就會失敗,實例不會有崩潰的危險,比如’alter system’修改參數文件,

show parameter或查詢v$parameter視圖參數文件中的參數都會遇到ORA-01565無法識別文件的錯誤

-SQL> alter system set fast_start_mttr_target=600;
-SQL> show parameter db_name
-SQL> select * from v$parameter where name=db_name’;
告警日志
ORA-01565:unable to open spfile /u01/app/oracle/product/11.2.0/db_1/dbs/spfileorcl.ora

2 備份

RMAN能夠以備份集的形式備份spfile(不包括pfile),手動備份和自動備份。當然也可以使用操作系統級別的復制命令(cp)備份參數文件,恢復時只要復制dbs目錄即可

-2.1 手動備份

RMAN> backup spfile; --只用來備份參數文件
Starting backup at 16-JUL-19
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=148 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 16-JUL-19
channel ORA_DISK_1: finished piece 1 at 16-JUL-19
piece handle=/u01/app/oracle/fra/ORCL/backupset/2019_07_16/o1_mf_nnsnf_TAG20190716T113012_gltk64cs_.bkp tag=TAG20190716T113012 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 16-JUL-19

這里使用了快速恢復區,在生成的備份集的文件名前半部分o1_mf_nnsnf_

-2.2 自動備份

在備份1號數據文件時或只要備份時包含了1號數據文件,RMAN就會將控制文件與參數文件備份至一個額外的備份集。

RMAN> backup datafile 1;

另外,若啟用了控制文件的自動備份功能,參數文件和控制文件會在合適時機自動備份

用操作系統命令復制一下參數文件永遠是一個簡單可行的方案。

3 恢復

恢復參數文件實際上就是還原參數文件,參數文件的修改沒有重做日志的支持,所以不存在恢復的操作

若在之前已經使用操作系統命令復制過參數文件,那么最簡單的方法是在復制回原來的地方

-3.1 實例啟動時發現損壞

如果有使用 os命令復制參數文件,此時將它復制回去就好

若有參數文件的備份集,還原步驟如下:

--1 使用RMAN啟動實例到nomount狀態
--2 執行restore spfile命令,根據備份類型的區別使用對應的語句‘from autobackup’或‘from 備份片路徑’,前者對應自動備份,后者對應手動備份
--3 重啟實例,恢復完成

注意:在sqlplus下沒有參數文件不能啟動到nomount狀態,但是在RMAN下可以。

RMAN> startup nomount;

命令輸出中的LRM-00109錯誤顯示RMAN也做了尋找參數文件失敗的嘗試。

RMAN具有內置的參數文件能夠在沒有參數文件的特殊情況下將實例啟動到nomount狀態。

RMAN>restore spfile from '/u01/app/oracle/fra/ORCL/backupset/2019_07_16/o1_mf_nnsnf_TAG20190716T113012_gltk64cs_.bkp';
SQL> startup force;
SQL> show parameter spfile

若之前是利用控制文件自動備份生成參數文件備份的,還原命令稍有不同,無須指定備份片的路徑,給出數據庫名和快速恢復區的路徑即可(前提是使用了快速恢復區)

YHQT@ orcl >show parameter db_recovery
NAME                     TYPE     VALUE
------------------------------------ ----------- ------------------------------
db_recovery_file_dest             string     /u01/app/oracle/fra
db_recovery_file_dest_size         big integer 4G
RMAN> restore spfile from autobackup db_name=orcl db_recovery_file_dest='/u01/app/oracle/fra';

若管理員沒有啟用快速恢復區,控制文件自動備份保存在默認的’$ORACLE_HOME/dba’目錄下,此時還原命令首先指定數據庫的DBID

RMAN> set dbid 1534031567;
RMAN> restore spfile from autobackup;

如果使用了rman catalog和快速恢復區,那么from子句和dbid都可以不用管,直接執行restore spfile就可

[oracle@DSI ~]$ rman target sys/***@orcl catalog rcowner/***@orcl
RMAN> run {
startup nomount;
restore spfile;
startup force;
}

-3.2 實例運行時損壞

如果發現問題時數據庫尚未關閉(實例處於運行中),則無序關閉實例而是應該直接執行RMAN命令的restore命令。不關閉實例的好處很多,

不但高可用性,並且不用通過rman啟動到nomount狀態, 不用設置dbid,只要記住如果實例是利用服務器參數文件(spfile不是pfile)啟動的,還需指定to子句將其還原到其他路徑才行

RMAN> restore spfile from autobackup;
--RMAN-06564: must use the to clause when the instance is started with spfile
RMAN> restore spfile to '/home/oracle/spfileorcl.ora' from autobackup;
$ mv /home/oracle/spfileorcl.ora $ORACLE_HOME/dbs ##最好不要直接restore到dbs路徑


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM