使用RMAN移动数据库
步骤如下:
1、在原库上使用rman备份数据库
2、拷贝备份片到目标的机器
3、创建备份片存放目录
4、恢复参数/控制文件
5、restore数据库
6、recover数据库
7、增量恢复
1、在原库上使用rman备份数据库
RMAN>backup database;
2、拷贝备份片到目标的机器
通过list backupset查看那些需要拷贝(数据库备份片,控制文件与参数文件)
rsync -avzR /oracle/app/db/dbs/05qcgura_1_1 10.1.1.146:/
rsync -avzR /oracle/app/db/dbs/04qcgufs_1_1 10.1.1.146:/ --grogress
rsync -avzR /oracle/app/db/dbs/06qcgvtn_1_1 10.1.1.146:/ --progress
3、创建数据文件对应的目录
和源库对应,就不需要set newname for datafile 'xxx' to 'xxx';
mkdir -p /oradata/vicl
chmod -R 775 /oradata/vicl
chown -R oracle.oinstall /oradata/vicl
4、恢复参数/控制文件
先启动到nomount为rman的恢复做准备
export ORACLE_SID=vicl12
vi initvicl.ora
db_name=vicl
SQL> startup nomount pfile='/oradata/vicl/initvicl.ora'
--使用rman恢复spfile
restore spfile to '/oracle/app/db/dbs/spfilevicl.ora' from '/oracle/app/db/dbs/06qcgvtn_1_1';
--使用rman恢复controlfile
restore controlfile to '/oradata/vicl/control01.ctl' from '/oracle/app/db/dbs/04qcgufs_1_1';
--使用恢复的spfile登录
shut abort
startup nomunt
5、restore数据库
注册数据库备份片的位置,开始恢复数据库
RMAN> catalog start with '/oracle/app/db/dbs/05qcgura_1_1';
RMAN> restore database;
6、recover数据库
在sqlplus中使用
recover database using backup controlfile until cancel; 做不完全恢复
alter database open resetlogs;
完成移动!
7、增量恢复
但再实际生产过程中,移动完数据库之后,原数据库可能会产生新的数据文件,所以再移动完之后需要做增量恢复;
查询目标库需要哪些归档用作恢复(在目标库上操作)
SQL> select sequence# from v$log; 目标
SEQUENCE#
----------
1
2
0
查询原数据库的最后的数据
SQL> select sequence# from v$log;原
SEQUENCE#
----------
4
2
3
需要恢复的数据是2到4之间的数据;
原库上操作
RMAN> backup archivelog sequence between 2 and 4;
Starting backup at 20-JUL-15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=46 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=32 device type=DISK
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=2 RECID=2 STAMP=885567155
channel ORA_DISK_1: starting piece 1 at 20-JUL-15
channel ORA_DISK_2: starting archived log backup set
channel ORA_DISK_2: specifying archived log(s) in backup set
input archived log thread=1 sequence=3 RECID=3 STAMP=885580629
channel ORA_DISK_2: starting piece 1 at 20-JUL-15
channel ORA_DISK_2: finished piece 1 at 20-JUL-15
piece handle=/oracle/app/db/dbs/09qchpdk_1_1 tag=TAG20150720T184713 comment=NONE
channel ORA_DISK_2: backup set complete, elapsed time: 00:00:16
channel ORA_DISK_1: finished piece 1 at 20-JUL-15
piece handle=/oracle/app/db/dbs/08qchpdi_1_1 tag=TAG201RMAN> backup archivelog sequence between 2 and 4;
Starting backup at 20-JUL-15
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=46 device type=DISK
allocated channel: ORA_DISK_2
channel ORA_DISK_2: SID=32 device type=DISK
channel ORA_DISK_1: starting archived log backup set
channel ORA_DISK_1: specifying archived log(s) in backup set
input archived log thread=1 sequence=2 RECID=2 STAMP=850720T184713 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:38
Finished backup at 20-JUL-15
两个备份片直接拷贝
rsync -avzR /oracle/app/db/dbs/08qchpdi_1_1 10.1.1.146:/ --progress
rsync -avzR /oracle/app/db/dbs/09qchpdk_1_1 10.1.1.146:/ --progress
在目标库中对归档进行恢复RMAN
catalog start with '/oracle/app/db/dbs/09qchpdk_1_1';
catalog start with '/oracle/app/db/dbs/08qchpdi_1_1';
restore archivelog sequence between 2 and 4;