只有.dbf資料檔案進行資料庫恢復

eric0435發表於2012-01-11
由於資料庫伺服器崩潰,造成了無法進入系統進行資料庫備份,只能把oracle相關檔案複製出來。對於複製出來的檔案在測試機上進行一次不完全恢復,具體流程如下所示:
1、安裝oracle 10g服務端並建立一個與要進行恢復的資料庫相同名稱的例項(db_name,sid,字符集一樣,因為在建立控制檔案時,會判斷你要恢復的dbf檔案中檔案頭資訊中的資料庫名是否與所在的例項名是否一樣)
2、以sysdba身份進行備份控制元件檔案到udmp目錄的trace檔案(語句:alter database backup controlfile to trace)
3、Shutdown immediate停止資料庫,備份當前~\oracle\product\10.2.0\oradata目錄中的檔案,接著刪除這些檔案並把需恢復的資料庫的所有.dbf檔案拷到此目錄下。其中 system01.dbf,sysaux01.dbf和儲存真實資料的.dbf檔案是必要的
(只要DBF就可以了,日誌和控制檔案不要)。
4、以sysdba進入並執行startup nomount。把資料庫啟動到nomount狀態。
5、從第2步備份出來trace檔案中複製CREATE CONTROLFILE部分語句來重建控制檔案。此處應根據實際情況增刪表空間檔案記錄,如以下黑體部分則為新增記錄。
CREATE CONTROLFILE   set Database ocp  Resetlogs
  MAXLOGFILES 16
  MAXLOGMEMBERS 3
  MAXDATAFILES 100
  MAXINSTANCES 8
  MAXLOGHISTORY 292
LOGFILE
GROUP 1 'C:\oracle\product\10.2.0\oradata\ocp\RED001.LOG'SIZE 50M,
GROUP 2 'C:\oracle\product\10.2.0\oradata\ocp\RED002.LOG'SIZE 50M,
GROUP 3 'C:\oracle\product\10.2.0\oradata\ocpRED003.LOG'SIZE 50M
DATAFILE
'D:\oradata\SYSTEM01.DBF',--要恢復的資料所在的dbf檔案
'D:\oradata\UNDOTBS01.DBF',--要恢復的資料所在的dbf檔案
'D:\oradata\SYSAUX01.DBF',--要恢復的資料所在的dbf檔案
'D:\oradata\USERS01.DBF',--要恢復的資料所在的dbf檔案
'D:\oradata\EXAMPLE01.DBF',--要恢復的資料所在的dbf檔案
'D:\oradata\HYGEIA01.DBF',--要恢復的資料所在的dbf檔案
'D:\oradata\HYGEIA02.DBF',--要恢復的資料所在的dbf檔案
'D:\oradata\HYGEIA03.DBF'--要恢復的資料所在的dbf檔案
CHARACTER SET ZHS16GBK
6 alter database open  resetlogs;
7 重新建立臨時表空間
8 檢視恢復後結果


第二種情況(其實要恢復資料庫只要system01.dbf,sysaux01.dbf和儲存真實資料的.dbf檔案)
1、安裝oracle 10g服務端並建立一個與要進行恢復的資料庫相同名稱的例項(db_name,sid,字符集一樣,因為在建立控制檔案時,會判斷你要恢復的dbf檔案中檔案頭資訊中的資料庫名是否與所在的例項名是否一樣)
2、以sysdba身份進行備份控制元件檔案到udmp目錄的trace檔案(語句:alter database backup controlfile to trace)
3、Shutdown immediate停止資料庫,備份當前~\oracle\product\10.2.0\oradata目錄中的檔案,接著刪除這些檔案並把需恢復的資料庫的所有.dbf檔案拷到此目錄下。其中 system01.dbf,sysaux01.dbf和儲存真實資料的.dbf檔案是必要的
(只要DBF就可以了,日誌和控制檔案不要)。
4、以sysdba進入並執行startup nomount。把資料庫啟動到nomount狀態。
5、從第2步備份出來trace檔案中複製CREATE CONTROLFILE部分語句來重建控制檔案。此處應根據實際情況增刪表空間檔案記錄,如以下黑體部分則為新增記錄。
CREATE CONTROLFILE   set Database ocp  resetlogs
  MAXLOGFILES 16
  MAXLOGMEMBERS 3
  MAXDATAFILES 100
  MAXINSTANCES 8
  MAXLOGHISTORY 292
LOGFILE
GROUP 1 'D:\oracle\product\10.2.0\oradata\ocp\RED001.LOG'SIZE 50M,
GROUP 2 'D:\oracle\product\10.2.0\oradata\ocp\RED002.LOG'SIZE 50M,
GROUP 3 'D:\oracle\product\10.2.0\oradata\ocp\RED003.LOG'SIZE 50M
DATAFILE
'D:\oracle\product\10.2.0\oradata\ocp\SYSTEM01.DBF',--損壞的資料庫的system表空間的資料檔案
'D:\oracle\product\10.2.0\oradata\ocp\SYSAUX01.DBF',--損壞的資料庫的sysaux表空間的資料檔案
'D:\oracle\product\10.2.0\oradata\ocp\HYGEIA01.DBF',--要恢復的資料所在的dbf檔案
'D:\oracle\product\10.2.0\oradata\ocp\HYGEIA02.DBF', --要恢復的資料所在的dbf檔案
'D:\oracle\product\10.2.0\oradata\ocp\HYGEIA03.DBF'  --要恢復的資料所在的dbf檔案
CHARACTER SET ZHS16GBK

6、Shutdown immediate
7、在admin\pfile目錄下的init.ora里加入隱含引數:
_allow_resetlogs_corruption=true
_allow_terminal_recovery_corruption=true
undo_tablespace='SYSTEM'
undo_management='MANUAL'
8、執行startup pfile='D:\oracle\product\10.2.0\admin\orcl\pfile\init.ora(檔名和目錄按照實際情況而定)' mount force;
9、Recover database\ recover database until cancel進行介質恢復。
10、    Alter database open resetlogs開啟資料庫可能不成功:此處出現了ORA-03113 " ORA-03113: 通訊通道的檔案結尾"的錯誤提示。
11、    重新啟動資料庫(startup) ,結果出現以下錯誤提示:
ora-01113:檔案1需要介質恢復
ora-01110:資料檔案1:'D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF'
12、    從新恢復表空間檔案recover datafile D:\ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\SYSTEM01.DBF(其它表空間檔案可能也需要恢復)
13、    alter database open; 資料庫已更新
14.重新建立UNDOTBS1表空間
create undo tablespace undotbs1 DATAFILE
'D:\oracle\product\10.2.0\oradata\orcl\undotbs01.dbf' SIZE 200M
15、Shutdown immediate
16、在admin\pfile目錄下的init.ora里加入隱含引數:
刪除_allow_resetlogs_corruption=true
刪除_allow_terminal_recovery_corruption=true
undo_tablespace='UNDOTBS1'
undo_management='AUTO'
17.startup pfile='D:\oracle\product\10.2.0\admin\orcl\pfile\init.ora
18、    full export備份資料庫。
19 重新建立臨時表空間
20 檢視恢復後結果

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-714742/,如需轉載,請註明出處,否則將追究法律責任。

相關文章