我正计划将这个古老但至关重要的 Oracle 数据库从一个 Windows Server 2003 集群迁移到另一个集群。
数据库有许多数据文件,它们都在目标集群上获取新路径。唯一保持不变的路径是备份文件。
我的迁移计划如下:
使用我们的夜间 RMAN 备份脚本备份源集群上的数据库:
run { allocate channel Channel1 type disk format 'F:\backup\folder\%d_%T_%s_%U.bak'; allocate channel Channel2 ... backup check logical ( database ); backup check logical ( archivelog all not backed up 2 times ); backup check logical ( current controlfile ); } allocate channel for maintenance device type disk; delete archivelog until time 'sysdate - 2' backed up 2 times to disk; delete obsolete device type disk;
我们在两个集群上的 RMAN 保留策略都设置为
redundancy 2
,并且控制文件被用作恢复目录。将备份文件复制到
F:\backup\folder
目标集群上。使用此 RMAN 脚本恢复目标集群上的数据库:
run { allocate channel Channel1 type disk; allocate channel Channel2 ... set until sequence <sequence number> thread 1; SET NEWNAME FOR DATAFILE 'Old\Path\FILE01.DBF' TO 'New\Path\FILE01.DBF'; SET NEWNAME FOR DATAFILE ... restore database; }
更新控制文件中的数据文件路径,将数据库恢复到合适的顺序,用
resetlogs
.
这很好用,但有以下例外:
当我要求 RMAN 删除目标集群上的过时文件时,它会将所有刚刚恢复的数据文件命名为过时的!
RMAN> delete obsolete device type disk;
...
Deleting the following obsolete backups and copies:
Type Key Completion Time Filename/Handle
-------------------- ------ ------------------ --------------------
Datafile Copy 1 02-JUL-12 New\Path\FILE01.DBF
...
好吧,RMAN 将这些数据文件识别为副本是正确的。
但是,由于这是数据库迁移,这些副本旨在成为新的原件,所以我当然不希望 RMAN 在维护过程中删除它们!
是否可以调整此迁移过程,以便 RMAN 将恢复的数据库视为新的原始数据库?
发出switch 到 copy,然后进行交叉检查。