某业务系统Linux环境下的Oracle 8i(8.1.7.0.1.)数据库,因为操作人员执行shutdown abort命令强行关闭,导致数据库打开失败,报ORA-00704错误:
Mon Mar 22 17:37:41 2010
ORA-704 signalled during: alter database open ...
ORA-00704(bootstrap process failure)表示Oracle在引导过程中出现了问题,是比较严重的错误。因为系统需要尽快恢复运行,没有时间仔细分析故障,于是决定进行数据库恢复。该数据库使用RMAN每周进行一次整库的全备,恢复目录保存在同一台主机上的另一个数据库中,而8i的RMAN有很多地方还不完善,使这次数据库恢复一波三折。下面是恢复过程中碰到的一些问题及相应的解决方法:
首先是在用“list backup”命令查看备份集信息时,报ORA-01220(file based sort illegal before database is open)错误。我猜测该命令需要对从恢复目录数据库检索的内容进行排序,数据库打开前排序操作只能在内存中完成,而排序区的大小不足,所以会报这个错误。在初始化参数文件中,将sort_area_size参数从65536(64KB)改为10485760(10MB),重新把业务数据库启动到mount状态,再次执行“list backup”命令,问题解决。
(2) type 'sbt_tape'
备份文件保存在一个磁带库中,恢复时需要在RUN语句块中用“allocate channel”命令分配通道来从带库中读取文件。需要注意的是,sbt_tape两边要加上引号。最后写好的RUN块如下:
run
{
allocate channel c1 type 'sbt_tape';
allocate channel c2 type 'sbt_tape';
allocate channel c3 type 'sbt_tape';
restore database;
recover database until logseq 73478;
}
(3) ORA-01843
然后执行上面RUN块时,报ORA-01843(not a valid month)错误。错误提示信息中显示的日期是英文的,格式为“MON DD YYYY”;而“list backup”命令的结果中日期是中文的,格式也不同。退出RMAN,通过下面的命令设置NLS_LANG和NLS_DATE_FORMAT环境变量,再从新进入RMAN执行恢复命令,问题解决。
export NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
export NLS_DATE_FORMAT="MON DD YYYY"
(4) 后台执行
恢复操作是先通过远程桌面登陆到一台Windows主机,再使用PuTTY工具SSH登陆到业务服务器上来进行的。而该数据库的数据量较大,备份文件达36GB,完成恢复需要数小时的时间。在这个过程中,远程桌面或PuTTY的连接断开,都会造成数据库的恢复过程中断。因此,将RUN语句块写到一个脚本文件res_ora.rcv中,并设置msglog选项以记录恢复过程中的信息。然后通过如下命令,使恢复操作在Linux后台执行:
rman target / catalog rman/password@rman @res_ora.rcv msglog=res_ora.log &
最终在完成不完全恢复后,使用“alter database open resetlogs”命令打开数据库,数据库恢复成功。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/11662464/viewspace-1032405/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/11662464/viewspace-1032405/