默認情況下,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 的使用規則
關於控制文件備份設置的有效格式,只能是:%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