在開發機器上經常會遇到重裝系統的問題,重裝之前如果ORACLE沒有及時備份的話重裝之后就糾結了,數據還原很頭疼。
各種娘中只能找到一些ORACLE安裝與重裝系統前目錄相同的解決辦法,目錄不同就沒招了。
我用的是oracle11G。老版的應該相似。
經過我的嘗試,找到了幾個關鍵點,現在分享出來。
1、控制文件CONTROL01.CTL
oracle數據庫的控件文件有兩個,一個是在oradata\oradb中,名稱為CONTROL01.CTL
另外一個是在flash_recovery_area\SDMS_DEMO,名稱為CONTROL01.CTL
控件文件也可能是CONTROL02.CTL 或CONTROL03.CTL
2、控制文件中的datafile,tempfile,logfile
原數據庫中的文件路徑如果和重裝后的路徑不一致,需要將這些路徑全部修改之后就可以了,具體步驟如下:
一:重新創建oracle數據庫后手動關閉oracle所有服務
二:將oradata中新創建的數據庫目錄改名,d:\app\user\oradata\oradb,改為d:\app\user\oradata\oradb_new
三:將原來的數據庫目錄復制到該目錄下,復制后的結果是oradata中有d:\app\user\oradata\oradb_new和d:\app\user\oradata\oradb兩個目錄
d:\app\user\oradata\oradb是重裝之前數據庫的數據文件夾。
四:啟動各項oracle服務
五:用sqlplus /nolog命令進入oracle命令符
六:用connect sys/change_on_install as sysdba;命令獲得系統管理權限並登錄。
七:用select instance_name from v$instance;確認當前的數據庫實例是否正確,如果不是oradb需要使用 set oracle_sid來修改默認的oracle實例(沒記錯的話應該是這個命令可以問度娘查一下)。
八:將d:\app\user\oradata\oradb\CONTROL02.CTL控制文件復制到d:\app\user\flash_recovery_area\oradb中,替換目錄中原有的控制文件,注意:名稱不一樣的話改一下名字。
九:使用startup nomount用無裝載模式啟動數據庫。
十: 設置數據庫為裝載模式:alter database mount;
十一:查看數據文件清單:select name from v$datafile;
查看臨時文件清單:select name from v$tempfile;
查看日志文件清單:select * from v$logfile;
會看到如下結果:
E:\APP\USER\ORADATA\ORADB\SYSTEM01.DBF
E:\APP\USER\ORADATA\ORADB\SYSAUX01.DBF
E:\APP\USER\ORADATA\ORADB\UNDOTBS01.DBF
E:\APP\USER\ORADATA\ORADB\USERS01.DBF
E:\APP\USER\ORADATA\ORADB\SDMS_DATA01.DBF
十二:修改數據文件路徑,依次執行如下命令:
SQL> alter database rename file 'E:\APP\USER\ORADATA\ORADB\SYSTEM01.DBF' to 'D:\APP\USER\ORADATA\ORADB\SYSTEM01.DBF'
注意日志文件修改的時候有點糾結 文件名是redo01,因為oracle默認為大寫,我看成了red001,一直修改不成,另外一個,如果用select * from v$logfile;看到的只有一條日志文件,建議把原數據庫中的幾個都修改一下。
SQL> alter database rename file 'E:\APP\USER\ORADATA\ORADB\REDO03.LOG' to'D:\APP\USER\ORADATA\ORADB\REDO03.LOG';
十三:啟動數據庫:alter database open;
好了,現在可以用客戶端連接這個數據庫了。