最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Oracle 19c中RMAN脚本怎样动态生成恢复路径参数?
时间:2026-07-15 19:56:56 编辑:袖梨 来源:一聚教程网
不能手写几十行SET NEWNAME,因易出错导致ORA-01152失败;必须从v$datafile动态生成语句,确保file#对齐、路径替换准确、tempfile单独处理,并全部操作置于同一RUN块内。
为什么不能手写几十行 SET NEWNAME
手动拼 set newname for datafile 极易出错:文件名含空格时单引号漏转义、路径里斜杠没处理、file# 对不上 v$datafile 查询结果、windows 路径反斜杠没写成双份('c:oradatasystem01.dbf')、甚至把 tempfile 漏掉。一旦某一行错,整个 restore 就卡在 ora-01152。
从 v$datafile 动态生成最稳
直接查源库视图生成语句,确保路径替换逻辑明确、file# 严格对齐:
SELECT 'set newname for datafile ' || file# || ' to ''' || REPLACE(name, '/old/oradata/', '/u01/oradata/newdb/') || ''';' FROM v$datafile ORDER BY file#;
- 替换前先确认源路径前缀(如
/old/oradata/)真实存在且唯一,避免误替子目录 - 临时文件必须单独处理:
SET NEWNAME FOR TEMPFILE 1 TO '/u01/oradata/newdb/temp01.dbf' - Windows 路径务必用双反斜杠或正斜杠:
'D:/oradata/system01.dbf'
RUN 块里必须包全:SET + RESTORE + SWITCH + RECOVER
SET NEWNAME 不跨 RUN 块生效。退出 RMAN 再重进,所有设置就丢了——RESTORE DATABASE 仍按控制文件旧路径写,SWITCH DATAFILE ALL 后 v$datafile.name 还是旧值,RECOVER DATABASE 必报 ORA-01152。
- 全部操作必须塞进同一个
run { ... } -
SWITCH DATAFILE ALL只切换显式SET NEWNAME过的文件,不会自动推导未声明的 - 别信“自动重定向”——RMAN 不做路径推理,只认你写的
file#绑定
异机恢复时归档路径不一致怎么办
SET ARCHIVELOG DESTINATION 是还原归档日志的临时落点,不影响数据库级归档配置;但 RECOVER DATABASE 默认去读源库 LOG_ARCHIVE_DEST_1 路径下的归档——目标机上通常不存在。
- 要么提前在目标机建好同路径目录:
mkdir -p /u01/app/oracle/archivelog - 要么改目标库参数匹配源路径:
ALTER SYSTEM SET log_archive_dest_1='LOCATION=/u01/app/oracle/archivelog' SCOPE=SPFILE,再重启 - 切勿尝试
SET ARCHIVELOG DEST——该命令根本不存在,RMAN 会直接报RMAN-00571
路径映射不是写完 SQL 就完事,得让物理目录、控制文件记录、数据库参数三者对齐,缺一不可。
相关文章
- 王者荣耀世界零氪玩家如何生存 07-28
- 快手极速版怎么绑定手机号 07-28
- 明日方舟和轻松小熊联动活动内容一览 07-28
- 逆战未来黎明之光 逆战未来黎明之光玩法机制与新手入门指南 07-28
- 植物大战僵尸融合版毁灭土豆地雷介绍 07-28
- 逆战未来飓风之龙 逆战未来飓风之龙武器获取方法详解 07-28