ora-19602根本原因是数据库处于noarchivelog模式且数据文件不一致,需先用archive log list确认归档状态,再停库执行shutdown immediate→startup mount→alter database archivelog→alter database open,确保文件头一致后方可备份。
根本原因不是rman出错,而是crontab启动的shell没有oracle环境变量、没权限、路径不对,或数据库压根没开归档。
crontab执行时ORA-01034: ORACLE not available
这是最典型的报错,说明rman连数据库实例都连不上。crontab默认用极简/bin/sh环境启动,不加载~/.bash_profile,所以ORACLE_HOME、ORACLE_SID、PATH全为空。
- 必须在脚本开头显式加载:用
source /home/oracle/.bash_profile(注意路径真实存在且可读) - 或者手动导出:
export ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1export ORACLE_SID=orclexport PATH=$ORACLE_HOME/bin:$PATH - 别信“我用oracle用户写的crontab就不用设”——照样失效
脚本能手动跑通,但crontab里静默失败
没报错≠没执行,很可能是命令找不到或权限被拒,日志里只留下空行或command not found。
-
rman必须用绝对路径调用,例如/u01/app/oracle/product/12.1.0/dbhome_1/bin/rman,不能只写rman - 脚本本身要加执行权限:
chmod +x /path/to/backup.sh - crontab条目里也必须用绝对路径,例如
30 23 * * * /home/oracle/scripts/full_backup.sh - 建议在脚本末尾加
echo "[$(date)] backup done" >> /var/log/rman-cron.log,确认是否真触发
backup database plus archivelog报ORA-19602
这个错误直接卡死所有热备逻辑,和crontab无关,是数据库状态硬限制。
Zynq‑7000 / Zynq UltraScale+ 硬件调试技能。适用于 Xilinx Zynq(Cortex‑A9/A53 + FPGA)Linux 环境,调试 I2C、I2S、UART、GPIO 等外设。包括设备树配置、内核驱动、用户空间调试工具、交叉编译和常见问题排查,支持 PetaLinux 开发。
- 先连库检查:
sqlplus / as sysdba→ 执行archive log list - 输出必须含
Database log mode Archive Mode;若为No Archive Mode,必须停库操作:shutdown immediate→startup mount→alter database archivelog→alter database open - 归档路径也要可用:
show parameter db_recovery_file_dest,确保目录存在且oracle用户有读写权限
delete noprompt obsolete不清理旧备份
磁盘爆满却删不掉老备份,问题常出在RMAN保留策略没生效。
- 默认策略是
REDUNDANCY 1,即只留1份——等于没设保留窗口 - 应显式配置:
CONFIGURE RETENTION POLICY TO RECOVERY WINDOW OF 7 DAYS; - 之后必须执行
CROSSCHECK BACKUP,否则RMAN不知道哪些备份文件物理上还存在 -
delete noprompt obsolete才真正按策略删,否则只是“标记为obsolete”,不落地
最容易被忽略的是归档模式和CROSSCHECK——前者不开,脚本连第一步都过不去;后者不跑,obsolete永远只是纸上谈兵。










