非常不幸的,win2003服務器疏於管理,中毒了,清理了病毒以後,oracle也癱瘓了。上次備份還在一周前,這一周的數據咋辦?
首先的想法,是另找一台機器,裝個一模一樣的oracle,再把被刪的文件復制過來。第1次嘗試:
選擇不創建數據庫,僅安裝軟件,選擇原目錄,然後報錯,說安裝位置沖突
[INS-32025]所選安裝與指定Oracle主目錄中已安裝的軟件沖突解決辦法:刪除C:\Program Files\Oracle目錄,安裝繼續
然後又提示原目錄有內容,選擇繼續,安裝完成。
但是安裝完成後,啥都沒變,刪除的文件沒有回來。
第2次嘗試
把原product目錄刪掉,再裝。這次刪除的exe和dll文件回來了,但是oracle服務沒有恢復,運行數據庫配置助手,發現它也沒有識別並加載到原數據庫文件。
第3次嘗試
先卸載,提示要使用deinstall.exe,照做,一路回車,卸載完畢。然後徹底刪除原oracle,包括注冊表、主目錄、和其它文件,詳細參見網絡文章。
再次安裝,這次選擇了創建數據庫,實例名還是保持原來的一樣。
安裝過程中出現了一些問題,比如無權修改鍵,監聽創建失敗,數據庫創建失敗等,心都涼了,也只能一路忽略繼續。
裝完後發現服務回來了,手工啟動TNSListener監聽服務,啟動OracleService實例服務,所幸沒有影響,正常啟動,能夠正常登錄連接熟悉的scott,哦也。
然後就是恢復數據了,停掉OracleService服務,把備份的原庫主目錄下的oradata目錄全部覆蓋過去。
連接提示:ORA-12528: TNS: 監聽程序: 所有適用例程都無法建立新連接
別慌,打開主目錄\product\11.2.0\dbhome_1\NETWORK\ADMIN下的listener.ora文件,在SID_LIST_LISTENER配置修改成:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = C:\oracle\product\10.1.0\db_1) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME = 數據庫實例名) (ORACLE_HOME = c:\oracle\product\10.1.0\db_1) (SID_NAME = 數據庫實例名) ) )
藍色是添加的,保存後重啟TNSListener。
這次似乎成功了,sysdba可以連接上了,可是連接scott時又報錯了:ora-01033:oracle initializationg or shutdown in progress
用cmd方式,執行sqlpuls /nolog,打開sqlplus,
SQL>connect sys/password@orcl as sysdba 用sysdba連接數據庫
SQL>shutdown immediate 停止服務
出現一個ORA-01507的報錯,不過還是顯示例程已關閉,那就別管這個錯了。
SQL>startup 啟動服務
發現報錯:
ORACLE 例程已經啟動。
Total System Global Area 778387456 bytes
Fixed Size 1374808 bytes
Variable Size 234882472 bytes
Database Buffers 536870912 bytes
Redo Buffers 5259264 bytes
ORA-00211: ???????????????
ORA-00202: ????: ''D:\ORACLE11G\FLASH_RECOVERY_AREA\ORCL\CONTROL02.CTL''
那就是這個文件有問題羅
SQL>shutdown immediate 再次停止服務
把備份的原庫主目錄下的FLASH_RECOVERY_AREA目錄全部覆蓋過去。
SQL>startup 再次啟動服務
連接scott,成功!
連接生產用戶,成功!!!
差點哭了……
如果上天給我再來一次的機會,我一定搞成每天自動備份!