暂无图片
暂无图片
1
暂无图片
暂无图片
2
暂无图片

Oracle使用RMAN从Windows迁移数据到Linux

原创 你好我是李白 2021-11-11
1489

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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

tnan1986
暂无图片
3年前
评论
暂无图片 0
/oradata/orcl是什么路径?
3年前
暂无图片 点赞
1
你好我是李白
暂无图片
3年前
回复
暂无图片 0
是啊,最开始恢复的datafile存储的路径,重新catalog
3年前
暂无图片 点赞
回复