關於 RMAN 控制文件自動備份路徑中指定的 %F 說明


默認情況下,RMAN備份的屬性配置一共 14 行( show all; )來自博客園AskScuti

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '%F'; # default

其中第 5 行,很多初學者容易引起誤解,把 %F 與其它特定參數搞混,最后導致備份時總是報錯。

ORA-19715: invalid format c for generated name

ORA-27302: failure occurred at: slgpn

目錄

1. 錯誤的示范例子

  1.1 錯誤示范-備份數據文件

  1.2 錯誤示范-路徑參數設置

2. %F 的含義說明

  2.1 %F 含義

  2.2 備份數據文件報錯原因說明

  2.3 路徑參數設置報錯原因說明

3. %F 的使用規則

 

1. 錯誤的示范例子

我們打開控制文件自動備份,其它配置保持默認

CONFIGURE CONTROLFILE AUTOBACKUP ON;

查看當前 RMAN 配置信息

RMAN> show all;

RMAN configuration parameters for database with db_unique_name SCERP are:
CONFIGURE RETENTION POLICY TO REDUNDANCY 1; # default
CONFIGURE BACKUP OPTIMIZATION OFF; # default
CONFIGURE DEFAULT DEVICE TYPE TO DISK; # default 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
CONFIGURE DATAFILE BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE ARCHIVELOG BACKUP COPIES FOR DEVICE TYPE DISK TO 1; # default
CONFIGURE MAXSETSIZE TO UNLIMITED; # default
CONFIGURE ENCRYPTION FOR DATABASE OFF; # default
CONFIGURE ENCRYPTION ALGORITHM 'AES128'; # default
CONFIGURE COMPRESSION ALGORITHM 'BASIC' AS OF RELEASE 'DEFAULT' OPTIMIZE FOR LOAD TRUE ; # default
CONFIGURE ARCHIVELOG DELETION POLICY TO NONE; # default
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/u01/app/oracle/product/11.2.0/dbs/snapcf_SCERP.f'; # default

這里有一個細節請注意:哪怕控制文件自動備份設置為 OFF,一旦備份全庫(因為含了 SYSTEM)或者單獨備份 SYSTEM 表空間數據文件時,也會自動備份控制文件。這個證明實驗不再贅述。

查看當前表空間及數據文件,找一個小一些的數據文件,節省時間。

RMAN> report schema;

Report of database schema for database with db_unique_name SCERP

List of Permanent Datafiles
===========================
File Size(MB) Tablespace  RB segs Datafile Name
---- -------- ----------- ------- ------------------------------
1    750      SYSTEM      ***     +ASMSYSTEM/scerp/system01.dbf
2    520      SYSAUX      ***     +ASMSYSTEM/scerp/sysaux01.dbf
3    90       UNDOTBS1    ***     +ASMSYSTEM/scerp/undotbs01.dbf
4    5        USERS       ***     +ASMSYSTEM/scerp/users01.dbf
5    313      EXAMPLE     ***     +ASMSYSTEM/scerp/example01.dbf

List of Temporary Files
=======================
File Size(MB) Tablespace  Maxsize(MB) Tempfile Name
---- -------- ----------- ----------- ---------------------------
1    29       TEMP        32767       +ASMSYSTEM/scerp/temp01.dbf

1.1 錯誤示范-備份數據文件

RMAN> backup datafile 4 format '/u01/app/oracle/backup/data04_%F';

Starting backup at 2019-06-06 10:24:18
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00004 name=+ASMSYSTEM/scerp/users01.dbf
channel ORA_DISK_1: starting piece 1 at 2019-06-06 10:24:18
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of backup command on ORA_DISK_1 channel at 06/06/2019 10:24:18
ORA-19715: invalid format F for generated name
ORA-27302: failure occurred at: slgpn

這時,報出 ORA-19715 和 ORA-27302 的錯誤,為什么

1.2 錯誤示范-路徑參數設置

