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一下,再啟動可以臨時性的讀出資料。