oracle使用rman从windows迁移数据到linux_好记忆不如烂笔头abc的博客-爱代码爱编程
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';
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等对环境有强依赖对象是否无效,如有必要,进行重建修正。
————————————————
版权声明:本文为CSDN博主「普通网友」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jwocnimabi/article/details/121271831