rman迁移数据
先确认一下字符集:
SELECT * FROM nls_database_parameters WHERE parameter LIKE '%CHARACTERSET%';
- 准备工作
备份源数据库:确保源数据库有一个完整的RMAN备份,包括数据文件、控制文件和归档日志。
目标环境准备:
安装与源数据库相同版本的Oracle软件。
确保目标环境的目录结构已经准备好(例如,新的数据文件路径)。
注意:新环境可以dbca,然后把数据文件删除。
网络配置:确保源环境和目标环境之间的网络连接正常。
- 备份源数据库
在源数据库上执行RMAN备份
run {
allocate channel b1 device type disk;
crosscheck archivelog all;
delete noprompt expired archivelog all;
crosscheck backup;
delete noprompt expired backup;
backup current controlfile format '/home/oracle/bk/ctl_%T%U';
backup as compressed backupset database format '/home/oracle/bk/full_%T%U';
backup archivelog all delete all input format '/home/oracle/bk/arc_%T%U';
delete noprompt obsolete;
release channel b1;
}
-
将备份文件传输到目标环境
scp -r /path/to/backup user@target_host:/path/to/backup -
在目标环境上恢复数据库
将目标环境的数据文件删掉
5.恢复控制文件
rman target /
restore controlfile from '/home/oracle/ctl_ncdb_123451';
alter database mount;
6.将备份数据信息注册到控制文件(如果数据文件都在相同的路径中,可以用一个命令将
他们全部编目
catalog start with '/home/oracle/'
list backup;
7.启动到mount后
rman target /
run {
configure device type disk parallelism 8;
set newname for datafile 1 to '/u01/oradata/yajhk/system01.dbf';
set newname for datafile 2 to '/u01/oradata/yajhk/sysaux01.dbf';
set newname for datafile 3 to '/u01/oradata/yajhk/undotbs.dbf';
set newname for datafile 4 to '/u01/oradata/yajhk/users1.dbf';
set newname for datafile 5 to '/u01/oradata/yajhk/jaic_card_tbs01.dbf';
set newname for datafile 6 to '/u01/oradata/yajhk/system02.dbf';
restore database;
switch datafile all;
set newname for tempfile 1 to '/u01/oradata/yajhk/temp01.dbf';
switch tempfile all;
}
11g支持set newname for database to 可以方便的将全库数据文件进行自动重命名。
run {
set newname for database to '/home/oracle/app/oracle/oradata/ora/%U';
restore database;
switch datafile all;
}
注意:因为是热备,如果有业务在操作,会产生增量数据,导致resotre完后数据不一致,需要将差的一两个归档拷贝过来进行recover

cp +DATA/orcl/datafile/users.259.123456789 /u01/oradata/users01.dbf
将归档日志拷贝到目标环境/home/oracle/下
rman target /
catalog start with '/home/oracle/'
recover database;
但是这么recover会一直提示缺少下一个归档日志
因为没有备份归档,所以不应用日志:
recover database noredo;

方案1:恢复到更早的时间点
run {
set until scn 27477114940; #比报错snc小1
recover database;
}
方案2:跳过特点归档日志(谨慎操作)
run {
set archivelog destination to '/u01/archivelogs';
recover database until sequence 81476 thread 2;
alter database open resetlogs;
}
增量备份恢复:
BACKUP INCREMENTAL LEVEL 0 DATABASE format '/data/rman/%U' ;
做level1的时候,把rac 2服务停掉,把rac 1节点启动到mount状态,这样不会产生新的归档
run {
BACKUP INCREMENTAL LEVEL 1 DATABASE PLUS ARCHIVELOG format '/data/rman/%U' ;
backup current controlfile;
}
先将level 0的备份和归档拷贝过来,再把level 1的备份和归档以及控制文件拷贝过来。
RESTORE DATABASE;
RESTORE ARCHIVELOG ALL;
RECOVER DATABASE;
RMAN> recover database;
Starting recover at 26-MAR-25
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=6769 device type=DISK
starting media recovery
archived log for thread 1 with sequence 29 is already on disk as file /data/cp/o1_mf_1_29_my6tq9cg_.arc
archived log for thread 1 with sequence 30 is already on disk as file /data/cp/o1_mf_1_30_my6tqb85_.arc
archived log for thread 1 with sequence 31 is already on disk as file /data/cp/o1_mf_1_31_my6tqckc_.arc
archived log file name=/data/cp/o1_mf_1_29_my6tq9cg_.arc thread=1 sequence=29
archived log file name=/data/cp/o1_mf_1_30_my6tqb85_.arc thread=1 sequence=30
archived log file name=/data/cp/o1_mf_1_31_my6tqckc_.arc thread=1 sequence=31
unable to find archived log
archived log thread=1 sequence=32
RMAN-00571: ===========================================================
RMAN-00569: =============== ERROR MESSAGE STACK FOLLOWS ===============
RMAN-00571: ===========================================================
RMAN-03002: failure of recover command at 03/26/2025 10:51:32
RMAN-06054: media recovery requesting unknown archived log for thread 1 with sequence 32 and starting SCN of 1286261
RMAN> recover database until sequence 32;
Starting recover at 26-MAR-25
using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:01
Finished recover at 26-MAR-25
RMAN> alter database open resetlogs;
database opened

浙公网安备 33010602011771号