ora-01580错误源于rman的snapshot controlfile name配置错误,即该参数被设为目录路径而非带完整文件名的绝对路径(如/u01/app/oracle/dbs/snapcf_orcl.f),导致rman试图删除目录失败并报ora-27056“is a directory”。
ora-01580 不是备份命令本身写错了,而是 rman 在创建快照控制文件(snapshot controlfile)时卡在了路径配置上——它试图往一个目录里“写文件”,但你给的却是个目录路径,不是具体文件名。
CONFIGURE SNAPSHOT CONTROLFILE NAME 必须指定完整文件路径
RMAN 的 SNAPSHOT CONTROLFILE NAME 配置项要求值是一个**绝对路径+文件名**,例如 /u01/app/oracle/product/12.1.0/dbhome_1/dbs/snapcf_orcl.f。如果只配成目录(比如 /u01/app/oracle/product/12.1.0/dbhome_1/dbs),RMAN 就会报 ORA-01580: error creating control backup file ... ORA-27056: could not delete file Linux-x86_64 Error: 21: Is a directory —— 因为它想删旧快照再写新文件,结果发现目标是个目录,根本没法删。
- 用
RMAN> show SNAPSHOT CONTROLFILE NAME;查当前配置,确认是否以.f结尾 - 修改必须带完整文件名:
CONFIGURE SNAPSHOT CONTROLFILE NAME TO '/path/to/snapcf_<code>SID.f';,其中SID是你的实例名(如orcl、cdb1) - 路径所在目录必须真实存在,且 Oracle 用户对该目录有读写权限(常见坑:目录存在但属主是 root,或挂载点没权限)
ORA-01580 还可能因目标文件已存在且不可覆盖
当 RMAN 尝试复用已有快照文件时,若该文件被其他进程占用、权限设为只读,或文件系统满,也会触发 ORA-01580 并附带 ORA-27038: skgfrcre: file exists 或 ORA-27040: file create error。
- 检查目标路径下是否已有
snapcf_<code>SID.f 文件;若有,确认是否被oracle用户锁定(lsof | grep snapcf) - 确保该文件不是只读:
chmod 600 /path/to/snapcf_<code>SID.f(如果已存在) - 执行前手动清理旧快照(可选):
rm -f /path/to/snapcf_<code>SID.f,再运行备份
Windows 和 Linux 下路径写法差异要留意
虽然 Oracle 支持反斜杠,但 RMAN 内部处理更认正斜杠。混用容易导致路径解析失败,间接引发 ORA-01580。
- Linux:统一用正斜杠,如
/u01/app/oracle/dbs/snapcf_orcl.f - Windows:推荐也用正斜杠,避免转义问题;若用反斜杠,必须双写:
C:\app\oracle\dbs\snapcf_orcl.f - 别直接写
$ORACLE_HOME变量名——RMAN 不展开 shell 变量,必须用实际路径
最常被忽略的一点:SNAPSHOT CONTROLFILE NAME 是 RMAN 级别配置,不随数据库重启生效,但修改后立即生效;而它的写入动作发生在每次 backup 或 copy 命令开始前——所以哪怕你刚改完配置,如果目标路径权限不对或磁盘满了,照样报 ORA-01580。











