Oracle不完全恢復
Sql代碼
不完全恢復
指的恢復到某一個時間點在這個時間點scn之後的操作會全部消失
recover datafile until scn xxxx;
recover database until scn xxxx;
recover database until sequence xx;恢復到哪個日志文件截止
recover database until xx;恢復到哪個時間點
此時數據文件頭上的scn會小於控制文件的scn號需要resetlogs才能打開數據庫
alter database open resetlogs;
當resetlogs打開後數據庫會重置redo日志redo文件也會重建控制文件的scn回退到與數據文件一致
sys@ORCL> select * from v$log;
GROUP# THREAD# SEQUENCE# BYTES MEMBERS ARC STATUS FIRST_CHANGE# FIRST_TIME
YES UNUSED
YES UNUSED
NO CURRENT 月
resetlog的模式若為了恢復數據建議在其他機器上進行恢復然後同步到生產環境中
當前狀態的在線重做日志文件丟失(不存在備份)
需要不完全恢復原理就是使用數據庫備份恢復然後利用日志(重做日志和在線重做日志)恢復到最大的scn即當前狀態的在線重做日志的上一個
已備份的日志截止scn
最後需要recover database until cancel命令打開數據庫 即恢復到輸入cancel的那一刻
通過
alter database open resetlog;打開數據庫
當非當前日志(狀態為inactive)丟失或損壞時不會影響數據庫因為事務都已經寫入數據庫
alter database drop logfile group ;
alter database clear logfile group ;
alter database add logfile group F:\ORACLE\PRODUCT\\ORADATA\ORCL\REDOLOG size m;
簡單測試了下當shutdown abort後數據庫不會做checkpoint所以日志文件狀態仍為active當active的非當前日志丟失後
無法通過restore恢復恢復後仍會提示logfile不存在也無法drop掉提示實例恢復仍需要
當resetlog恢復後resetlog備份集仍可以使用它會自動跳過resetlog之後的日志文件及使用resetlog之後重置的日志文件進行恢復
當控制文件損壞恢復的方法有兩種
利用trace語句備份的控制文件進行恢復
alter database backup controlfile to trace as c:\atxt;生成控制文件的備份至c盤的atxt文件
alter database backup controlfile to trace as c:\atxt resetlogs;生成resetlog模式的控制信息
alter database backup controlfile to trace as c:\atxt noresetlogs;生成noresetlog模式的控制信息
NORESETLOGS選項生成的控制文件語句僅僅用在 當前版本的在線日志是可用的狀態
RESTLOGS選項用在在線日志不可用的狀態
alter database backup control file to trace;備份到控制文件到trace文件中
生成的trace文件信息如下:
STARTUP NOMOUNT nomount狀態打開數據庫因為控制文件損壞
CREATE CONTROLFILE REUSE DATABASE ORCL NORESETLOGS ARCHIVELOG
MAXLOGFILES 最大日志文件數
MAXLOGMEMBERS 日志文件的鏡像最多有三個此參數在g不起作用限制不住
MAXDATAFILES 控制文件預留的空間大小要能保留個數據文件的記錄當增大此數會自動增加控制文件的大小
MAXINSTANCES 最大的實例個數實際上可以超過個
MAXLOGHISTORY 日志的歷史的條數限制
LOGFILE 日志文件
GROUP (
F:\ORACLE\PRODUCT\\ORADATA\ORCL\REDOLOG
F:\ORACLE\PRODUCT\\ORADATA\ORCL\LOG\REDOLOG
) SIZE M
GROUP F:\ORACLE\PRODUCT\\ORADATA\ORCL\REDOLOG SIZE M
GROUP F:\ORACLE\PRODUCT\\ORADATA\ORCL\REDOLOG SIZE M
DATAFILE
F:\ORACLE\PRODUCT\\ORADATA\ORCL\SYSTEMDBF
F:\ORACLE\PRODUCT\\ORADATA\ORCL\UNDOTBSDBF
F:\ORACLE\PRODUCT\\ORADATA\ORCL\SYSAUXDBF
F:\ORACLE\PRODUCT\\ORADATA\ORCL\USERSDBF
F:\ORACLE\PRODUCT\\ORADATA\ORCL\EXAMPLEDBF
F:\ORACLE\PRODUCT\\ORADATA\ORCL\TESTDBF
CHARACTER SET ZHSGBK 字符集
;
select * from $archived_log;歸檔日志的信息
select * from v$log_history;日志i切換就記錄當非歸檔模式也可以從此查看
創建日志鏡像
alter database add logfile member F:\oracle\product\\oradata\orcl\LOG\redolog to group ;
當增加數據文件或者增加日志文件時建議通過trace的方式備份下控制文件
利用rman catalog模式下恢復控制文件
只能啟動到nomount狀態控制文件損壞Oracle無法判斷其target DB因為一個catalog DB對應多個target DB
需要通過DBID告訴Oracle需要恢復那個target DB
rman target sys/system@orcl catalog rman/rman@test
set dbid=xxxxxxxx
list backup of controlfile;
restore controlfileOracle通過以下參數尋找恢復控制文件的位置 show parameter control_files
恢復後啟動到mount狀態會發現控制文件的checkpoint_change#比數據文件的checkpoint_change#小
需要以下命令進行啟動
recover database using backup controlfile;告訴Oracle此控制文件是舊的
auto輸入autoOracle會自動根據備份的archive log進行恢復但不是真正恢復應該是Oracle內部在做檢查
直到恢復到當前聯機日志提示找不到備份文件這是因為控制文件損壞Oracle不知道這些信息
再次輸入
recover database using backup controlfile;
需要手工指定當前聯機日志文件的位置
F:\oracle\product\\oradata\orcl\REDOLOG
最後輸入以下命令打開數據庫
alter database open with resetlogs;
一致性備份指冷備份shutdown之後的os copy
select
* from v$flash_recovery_area_usage;
閃回恢復區存放以下幾類文件
控制文件(CONTROL FILE AUTOBACKUP)
在線日志
歸檔日志
rman 備份片
rman image copy 備份(COPY DATAFILE to C:\xxdbf)
閃回日志
show parameter db_recovery;
select * from v$flash_recovery_area_usage;
監控閃回恢復區的大小
數據庫失敗的類型
實例失敗
數據庫失敗 媒介失敗
From:http://tw.wingwit.com/Article/program/Oracle/201311/18434.html