FORMAT参数必须显式指定路径,RMAN不自动创建目录且不检查路径存在性;%U保证备份片唯一,%F基于DBID全局唯一;%d截取库名前8字符,%T为YYYYMMDD格式;推荐组合%d_%T_%s或%d_%u命名。
FORMAT参数必须显式指定,否则RMAN用默认路径和%U生成文件
rman不会自动创建备份目录,也不检查目标路径是否存在。如果format里写的路径(比如/backup/rman/)不存在,backup database会直接报错:rman-03009: failure of backup command on ora_disk_1 channel,末尾常跟ora-19504: failed to create file。这不是权限问题,是路径根本没建。
必须手动mkdir -p /backup/rman,再在CONFIGURE CHANNEL或BACKUP命令里用FORMAT明确指定全路径:
-
configure channel device type disk format '/backup/rman/%d_%u_%t'(持久化配置,后续所有disk备份都走这个规则) -
backup database format '/backup/rman/full_%d_%T_%s'(单次覆盖,不改变全局配置)
%U和%F是唯一名字的“安全选项”,但别混用
%U展开为%u_%p_%c,保证同一备份集中每个备份片绝对不重名,适合多通道并行备份;%F基于DBID+日期+序列,天生全局唯一,常用于控制文件自动备份(configure controlfile autobackup format)。两者都可靠,但语义不同:
- 用
%U时,%p从1开始编号,%c默认是1;若配了backup copies 2,%c会变成2,文件名就带_2 - 用
%F时,格式固定为c-1234567890-20260411-01,和备份类型、通道数无关,但要求数据库DBID不变(跨库恢复时注意) - 别把
%U和%F塞进同一个FORMAT字符串,RMAN不报错但逻辑混乱,比如'%F_%U'实际只展开%F,后面%U被忽略
数据库名%d和时间%T要小心大小写和长度截断
%d取v$database.name值,全大写、最长8字符,且不含特殊符号;%T是YYYYMMDD格式,固定8位数字。常见踩坑点:
- 数据库名是
PRODDB12C,%d只截取前8位变成PRODDB12,和真实名对不上,恢复时可能误判 - 想用
%Y或%y取年份?RMAN不支持,会原样输出字符串%Y,导致文件名里出现非法字符 -
%n也是取库名,但右补空格到8字符,%d不补——两者在脚本解析时行为不同,别凭感觉替换
备份集号%s和时间戳%t不能单独用作文件主名
%s是备份集序号,每次backup命令递增1;%t是RMAN内部时间戳(十进制整数,如1234567890),不是可读日期。它们的问题在于:
- 仅用
%s会导致每天多个备份覆盖同一文件,因为序号不重置 -
%t数值极大且无规律,人工无法关联到具体时间,排查时得靠list backup查completion_time - 真正可读又唯一的是组合:比如
%d_%T_%s(库名+日期+序号)或%d_%u(库名+时间哈希),前者适合归档管理,后者适合快速定位
%F依赖DBID、%U依赖通道数,改配置后一定要list backup确认实际生成的文件名是否符合预期。











