1. 程式人生 > >ORACLE重灌之後恢復資料庫,相當於sqlserver的附加資料庫

ORACLE重灌之後恢復資料庫,相當於sqlserver的附加資料庫

在開發機器上經常會遇到重灌系統的問題,重灌之前如果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;

好了,現在可以用客戶端連線這個資料庫了。