RMAN> run 2> {3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1; 4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2; 5> backup database plus archivelog delete all input; 6> }
$srvctl stop db -d testrac下面准备通过RMAN进行数据库的恢复。由于RAC的备份是同时备份到两个节点的本地硬盘上,因此恢复的时候也应该两个节点同时进行RESTORE操作。可以在两个节点上分别启动RMAN,将数据库处于STARTUP MOUNT状态,然后就可以在任意一个节点上执行RESTORE操作:
$ rman target /
RMAN> startup mount
RMAN> exit另一个节点:
$ rman target /
RMAN> startup mount
RMAN> run 2> { 3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1; 4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2; 5> restore database; 6> }如果只启动了RAC的一个节点,则会导致RMAN出现下面的错误:
RMAN> run 2> { 3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1; 4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2; 5> restore archivelog sequence between 179 and 183 thread 1 6> archivelog sequence between 99 and 103 thread 2; 7> }现在面临一个问题,对于还原(RESTORE)操作,可以两个实例同时进行(一个实例mount,一个实例mount+restore),但是对于恢复(RECOVER)操作,只能一个实例完成。这就要求 一个实例必须能同时看到两个实例的归档日志。可以通过nfs mount等方式来实现,这里采用最简单的方法,将节点2上的归档拷贝到节点1的归档目录下(我们在节点1进行恢复)。
RMAN> run 2> { 3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1; 4> allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2; 5> recover database; 6> }
$ rman target /恢复管理器: Release 10.2.0.3.0 - Production on 星期五 5月 18 16:51:33 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.连接到目标数据库: TESTRAC (DBID=4291216984)
RMAN> run { allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1; allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2; backup database plus archivelog delete all input; }备份到磁盘后,开始将磁盘上的备份集备份到带库中:
RMAN> allocate channel for maintenance device type disk format '/data1/backup/%U' connect sys/test@testrac1;
RMAN> crosscheck backupset device type disk;
RMAN> run { allocate channel c1 device type sbt connect sys/test@testrac1; backup backupset all delete all input; }
RMAN> allocate channel for maintenance device type disk format '/data1/backup/%U' connect sys/test@testrac2;
RMAN> crosscheck backupset device type disk;
RMAN> run { allocate channel c2 device type sbt connect sys/test@testrac2; backup backupset all delete all input; }
$ rman target /恢复管理器: Release 10.2.0.3.0 - Production on 星期一 5月 21 17:22:25 2007
Copyright (c) 1982, 2005, Oracle. All rights reserved.连接到目标数据库: TESTRAC (DBID=4291216984)
RMAN> run { allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1; allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2; backup database plus archivelog delete all input; }为了取保一个节点上可以完成所有的恢复,还应该把当前的所有归档日志备份一下,并拷贝到目标节点上:
RMAN> run 2> { 3> allocate channel c1 device type disk format '/data1/backup/%U' connect sys/test@testrac1; allocate channel c2 device type disk format '/data1/backup/%U' connect sys/test@testrac2; backup archivelog all delete all input; 6> }将所有的备份集拷贝到节点1上
RMAN> run 2> { 3> allocate channel c1 device type disk format '/data1/backup/%U'; 4> allocate channel c2 device type disk format '/data1/backup/%U'; 5> restore database; }
RMAN> run 2> { 3> allocate channel c1 device type disk format '/data1/backup/%U'; 4> allocate channel c2 device type disk format '/data1/backup/%U'; 5> recover database; }对于这种情况,甚至不需要去单独还原归档日志,而可以直接使用RECOVER命令,由Oracle自动来完成所需归档日志的还原工作。