A机系统环境:
软件:Windows2003Server、Oracle9.2.0.1
硬件:DellSC420(P43.0、2G内存、160GSATA硬盘)
Oracle 数据量:11G。
症状:局域网被病毒感染,网络瘫痪;系统损坏。
解决步骤:
1、把服务器硬盘取下挂到B(Dell Dimension 4550)机把Oracle数据(data file,control file,redo file,archive logfile,spfile,pwdfile )取出。由于硬盘轻微损坏oracle 一表空间文件(redo file)无法取出,故从重建undotbs表空间文件开始(用软件修复无果只能是重建)。
2、在B机上面按照A机oracle环境配置安装Oracle 。
3、首先把B机上面所有服务全部关闭,然后把data file,control file,redo file,archive logfile,spfile,pwdfile 文件覆盖B机文件。
注:data file,control file,redo file,archive logfile,spfile,pwdfile 文件位置:如果你的oracle系统和system系统表空间安装在一起。那就很好找了,例如:我的oraclehome在D盘,sid是:“ogtlogdb”
pwdfile、spfile等在:D:\oracle\admin\ogtlogdb
DataFile、redoFile等在:D:\oracle\oradata\ogtlogdb
4、在SQLPlus中登陆“sys/sys@ogtlogdb as sysdba”(本人第一使用sql的时候在cmd下面这样是不成功的,所以先在命令行中敲入“SQLPlus”再敲入“sys/sys@ogtlogdb as sysdba”)。
5、关闭数据库:sql>Shutdown
6、重起数据库,记住启动时加载出错的文件:SQL >Startup force
屏幕如下:
Total System Global Area 126950220 bytes
Fixed Size 453452 bytes
Variable Size 109051904 bytes
Database Buffers 16777216 bytes
Redo Buffers 667648 bytes
数据库装载完毕。
ORA-01157: 无法标识/锁定数据文件 9 - 请参阅 DBWR 跟踪文件
ORA-01110: 数据文件 9: 'D:\ORACLE\ORADATA\XINAHE\USERS01.DBF'
7、把出错和丢失文件全部OffLine drop
sql>alter database datafile 'D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF' offline drop;
如果此处出现其他数据文件错误就和执行上面语句把数据文件offline drop掉。
8、sql>alter database open;
屏幕返回:Database altered;
如果还有数据文件提示错误反复执行第五步。
直到执行本步骤屏幕返回Database altered为止。
9、重建Undotbs表空间:Create undo tablespace undotbs datafile 'C:\ORACLE\ORADATA\ORCL\UNDOTBS02.DBF' size 100M;
屏幕返回:Tablespace created.
10、修复第五步中出现错误的数据文件。
sql>recover automatic datafile 1;
屏幕返回:完成介质恢复。
sql>recover automatic datafile 19;
屏幕返回:完成介质恢复。
把所有offline drop 掉的数据文件用上面语句恢复。
11、把offline drop 掉的文件重新online:
sql>alter database datafile 'D:\ORACLE\ORADATA\ORCL\UNDOTBS01.DBF' online;
sql>alter database datafile 'D:\ORACLE\ORADATA\ORCL\UNDOTBS019.DBF' online;
12、alter database open;
屏幕返回:database opened.
13、重新启动机器(把oracle 服务设置为自动启动)。
备注:有时候Oracle停电之后出现的SYSTEM01.DBF文件损坏等问题,可以通过以上方法恢复,如果实在恢复表,或者是非归档模式,可以使用:
Oracle系统的隐含命令:
alter system set "_allow_resetlogs_corruption"=true scope=spfile;
将UNDO日志改为手动模式:
alter system set undo_management='manual' scope=spfile;
以上设置后过几分钟后,shutdown一下,再启动可以临时性的读出数据。