代码改变世界

关于 RMAN 控制文件自动备份路径中指定的 %F 说明

2019-06-06 17:17  askscuti  阅读(3245)  评论(0编辑  收藏  举报

默认情况下,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