昨天没有看什么具体的知识点
而是去试验了一下RMAN的恢复
从朋友那边得到了一份测试数据库的完全备份集(其实还不够完全)
想在自己这边试验看看能不能恢复回去
先从朋友那边拿到三个控制文件(其实这个时候应该意识到问题的……)
再让他通过spfile创建pfile
至此,一切准备工作就绪(我以为的就绪……)
先在Linux下export ORACLE_SID=数据库SID
然后手动建立相应数据库目录(bdump、pfile等)
设置相应的Tnsname和listener,可以利用netmgr设置
或拷贝现有项,加以简单修改(也就是改改SID什么的)
通过SqlPlus连接新建的ORACLE_SID(这时候是可以连接的)
因为自己已经将control文件拷贝到相应目录
所以启动数据库到mount状态,startup mount
(其实……这里可能不是正确的)
在mount状态下,开始利用备份文件恢复数据文件到新的位置
在SqlPlus下执行下面的PL/SQL块
DECLARE
devtype varchar2(256);
done boolean;
BEGIN
devtype:=sys.dbms_backup_restore.deviceAllocate(type=>'',ident=>'T1');
sys.dbms_backup_restore.restoreSetDatafile;
sys.dbms_backup_restore.restorecontrolfileto
(cfname=>'/home/oracle/oracle/oradata/dagl/control01.ctl');
sys.dbms_backup_restore.restorecontrolfileto
(cfname=>'/home/oracle/oracle/oradata/dagl/control02.ctl');
sys.dbms_backup_restore.restorecontrolfileto
(cfname=>'/home/oracle/oracle/oradata/dagl/control03.ctl');
sys.dbms_backup_restore.restoredatafileto
(dfnumber=>01,toname=>'/home/oracle/oracle/oradata/dagl/system01.dbf');
sys.dbms_backup_restore.restoredatafileto
(dfnumber=>02,toname=>'/home/oracle/oracle/oradata/dagl/undotbs01.dbf');
sys.dbms_backup_restore.restoredatafileto
(dfnumber=>03,toname=>'/home/oracle/oracle/oradata/dagl/sysaux01.dbf');
sys.dbms_backup_restore.restoredatafileto
(dfnumber=>04,toname=>'/home/oracle/oracle/oradata/dagl/user01.dbf');
sys.dbms_backup_restore.restoredatafileto
(dfnumber=>05,toname=>'/home/oracle/oracle/oradata/dagl/example01.dbf');
sys.dbms_backup_restore.restoredatafileto
(dfnumber=>06,toname=>'/home/oracle/oracle/oradata/dagl/dagl');
sys.dbms_backup_restore.restoredatafileto
(dfnumber=>07,toname=>'/home/oracle/oracle/oradata/dagl/rman01.dbf');
sys.dbms_backup_restore.restoreBackupPiece
(done=>done,handle=>'/home/oracle/oracle/oradata/dagl/B7K3BN2E_1_1',
params=>null);
sys.dbms_backup_restore.deviceDeallocate;
END;
/
上面的路径和文件名根据不同数据库,作相应修改
经过这些步骤,就能看到,数据文件已经恢复到相应目录了
我在这个时候,准备open数据库
alter database open;
错误就在这里出现了………………
提示system表空间需要restore ◎◎
去RMAN下,rman target as sysdba
执行,restore database;
执行过程中,发现还在寻找windows路径下的备份文件……
而找了半天资料,也没找到怎么去改这个信息……
后来发现,control文件中可能会包含备份文件信息
(因为朋友的RMAN没有catalog,所以RMAN会自动用control文件替代catalog)
另外,出现system需要restore提示,可能是control文件中的SCN和数据文件不一致
所以,就猜想,这三个控制文件,可能不是生成备份文件时候的
而且RMAN备份的时候,可以选择包含控制文件
另外,在恢复了数据文件后,可能还需要到RMAN下set newname
set newname for datafile 1 to '/home/oracle/oracle/oradata/dagl/system01.dbf';
之后,switch datafile 1;
但目前无法试验正确与否
看来试验只能先暂时到此……
回头告诉朋友一声,让他按照我这个步骤走走
看能不能在他的两台同系统下,完成恢复吧
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/556359/viewspace-526727/,如需转载,请注明出处,否则将追究法律责任。