Oracle使用RMAN从Windows迁移数据到Linux
由于Windows与Linux同属于little endian平台,所以Windows平台RMAN数据库备份可以在Linux直接使用,但是Windows平台下的归档日志无法在Linux平台直接用于recover database,但是我们可以使用增量备份解决增量问题,然后最后在源库停机下做最后备份,减少源库停机时间。
1. 基础数据备份恢复
1.1 源端Windows 做0级备份
# 下面仅给出示例,实际命令与并行度需要根据实际服务器负载以及磁盘能力配置。
RMAN> backup as compressed backupset incremental level 0 database format 'd:\rmanbak\full_level0_%d_%T_%s_%p' tag 'full_level_0';
RMAN> backup current controlfile format 'd:\rmanbak\ctl_level0_%d_%T_%s_%p' tag 'ctl_bak_1';
复制
1.2 Linux端恢复0级备份
# 恢复spfile与修改pfile中参数、上传备份集到Linux服务器等基础步骤略过,下面仅演示恢复过程 RMAN> startup nomount; RMAN> restore controlfile from '/rman/windowsLinux/CTL.BAK'; RMAN> alter database mount; # 清理控制文件记录的原来备份信息记录 RMAN> crosscheck backup; RMAN> delete noprompt expired backup; # 重新将备份片注册到控制文件记录中 RMAN> catalog start with '/rman/windowsLinux/'; # restore数据库0级备份 RMAN>run{ set newname for database to '/veridata/oradata/%U.dbf'; # 如果需要与源文件名保持一致,则可以为每个datafile单独set newname set newname for tempfile '+DATA/czh/tempfile/temp.264.1076500267' to '/veridata/oradata/temp.264.1076500267'; restore database; switch datafile all; switch tempfile all; }
复制
2. 增量数据恢复
2.1 源端Windows做1级备份
RMAN> backup as compressed backupset incremental level 1 database format 'd:\rmanbak\incr_level0_%d_%T_%s_%p' tag 'incr_level_1';
复制
2.2 Linux端恢复1级备份
# 增量恢复,只应用增量备份即可
RMAN> catalog start with '/rman/windowsLinux/';
RMAN> recover database;
复制
2.3 停机窗口Windows最后一次1级备份
停机窗口前,可以根据需要,每天,每隔几小时定时重复执行上述2.1、2.2步骤,可以大幅度减少最后一次增量备份以及恢复的时间,缩短停机时间。
# 由于Linux无法直接应用Windows平台下归档,所以需要在停机窗口干净关闭数据库,启动到mount状态
SQL> create table test as select * from dba_users; # 创建测试表,以便最后验证数据是否完全恢复
RMAN> shutdown immediate;
RMAN> startup mount;
RMAN> backup as compressed backupset incremental level 1 database format 'd:\rmanbak\incr_level0_%d_%T_%s_%p' tag 'incr_level_1';
# 需要在mount下重新备份最新的控制文件,以便最后保证最后恢复的数据文件头以及控制文件SCN保持一致。
RMAN> backup current controlfile format 'd:\rmanbak\ctl_level0_%d_%T_%s_%p' tag 'ctl_bak_final';
复制
2.4 Linux端恢复
# 直接恢复最后一次增量
RMAN> catalog start with '/rman/windowsLinux/';
RMAN> recover database;
# datafile应用完最后一次增量之后,重新恢复最新控制文件,保证数据文件与控制文件记录SCN保持一致。
# 这步是保证数据库能一致性打开的关键,如果不回复mount后备份的控制文件则无法打开数据库。
RMAN> shutdown immediate;
RMAN> startup nomount;
RMAN> startup nomount;
RMAN> restore controlfile from '/rman/windowsLinux/CTL_FINAL.BAK';
RMAN> alter database mount;
# 由于新恢复的源端控制文件,清理控制文件中记录的原先备份片信息
RMAN> crosscheck backup;
RMAN> delete noprompt expired backup;
# 由于控制文件新恢复,所以原先restore的数据文件路径需要重新catalog注册到控制文件,然后switch
RMAN> catalog start with '/oradata/orcl';
RMAN> switch database to copy;
# open read only,验证测试表
RMAN> alter database open read only;
SQL> desc test;
# 检查redo log位置,检查tempfile位置,如有需要,修正文件位置
SQL> select member from v$logfile;
SQL> select name from v$tempfile;
# 修正redo举例,tempfile可以直接添加新的tempfile然后drop旧的即可。
SQL> alter database rename file '/u01/app/oracle/product/11.2.0/dbhome_1/oradata/db2/group_2.log' TO '+DATA/db2/onlinelog/group_2.275.918765543';
# 验证无误,可以open打开数据库
SQL> alter database open resetlogs;
复制
2.5 恢复后收尾工作
- 对Linux数据库进行全量备份。
- 检查数据库db link、diretory等对环境有强依赖对象是否无效,如有必要,进行重建修正。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
/oradata/orcl是什么路径?
3年前

1
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
796次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
665次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
597次阅读
2025-04-20 10:07:02
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
550次阅读
2025-04-22 00:13:51
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
535次阅读
2025-04-17 17:02:24
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
510次阅读
2025-04-22 00:20:37
一页概览:Oracle GoldenGate
甲骨文云技术
502次阅读
2025-04-30 12:17:56
火焰图--分析复杂SQL执行计划的利器
听见风的声音
472次阅读
2025-04-17 09:30:30
OR+DBLINK的关联SQL优化思路
布衣
384次阅读
2025-05-05 19:28:36
3月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
383次阅读
2025-04-15 14:48:05