rman create script 必须连接恢复目录且目标库已注册才能持久化,否则仅存于控制文件中;脚本名禁用空格、点号等特殊字符,内容须为完整rman命令并以end结尾。
rman create script 为什么存不进恢复目录
因为没连上恢复目录,或者恢复目录没注册目标数据库。rman 脚本必须存在恢复目录(recovery catalog)里才能跨实例复用,create script 默认只在控制文件中临时存在,关掉 rman 就没了。
实操要点:
- 先用
CONNECT CATALOG连到恢复目录用户,比如CONNECT CATALOG rman_user/password@catdb - 再用
CONNECT TARGET连目标库,且该目标库必须已在恢复目录中注册(用REGISTER DATABASE) - 如果报错
RMAN-06433: cannot create script in recovery catalog,大概率是当前 RMAN session 根本没连 catalog - 验证是否连对:执行
SHOW ALL后看输出里有没有recovery catalog database字样
CREATE SCRIPT 语法里哪些参数容易写错
脚本名不能含空格、斜杠、点号,也不能是 RMAN 关键字;内容块里的命令必须是完整可执行的 RMAN 命令序列,不能掺 SQL 或 shell。
常见翻车点:
- 脚本名用了小数点:
CREATE SCRIPT full_backup.2024→ 错,改用full_backup_2024 - 脚本体里写了
sql 'alter system switch logfile'—— 没问题;但写了!ls -l /backup就会报RMAN-00571 - 忘了用
END结束脚本体,或END前多打了空行,导致解析失败 - 路径写死在脚本里(比如
FORMAT '/u01/backup/%U'),换环境就失效,建议用FORMAT DB_NAME+'_full_%U'动态拼
怎么查、改、删已存的 RMAN 脚本
所有操作都得在连着恢复目录的前提下做,否则只能看到控制文件里的临时脚本(且重启后消失)。
常用动作:
- 列出所有脚本:
LIST SCRIPT NAMES - 查看脚本内容:
PRINT SCRIPT "daily_archivelog_backup"(注意引号要英文双引号) - 替换已有脚本:
REPLACE SCRIPT "weekly_full" { ... },不是CREATE - 删除脚本:
DELETE SCRIPT "old_test_script",删之前不会二次确认,手滑就没了 - 如果脚本名记不清,用
SELECT * FROM RC_STORED_SCRIPT(在 catalog 数据库里查),但要注意权限
脚本执行时找不到或权限不足怎么办
EXECUTE SCRIPT 报 RMAN-06004: ORACLE error from recovery catalog database 或 RMAN-06171: not connected to target database 是最常遇到的两个坑。
检查顺序:
- 当前 RMAN session 是否同时连了
TARGET和CATALOG?缺一不可 - 目标库是否 open 状态?
EXECUTE SCRIPT在 mount 或 nomount 下多数命令会失败 - 恢复目录用户是否有
RECOVERY_CATALOG_OWNER角色?光有CONNECT不够 - 脚本里用了
ALLOCATE CHANNEL但没配CONFIGURE,可能触发RMAN-06183,建议统一用CONFIGURE CHANNEL DEVICE TYPE DISK FORMAT ...预设好
真正麻烦的是脚本里嵌了 SET UNTIL TIME 或 RESTORE POINT 这类依赖时间/SCN 的逻辑——它们在不同环境跑结果可能完全不同,得人工核对上下文。










