adump一般是audit dump
bdump是background dump
udump是user dump
cdump是core dump
恢複的步驟
1.還原資料檔案
2.應用redo
3.資料庫包含提交的和未提交的事務
4.應用UNDO
5.恢複完成的資料庫
恢複:用作業系統命令還原檔案,用SQL*PLUS recover命令恢複檔案
非歸檔模式的恢複
必須還原所有的datafile和control files,也可以還原參數檔案、redo log files和口令檔案。
優點:操作容易,低錯誤風險,恢復為拷貝檔案時間。
缺點:資料丟失時必須手動重應用,整個資料庫只能恢複到上一次冷備的時間點。
冷備的linux下磁碟損壞與資料恢複
[Oracle@ora10g ubackup]$ cp /u01/oradate/orcl/* . //先用作業系統命令備份檔案
用虛擬機器建立一個虛擬磁碟sdb
fdisk sdb格式磁碟
Command (m for help):n 增加新分區
Command (m for help):p 1 1 1044 w // 增加主要磁碟分割作業碼,p為主要磁碟分割,1為分區數,1為第一個柱面數, 1044為該分區柱面數 w為寫分區表到磁碟。
mkfs.ext3 sdb1 //在分區增加ext3檔案系統
[oracle@ora10g oradata]$ mount /dev/sdb1 md //掛載到md檔案夾
[oracle@ora10g oradata]$ chown -R oracle:oinstall md //賦權
[oracle@ora10g md]$ cp /u01/ubackup/* . //拷貝備份到md檔案夾
SQL>create pfile from spfile //建立pfile
修改pfile裡面的控制檔案路徑
SQL>create spfile from pfile;
SQL>startup mount
然後把控制檔案裡面的datafile目錄修改
SQL>alter database rename file '/u01/oradata/morewood/system01.dbf' to '/u01/oradata/md/system01.dbf';
....(省略其他的修改操作)
再把控制檔案裡面的tempfile目錄修改
SQL>alter database rename file '/u01/oradata/morewood/temp01.dbf' to '/u01/oradata/md/temp01.dbf';
再把控制檔案裡面的redo log file目錄修改
SQL>alter database rename file '/u01/oradata/morewood/redo01.dbf' to '/u01/oradata/md/redo01.dbf';
...省略其他log目錄修改
自動回復redo log file(沒備份redo log)
1.shutdown執行個體
2.還原datafile和控制檔案
3.執行可取消的恢複
4.open資料庫with resetlogs選項
作業碼:
startup mount
recover database until cancel using backup controlfile;//類比不完全恢複
cancel
alter database open resetlogs;
歸檔模式的恢複
1.完全恢複
確保要還原的datafile是離線狀態
只還原丟失或損壞的datafile
不還原其他檔案
恢複datafile
優點:只需還原丟失的檔案、恢複所有的資料到出錯時間、恢復為還原丟失檔案和應用所有歸檔記錄檔的時間。
缺點:必須包含所有的歸檔記錄檔
v$recover_file:需恢複的datafile,該資訊是控制檔案的資訊。
v$recovery_log:恢複時需要的歸檔記錄檔
資料庫MOUNT狀態下
SQL>recover database或recover datafile '/oradata/orcl/xxwz_data.dbf'
資料庫OPEN狀態下
SQL>recover tablespace xxwz_data;或recover datafile '/oradata/orcl/xxwz_data.dbf'
1.1冷備(直接把檔案拷貝到其他盤)+熱備(先用alter tablespace xxwz_data begin backup)
在不開啟資料庫情況下恢複(可以恢複系統資料表空間和UNDO資料表空間)
shutdown abort;//當資料庫開啟時datafile突然丟失,只有shutdown abort才能關閉資料庫
拷貝冷備的datafile到原資料檔案目錄下;
startup mount;
select * from v$recover_file;//查看需要恢複的資料檔案
set autorecovery off //關閉自動回復
SQL>recover database或recover datafile 1;
在開啟資料庫情況下資料突然丟失的恢複(丟失時資料庫沒意識到)
提示:資料檔案突然丟失,資料庫才有在alter system checkpoint後才能用select * from v$recover_file查到要恢複的檔案。
alter database datafile 1 offline;
拷貝備份檔案;
recover datafile 1;
alter database datafile 1 online;
資料檔案在關閉時已丟失,但要求在開啟資料庫實行恢複(丟失時資料庫已意識到)
startup mount;
alter database datafile 1 offline;
alter database open;
拷貝備份檔案;
recover datafile 1;
alter database datafile 1 online;
1.2 資料檔案沒備份(不能是SYSTEM資料表空間的資料檔案,控制檔案不能被重建)
前提:自資料檔案建立後的所有的歸檔記錄檔都有;控制檔案包含丟失檔案的名字。
alter database datafile 7 offline;
SQL>alter database create datafile 'd:\oracle\oradata\xxwz_data.dbf'或alter database create datafile 'd:\oracle\oradata\xxwz_data.dbf' AS 'e:\oracle\oradata\xxwz_data.dbf';
recovery datafile 7;
alter database datafile 7 online;
控制檔案的checkpoint的SCN小於資料檔案的checkpoint的SCN,則會報控制檔案太舊錯誤,相反則需要介質恢複。
查詢資料檔案的checkpoint的SCN
select file#,checkpoint_change# from v$datafile_header;
查詢控制檔案的checkpoint的SCN
select file#,checkpoint_change# from v$datafile;
控制檔案的恢複
1.控制檔案沒有全部丟失
create pfile from spfile;
刪除pfile中丟失的控制檔案的路徑
create spfile from pfile;
或
cp control02.ctl control01.ctl
2.控制檔案全部丟失
丟失之前把控制檔案備份成trace指令碼
alter database backup controlfile to trace as 'd:\c1.trc';
cp c1.trc c1.sql
修改sql指令碼
執行sql指令碼
或者
丟失之前把控制檔案備份
alter database backup controlfile to 'd:\c1.trc';
然後我又建立一個資料表空間並且插入資料;
丟失後
先把備份的控制檔案拷貝到指定的目錄並重新命名
cp d:\c1.trc control01.ctl
cp d:\c1.trc control02.ctl
cp d:\c1.trc control03.ctl
用控制檔案恢複資料
recover database using backup controlfile;
資料可能在記錄檔的其中一個當中,要一個一個試試
'd:\oracle\oradata\orcl\redo01.log' // 指定用redo01記錄檔進行資料恢複
由於備份的控制檔案沒有記錄新的資料檔案的路徑,執行上面命令後,資料庫會自動指定資料表空間對應的資料檔案路徑到其他地方,這個在執行下面的命令時會有提示。
recover database using backup controlfile;
這時我們要把控制檔案中自動指定的路徑改成我們資料檔案的真實路徑
alter database rename file 'xxxx' to 'd:\oracle\oradata\orcl\xxwz_data1.dbf' //xxx是資料庫指定的路徑,後面的真實資料檔案路徑在第一次recover報錯的時候有提示,也可以從alter_{sid}.log記錄檔查到。
改完後執行恢複命令
recover database using backup controlfile until cancel;
然後繼續一個一個試試redo檔案。成功後輸入
alter database open resetlogs;
resetlogs:
resetlogs選項被需要在進行不完全恢複或者用備份控制檔案進行恢複時。
resetlogs所做的事情:
1.歸檔當前的redo記錄檔(如果他們可訪問),然後清除redo記錄檔的內容,重設log sequence number為1.(例如當前的記錄檔sequence為1000和1001,重設為1和2)
2.如果redo記錄檔不存在則重建他們。
3.重新初始化控制檔案中online redo logs和redo thread的metadata。
4.更新所有當前的資料檔案和聯機重做記錄檔和所有後來已歸檔的重做記錄檔with a new resetlogs SCN and time stamp。
唯讀資料表空間的恢複:
唯讀資料表空間的控制檔案trace指令碼重構時先不裝載該資料表空間,而是在恢複時通過rename file和alter online要實現。具體可以通過對比唯讀和普通資料表空間的控制檔案trace指令碼。
incarnation:對應物
歸檔日誌命名格式%s為log sequence number,%t為thread number,%r為incarnation。
通過reset incarnation實現跨resetlogs的恢複