我单位一台SUN 450服务器,安装了Oracle8数据库的磁盘损坏,需要更换新盘,重新安装Oracle数据库和备份软件,并从备份服务器上进行恢复。查看原来的数据存放环境,检查字典视图RC_DATAFILE,数据文件的存放位置知道了如果这个目录不存在,系统会要求用户创建该目录,否则数据文件无法恢复。
全库恢复
目录建完后,开始进行数据库的全库恢复:
a) 恢复控制文件
$sqlplus internal $sql>startup nomount |
然后手工执行如下脚本以恢复控制文件:
run
{ allocate channel c1 type 'sbt_tape';
allocate channel c2 type 'sbt_tape';
restore controlfile;
alter database mount;
release channel c1;
release channel c2;
}
控制文件恢复成功。
b) 还原数据库
把启动数据库在mount状态,执行脚本如下:
run{ allocate channel d1 type 'SBT_TAPE'; allocate channel d2 type 'SBT_TAPE'; restore database; sql "alter database open"; release channel d1; release channel d2; } |
数据库数据文件恢复成功。
c) 恢复归档日志
恢复归档日志,执行如下脚本
run{ allocate channel d1 type 'SBT_TAPE'; allocate channel d2 type disk; restore (archivelog all); release channel d1; release channel d2; } |
d) 恢复数据库
恢复数据库,执行如下脚本:
run { allocate channel c1 type 'sbt_tape'; allocate channel c2 type 'sbt_tape'; recover database using backup controlfile until cancel; alter database open resetlogs; release channel c1; release channel c2; } |
数据库恢复完成,经检查确认数据库运行正常。
过期文件恢复灾难恢复系统遇到的最大的一个难题是:在灾难发生时,不能正确地进行恢复,原因是多方面的,比如:索引文件的丢失;介质的损坏;备份数据的过期等情况。笔者遇到了最后一种情况,就是数据备份的保留时间已经过了,从理论上讲,根本就不可能进行恢复。然而,通过从物理磁带上寻找文件,发现还没有真正删除,采取如下方法,实现了完整的恢复:
利用LEGATO软件,从磁带上找到文件,用“SAVE SET”方式恢复,恢复过程如下:
在命令行下运行“nwrecover -s sbackup”调出恢复界面,试图恢复2004年6月8日的数据,但系统报告“out of browse time”,即利用索引无法恢复(备份文件已经过期)。因此,利用save set进行恢复:
a)运行“nwadmin -s sbackup”调出管理界面(如图1)。
图1 管理界面
图2 选择recover
b)在“save set”中选择“recover”。
)在“client”中选择客户端主机名“dbv880”;在“save set”中选择/“opt”; 在“instances”中选择要恢复的版本“06/08/04”,再选择右下角的“recover”,出现“save set recover status”界面(如图3)。
图3 保存版本
图4 恢复完成
d)在“save set recover status”中,在“path to recover”中加入要恢复的详细目录,选择“options”,加入“relocate recovered data to”项,选择“ok”, 最后点击“start”按钮,恢复完成(如图4)。
结束语
数据灾难恢复系统的建立和上线运行,避免了数据的灾难性损失,解除了管理人员的包袱,是目前信息化运营中非常务实和必要的基础工作。本文是笔者建立数据灾难恢复系统过程的总结,难免有些弯路或不足之处,和同行共勉。
阅读(529) | 评论(0) | 转发(0) |