Oracle通過Redo Archived實現數據的歸檔
什么是Redo日志
Redo日志記錄了數據的變更,用於在數據庫出現故障后,進行數據恢復。
功能主要由三個組件實現:Redo Log Buffer、LGWR后台進程、Redo Log File。
Redo Log Buffer是Oracle共享內存中的一段空間,記錄了數據庫的變更歷史,包括:insert,update,delete,create,alter,drop等。
過程:
- 用戶內存中的記錄 --復制--> SGA中的Redo Log Buffer。
- Redo Log Buffer --LGWR寫入--> Redo Log File中
當用戶積累了一定量的操作后,才會定期的導入到磁盤。
Redo Log Buffer是循環利用的。Redo Log File也是循環利用的。
Redo Log File通過用戶組重用日志,可以通過命令查詢:
select group#,members,status from v$log;
一般來說默認oracle會有3個日志組,每次往一個日志文件里面順序寫,如果寫滿;則會切換日志文件,繼續寫。
什么是Archived日志
Archived日志也叫作歸檔日志,是數據庫運行在歸檔模式下的產物。
可以通過命令查看,數據庫是否運行在歸檔模式下:
select log_mode from v$database;
歸檔模式與非歸檔模式的區別:
- 歸檔模式,就是當redo日志寫滿后,是否把該日志內容拷貝到歸檔日志進行統一的存儲,避免下次寫入的時候覆蓋。
- 非歸檔模式,即不適用歸檔模式,當日志寫滿后,直接切換日志,而不做任何的備份。下次輪到寫入該文件時,文件的內容將會被覆蓋。
如何查看歸檔日志
Oracle的歸檔日志以及重做日志都是二進制文件,外部是無法打開的。Oracle提供了一個叫做LogMiner的工具,可以查看日志的內容。
LogMiner其實是Oracle自帶的PLSQL包,大致過程如下:
- 首先把分析的日志加進去
- 啟動logminer
- 在動態視圖v$logmnr_contens中查詢信息
-- 查詢歸檔日志的路徑
select * from v$archived_log;
-- 查詢重做日志的路徑
select * from v$logfile;
-- 通過LogMiner工具把日志中的數據提取出來
begin
sys.dbms_logmnr.add_logfile(LogFileName => 'D:\APP\XING.HL\ORADATA\ORCL\REDO03.LOG', Options => sys.dbms_logmnr.NEW );
end;
begin
sys.dbms_logmnr.start_logmnr(Options => sys.dbms_logmnr.DICT_FROM_ONLINE_CATALOG);
end;
-- 查詢視圖中的重做日志
select * from v$logmnr_contents;