設置控制文件自動備份路徑(錯誤示范

RMAN> CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/backup/%d_%s_%F.CTL';

new RMAN configuration parameters:
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/backup/%d_%s_%F.CTL';
new RMAN configuration parameters are successfully stored

這個設置,感覺好像沒有問題啊,妥妥滴,是不是?我們來備份下。

RMAN> backup datafile 4 format '/u01/app/oracle/backup/data04';

Starting backup at 2019-06-06 10:43:50
using channel ORA_DISK_1
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00004 name=+ASMSYSTEM/scerp/users01.dbf
channel ORA_DISK_1: starting piece 1 at 2019-06-06 10:43:50
channel ORA_DISK_1: finished piece 1 at 2019-06-06 10:43:51
piece handle=/u01/app/oracle/backup/data04 tag=TAG20190606T104350 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:01
Finished backup at 2019-06-06 10:43:51

Starting Control File and SPFILE Autobackup at 2019-06-06 10:43:51
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03009: failure of Control File and SPFILE Autobackup command on ORA_DISK_1 channel at 06/06/2019 10:43:52
ORA-19715: invalid format s for generated name
ORA-27302: failure occurred at: slgpn

這里是一看就會,一做就廢欄目,給你一個可愛的笑臉😊,自己體會。報出 ORA-19715 和 ORA-27302 的錯誤,為什么?

 

2. %F 的含義說明

2.1 %F 含義

先解釋 %F 的含義,為了保證我說的具有權威可靠性,把官方 MOS(文檔 ID 760083.1) 里面的一句話貼出來:%F 不是備份數據文件或控制文件的有效格式。%F 僅僅用於控制文件自動備份格式。

%F is not a valid format specifier for a backup of datafiles or controlfiles. %F is used for the controlfile autobackup format only.

說的通俗些就是:%F 這個東西只能用在控制文件自動備份格式設置上的,它具有特殊性,不像其它參數可以用作備份文件的名稱。這也是為什么在 1.1 小節備份數據文件的時候報錯。

2.2 備份數據文件報錯原因說明

因為 1.1 小節備份語句為

backup datafile 4 format '/u01/app/oracle/backup/data04_%F'

也就是將 %F 作為了數據文件備份的名稱來使用了,所以報錯了。因為 %F 不能作為備份名稱來使用。而在 1.2 小節中 %F 並沒有作為備份名稱使用,但還是報錯了,因為設置控制文件自動備份路徑的參數,格式是有規定的(第3小節)。 

2.3 路徑參數設置報錯原因說明

既然 %F 不能作為備份文件的名稱來使用,那備份的時候就不設置了。那為什么還是報出錯誤?

因為 1.2 小節路徑設置語句為

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE DISK TO '/u01/app/oracle/backup/%d_%s_%F.CTL'

看似沒有問題,其實里面有個參數錯了,就是這個 %s ,因為它不是控制文件備份的有效格式,因此報錯。

 

3. %F 的使用規則

官方文檔 11g Release 2 (11.2) Database Backup and Recovery User's Guide :Configuring the RMAN Environment 小節中有對控制文件備份格式的描述

關於控制文件備份設置的有效格式,只能是:%D, %I, %M, %Y, %F, %T, %d, %n 這 8 種,且 %F 必須強制指定,否則出錯 RMAN-06492。其它格式參數不能出現在控制文件備份的格式中。

下面各版本中有對指定參數格式的說明

官方文檔 11g Release 2 (11.2) Database Backup and Recovery Reference :formatSpec

官方文檔 Release 12.2 Database Backup and Recovery Reference :4.12 formatSpec

官方文檔 Release 19 Backup and Recovery Reference :4.12 formatSpec

參數比較多,具體參考以上官方文檔,下面只列舉控制文件備份的有效格式參數:

%D:date 日

%I:DBID 

select dbid from v$database;

%M:month 月

%Y:year 年

%T:YYYYMMDD 年月日

%d:數據庫名稱

%n:用x填充數據庫名稱到8個字符,例如

piece handle=/u01/app/oracle/backup/SCERPxxx_c-4156218123-20190606-0a.ctl comment=NONE

%F 生成格式為:c-IIIIIIIIII-YYYYMMDD-QQ

IIIIIIIIII:為數據庫的DBID

YYYYMMDD:為備份生成的日期

QQ:是一個十六進制序列,從00開始,到FF

例如:控制文件自動備份生成的格式為

piece handle=/u01/app/oracle/product/11.2.0/dbs/c-4156218123-20190606-08 comment=NONE


免責聲明!

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



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